(ヽ'ω`) < 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にアクセスできなくなる。
(ヽ'ω`) < 実際にどうなる?
上記の設定を記述した場合、アカウントの新規作成を行おうとすると
こうなる
(ヽ'ω`) < ログインページのユーザ作成のリンクも消したいんだけど…
困ったことにログインページの内容は、Webから操作できるページとして用意されていないようで、ソースを直接いじることになる。
/usr/lib/python<version>/site-packages/MoinMoin/auth/__init__.py
のclass MoinAuth
内def 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を再起動して、ログインページを表示させると
"もしくは"を消したい場合は、これまた言語パックの中身をいじって…と収集がつかなくなりそうなので、この辺で妥協。
(ヽ'ω`) < superuserにだけユーザ追加を許可したいんだけど…
FeatureRequests/DisableUserCreation - MoinMoin
同じページの"Solution for 1.9 to only allow superusers to create new accounts"というセクションに方法が記載されている。
がっつりとPythonでソースを書き換えるという、これもうヘルプとかそういう内容じゃないよね的な。
内容としては独自の認証用のクラスを作成して、継承元のクラスからアカウント作成のリンク部分を削除して…
(ヽ'ω`) < めんどい
基本的には指示通りにコピー&ペーストでOKだけれども、CLIのmoin
コマンドを使ったり、登録時だけ一時的に設定を戻すとか、運用で逃げる方法もありかなと。