TicketSubmitPolicyを使うとコメントがかけない
tracのインスタンス上でauthenticatedユーザにTICKET_APPEND権限をつけているのにコメントが書けないという現象。
現象が出ているtracはこの記事にある通り、基本認証とLDAP認証を併用しています。
tracの管理画面「権限」で個々に権限を与えたユーザではこの現象は発生しません。コメントの編集画面はでてきますが、「変更を送信」をクリックしても反応しない。
HTTPのログを参照してもサーバ側にくるべき"POST"が来ないので、TicketSubmitPolicyが展開してるJavaScriptが原因だとわかった次第。
tracの画面だと新規チケット作成のときもコメント追加のときも同じPOSTが動作するのですが、TicketSubmitPolicyが展開したスクリプトがコメントの時でも新規チケット追加時に必要なコンポーネントがないってことで入力をエラーにしているようです。
どうやら、ログインユーザがtracの権限に登録されているユーザだったらこのような現象は起きないみたい。
基本認証でもLDAP認証でも認証が通ったユーザはtrac上ではauthenticatedユーザとして扱われますが、どうもTicketSubmitPolicyでは「ユーザ名」しか認識しないようで、authenticatedとかanonymousなどの「権限グループ」は使えないようです。
まぁTICKET_ADMINをつけちゃえばいいんですが、ちょっとJavaScriptの勉強がてらTicketSubmitPolicyをいじってみることにしました。URIを参照してチケット新規追加の時だけポリシー(JavaScript)を有効にするってことで。
編集したのは site-packages/TicketSubmitPolicy-0.13-py2.7.egg/ticketsubmitpolicy/ticketsubmitpolicy.py 。これの 258行目あたりから始まっている funcction _onsubmit()という関数の中をこのif文で囲む。
var url = window.location+""; ←これと if (url.indexOf("newticket") != -1){ ←これと var errors = new Array(); %s if (errors.length) { (中略) }←これ
パッチはこちら。
*************** *** 258,263 **** --- 258,265 ---- function _onsubmit() { + var url = window.location+""; + if (url.indexOf("newticket") != -1){ var errors = new Array(); %s if (errors.length) *************** *** 278,283 **** --- 280,286 ---- return true; } + } """ % messages
インデントは最初からされてなかったからいいや。