(ヽ´ω`) < 助けてほしいマン

わからないことを助けてほしいマンが書くブログ

(ヽ'ω`) < Moinmoinでユーザの作成を禁止する

(ヽ'ω`) < 勝手にユーザ作成とかされると困るんですよ

Moinmoinはデフォルトで、ユーザ作成が誰でも可能となっている。

おそらくはPublicなWikiを想定してこういう仕様になっているものと考えられるが、PrivateなWikiの場合はこれが不都合な場合もある。

基本的にはACLをきちんと設定してあれば、閲覧・編集などを禁止できるのだが、それでも知らないユーザが勝手に作成されるのは気持ちが悪い。

(ヽ'ω`) < Webからチョイチョイー…じゃない

公式のWiki内でFeatureRequestとして以下の通りに設定方法が解説されている。

FeatureRequests/DisableUserCreation - MoinMoin

…のだが、wikiconfig.pyの中でPythonのコードを記述してね〜と書いてある。

しかも1系列でもバージョンによって設定方法が違う!さすがMoinmoin、ちょっと触ってみるかー程度の初心者を容赦なく切り捨てていくスタイル。

(ヽ'ω`) < いや、いいからさっさとやり方

現在のStableの1.9では比較的簡単。

wikiconfig.pyの中、最下部に以下の記述を追加する。

    # stop new accounts being created
    import MoinMoin.config.multiconfig # if not already included in your config file
    actions_excluded = MoinMoin.config.multiconfig.DefaultConfig.actions_excluded + ['newaccount']

まあ、なんとなくデフォルトの禁止アクションにnewaccountを追加しているなという事はわかる。

(ヽ'ω`) < はい、注目(2回目)

記述の際に一つ注意点。Pythonではブロックをインデントで表現する。上記の文は、wikiconfig.py内のConfigクラス内に記述するので、1レベル分インデントする必要がある。また、Pythonではタブによるインデントと空白によるインデント、空白のインデントの場合その個数も区別される。

というわけで、上記の記述は必ず先頭に半角スペース4つを挿入してwikiconfig.pyの最下部に記載する必要がある。(Configクラス定義内であれば最下部である必要はないけど、わかりやすくするため)

この約束を守らない(インデントが崩れている)と、以下の通りConfigurationErrorと表示されWikiにアクセスできなくなる。

f:id:tsugi-hagi:20141017094609p:plain

(ヽ'ω`) < 実際にどうなる?

上記の設定を記述した場合、アカウントの新規作成を行おうとすると

f:id:tsugi-hagi:20141017094112p:plain

こうなる

f:id:tsugi-hagi:20141017094125p:plain

(ヽ'ω`) < ログインページのユーザ作成のリンクも消したいんだけど…

困ったことにログインページの内容は、Webから操作できるページとして用意されていないようで、ソースを直接いじることになる。

/usr/lib/python<version>/site-packages/MoinMoin/auth/__init__.pyclass MoinAuthdef login_hintのmsgへの代入文、以下の箇所をコメントアウトする。

## 263, 264行目をコメントアウト moinmoin-1.9.7.tar.gz 2014/10/17日現在
261         msg = ''
262         #if request.cfg.openidrp_allow_registration:
263         #msg = _('If you do not have an account, <a href="%(userprefslink)s">you can create one now</a>. ') % {
264         #      'userprefslink': userprefslink}
265         msg += _('<a href="%(sendmypasswordlink)s">Forgot your password?</a>') % {
266                'sendmypasswordlink': sendmypasswordlink}
267         return msg

Apacheを再起動して、ログインページを表示させると

f:id:tsugi-hagi:20141017102752p:plain

"もしくは"を消したい場合は、これまた言語パックの中身をいじって…と収集がつかなくなりそうなので、この辺で妥協。

(ヽ'ω`) < superuserにだけユーザ追加を許可したいんだけど…

FeatureRequests/DisableUserCreation - MoinMoin

同じページの"Solution for 1.9 to only allow superusers to create new accounts"というセクションに方法が記載されている。

がっつりとPythonでソースを書き換えるという、これもうヘルプとかそういう内容じゃないよね的な。

内容としては独自の認証用のクラスを作成して、継承元のクラスからアカウント作成のリンク部分を削除して…

(ヽ'ω`) < めんどい

基本的には指示通りにコピー&ペーストでOKだけれども、CLImoinコマンドを使ったり、登録時だけ一時的に設定を戻すとか、運用で逃げる方法もありかなと。