ダイジェスト認証

「ユーザーがパスワードを変更できるようにする Web アプリ。」

WebDAV や、WebDAV+Subversion のサービスを提供するにあたって、ダイジェスト認証環境を作った。そこ後、ユーザーが自分でパスワードを変更できるようにするために、即席で作ったのがこのツール。パスワードを変更するだけの単純な機能しかないが、まあ、誰かの役に立つこともあるだろう…。

  • index.rb
# ダイジェスト認証用パスワード変更 Web アプリ
# ダイジェスト認証後に使われることが前提

require 'cgi'
require 'webrick'

include WEBrick

# ファイル名、レルムを設定して使用する。
$DIGEST_FILE = '.ht_digest'
$REALM = 'anything'

$status = nil

# パスワード変更
cgi = CGI.new
if cgi['submit'] == 'change'
  htd = HTTPAuth::Htdigest.new($DIGEST_FILE)
  htd.set_passwd($REALM, cgi.remote_user, cgi['password']);
  htd.flush
  $status = "Changed!"
end

# HTML 生成
cgi.out() do
str = <<EOS
<html>
<head>
<link rel="stylesheet" type="text/css" href="base.css" />
<title>Password changer</title>
</head>
<body>
<h2>#{$status}</h2>
<h1>Password changer</h1>
<form method="post" action=".">
<dl>
  <dt>Account</dt>
  <dd>#{cgi.remote_user}</dd>
  <dt>New password</dt>
  <dd><input name="password" type="password" /></dd>
</dl>
<input type="submit" name="submit" value="change" />
</form>
</body>
</html>
EOS
end
body {
  margin:1cm;
}
h1 {
  border-bottom-style: solid;
  border-bottom-width: 1px;
}
h2 {
  color:red;
}
dt, dd {
  margin:1mm;
  padding:2mm;
  float:left;
}
dt {
  background-color:silver;
  width:20%;
}
dd {
  width:70%;
}