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
Gist:232443
カスタム認証スクリプト 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
Gist:227564