Trac に login するための Wrapper

Trac に login するための Wrapper

AccountManagerPlugin が動いてくれればそっち経由で認証できたんだろうけど、
当面 Basic認証でがんばる方針にしたため「trac.cgi が起動されたあとに Apache の認証はかけられない」問題に直面。
サイト全体で認証かけて guest/guest で運用するという手もあるがそれだと閲覧者に優しくないし。

で、そもそも trac.cgi がラッパーなんだから、/login だったらリダイレクトさせようという作戦が記載されていた。
うちは shスクリプト修行中なので、後で sh スクリプト版を作ってみよう。

作ってみた

  • $HOME/www/trac-login/.htaccess にBasic認証用設定を書いた
  • $HOME/www/trac.cgi および $HOME/www/trac-login/trac.cgi に以下のCGIを置いた。中身はハードリンクで同じファイルにしてある。

trac.cgi:

#!/bin/sh
# $baseuri is trac site (trac.cgi -> trac)
baseuri=/trac
# .htaccess and trac.cgi(hard link to this file) are placed in $logindir 
logindir=/trac-login

exectrac() {
  export TRAC_ENV=/home/XXX/project/trac
  . /home/XXX/bin/tracenv
  exec /home/XXX/local/share/trac/cgi-bin/trac.cgi
}

loginuri=${logindir}${baseuri}/login
redirectlogin() {
  echo Location: http://${HTTP_HOST}$loginuri
  echo
}

case $REQUEST_URI in
  ${loginuri})
    exectrac
    ;;
  */login)
    redirectlogin
    ;;
  *)
    exectrac
    ;;
esac

Trac のドキュメントにある <Location> ディレクティブを使う方法は、同じcgiを経由しているのでよいのだが、
こちらは別ディレクトリにある .htaccess を使うので、ログイン後もそのディレクトリ下からのアクセスでないと認証はうまく動作しない。

ログイン時と非ログイン時でURLが異なって若干嬉しくないが、ログイン後のURLは permanent URL でなくてもいいということでよしとする。
(非ログインでページアクセスできる方が重要)

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。