[PREVIOUS CHAPTER] [NEXT CHAPTER]

5 モデレータ

    この章は『ＭＬに流す前に査読をする人がいるというシステム』についてです。

    注: モデレータは moderator コマンドを使うためにＭＬのメンバーでないと
        だめです。members ないし members-admin にモデレータの人の
        アドレスを追加しておいて下さい。

    5.1	Overview

    モデレーター機能は、以下のような査読投稿システムです。

    	1 ＭＬ宛に来たメールは配送されず
    	2 一旦モデレーターへフォワードされます
    	3 モデレーターは内容を査読後承認するなら
    	  あるキーワード(パスワード)をＭＬサーバへ送ることで
    	  ＭＬ全体へ配送されます。
    	 (このキーワードを送る方法については後述します)

    変数は config.ph で

    	$PERMIT_POST_FROM              = "moderator";

    となっている状態です。makefml config の設定画面では

       [POST]

       1    PERMIT_POST_FROM                   moderators

    のようになります。コマンドについても

       [COMMAND]

       3    PERMIT_COMMAND_FROM                moderators

    設定はできますが、いちいち承認を出すコマンドというのは意味がない気がし
    ます。が、実際にはコマンドへの承認をだすことができます:)

    tricky なコードの副産物で $MAIL_LIST != $COMMAND_ADDRESS なのに
    $MAIL_LIST も # moderator コマンドは理解してしまいます。このままでもい
    いような気がしてそうなってます。$PERMIT_COMMAND_FROM が moderators は
    tricky なことをしているので、ちょっとねぇ…

    5.2	承認の仕方 ($MODERATOR_FORWARD_TYPE == 2 デフォールト)

    $MODERATOR_FORWARD_TYPE という変数があります。デフォールトは２です。

    次のようなメールがモデレーターに来ます。

       Moderated $MAIL_LIST (elena@fml.org) receives a submit from

          fukachan@fml.org.

       Please check it. If you certify the following article,
       please send to elena-ctl@fml.org
       the following line (only this line!)

       moderator certified 199711032027.709982

       ------- Forwarded Message

       メール本文

       ------- End of Forwarded Message

    メールはＭＬサーバも保存しています。メール本文の内容を承認したなら、

    moderator certified 199711032027.709982

    の行だけをコマンド用のアドレスに送って下さい。そうするとＭＬサーバは自
    分が保存しておいたそのメールを配送します。

    モデレーターか否かはこの特別な文字列(moderator certified 数字)を知っ
    ているか否かです。この数字は毎回違うもるので、ある意味で暗合レベルの非
    常に低い one time password だとみなすこともできます。

    このメールが送られてくる人は誰でもモデレーターになれます。デフォールト
    は $MAINTAINER ですが、複数の人をモデレーターにするなら moderators と
    いうファイルを作り actives や members のように一行一アドレス書いていっ
    て下さい。

    5.3	承認の仕方 ($MODERATOR_FORWARD_TYPE == 1 もしくは 未定義)

    承認を求めるメールがフォワードされるのは $MAINTAINER です。承認したか
    否かはパスワード認証になります。パスワードを知っている人がモデレータと
    いえます。ＭＬサーバへ送るメールのヘッダに Approval: line をつけて

    	1 メールは一回管理者へフォワードされる。
            2 管理者が査読してOKとみなしたらＭＬへ投げる。
              Approval: password フィールドをヘッダにつけてＭＬに
              投げればメールは配送される。

    パスワードはリモート管理のし方と同様に保守して下さい。
    問題としては

    	Approval: password をつかうのはいやだ
    	＃こういう実装はいやなんだけど、してるだけ

    	ださいMUA(メールユーザインターフェイス)がある

    などがあるので回避策の一つとして

    	admin forward
    	フォワードする本文

    というコマンドもあります。

    	admin pass あなたのパスワード
    	admin forward
    	本文(この下は全部フォワードされる)

    5.4	承認の仕方 ($MODERATOR_FORWARD_TYPE == 3 もしくは 未定義)
    5.3

    Type III は I の変形です。パスワードを知っている人(モデレータ)は査読に
    関わらず出せます。Approval: パスワード つきでメールをだせば査読にまわ
    らずそのまま通過します。

    See also "admin forward" command.
    5.3

    5.5	メンバーを信頼度に応じて3段階に分ける

    メンバーを3段階に分けることを考える。

    group 1: モデレータ(の人々)。無条件に信頼される。
    group 2: 信頼できるメンバ。普通に送ると普通に配送される。
    group 3: 一般メンバ。普通に送るとモデレータに転送され、
    	 通常のモデレータの手順を踏む。

    通常モデレータモードは３段階ではないので改造が必要である。
    ここではこれをHOOKでこれを実現することにする。

    1. まずデフォールトはモデレータモードにする。makefml config なりcfに書
    くなりして

    	$PERMIT_POST_FROM  = "moderator";

    になるようにする。

    2. priv というファイルをＭＬのHOMEにつくり、group 2 に対応する信頼でき
    るメンバー(だがモデレータではない)の群を登録する(一行一アドレス)。

    3.  その上で以下のようなHOOKをcfの最後に入れて config.ph を再生成する。

    $START_HOOK = q#
         $PRIV_LIST = "$DIR/priv";
          if (&CheckMember($From_address, $PRIV_LIST)) {
             $PERMIT_POST_FROM  = "members_only";
       }
    #;

    5.6	queueのexpire

    	$MODERATOR_EXPIRE_LIMIT (default 14 == 2 weeks)

    submitされたが承認されなかったメールは２週間(デフォールト値)たったら消
    す。期間は $MODERATOR_EXPIRE_LIMIT という変数で制御する。

[PREVIOUS CHAPTER] [NEXT CHAPTER]