MoinMoinを仕事で使いたい。今すでに使っている社内の認証機構を使ってユーザ管理を楽するためにはどうすればいいか? Pythonのちょっとしたスクリプトを書けばなんとかなるようだ。
ということで調べてみたら、
- wikiconfig.pyのConfigクラス内でカスタムスクリプトを使うように設定する。
- ログイン用のカスタムスクリプトを書いて、MoinMoin/auth/以下に置く。
の2つの手順でできることがわかった。MoinMoin-1.6で動くことを確認した。
以下、やってみて上手くいった手順を記録しておく。
この例では、
- カスタムスクリプト内にユーザ情報を保持している。この部分を必要な認証機構を呼び出すようにすれば使えるはず。
- メールアドレスと別名もMoinMoinのプロファイル外で管理していることにして、カスタムスクリプト内で設定管理している。
wikiconfig.pyの編集
class Config(DefaultConfig): """MoinMoinのカスタム認証スクリプトmyauth.loginを使うようにwikiconfig.py で認証方法を指定。 """ from MoinMoin.auth import moin_session,myauth auth = [myauth.login, moin_session] #MoinMoin内のPreferenceを自動的に作成する user_autocreate = True
カスタム認証スクリプト MoinMoin/auth/myauth.py
# -*- coding: utf-8 -*- """MoinMoin custom user authentication sample """ from MoinMoin import user #User Database _USER_MAP = {'user1,pass1' : ('user1@example.com',u'user1'), 'user2,pass2' : ('user2@example.com','user2')} def login(request, **kw): username = kw.get('name') password = kw.get('password') login = kw.get('login') user_obj = kw.get('user_obj') if not login: return user_obj, True u = None user_info = _USER_MAP.get("%s,%s" % (username,password),False) if user_info: u = user.User(request, name=username, auth_username=username, password=password, auth_method='myauth', auth_attribs=('name', 'auth_username', 'password', 'email', 'aliasname', )) u.email = user_info[0] u.aliasname = user_info[1] u.create_or_update(True) request.log("Login OK. user=%s, email=%s, aliasname=%s." % (username,user_info[0],user_info[1])) return u, True