3日目です
はじめに
apache用にhtpasswdを作る機会がそこそこあって、毎回 luft様 のページにお世話になっていました。今回は自分で作成してみようと思ったので記録を残します。
環境
- ruby 2.1.5
- windows 7
※ htpasswdの設置等はこの記事に含まれていません。
早速書いたScript
require 'securerandom'
require 'webrick'
include WEBrick
module MyScript
class Htpasswd
def initialize(name, chara_length)
@name = name
@passwd = SecureRandom.urlsafe_base64[0...chara_length.to_i]
end
def generate
passwd = HTTPAuth::Htpasswd.new('.htpasswd')
passwd.set_passwd(nil, "#{@name}", "#{@passwd}")
end
def display
{
'name' => @name,
'password' => @passwd,
'htpasswd' => "#{@name}:#{generate}"
}
end
end
end
print "Input name: "
name = STDIN.gets.chomp
print "Input password length: "
chara_length = STDIN.gets.chomp.to_i
htpasswd = MyScript::Htpasswd.new(name, chara_length)
puts "n"
htpasswd.display.each {|title, text| puts "#{title} => #{text}"}
puts "nfinished."
STDIN.gets
exit 0
表示イメージ
IDと文字数を入力するとID、PW、htpasswdに記載するテキストを表示します。
htpasswdファイルを個別に追加するようだったのでそのまま出力してしまいました。
$ ruby htpasswd.rb
Input name: username # STDIN.getsでID名を入力
Input password length: 16 # STDIN.getsでパスワードの文字数を入力
name => username
password => mkmLbE38A3QYapaf
htpasswd => username:zr5BN5NG6F5bM
finished.
備考とまとめ
HTPASSWDを操作するクラス
WEBrick::HTTPAuth::Htpasswd のクラスでそのままファイルにhtpasswdを追加したり破棄したりができます。直接サーバ内で一つのファイルを管理するなら素直にコチラだけ使うのが良さそうです。
ランダムなパスワードの作成
色々とやりかたがあるようなのですがSecureRandomを利用するのが一番お手軽そうでした。文字列にも色々種類があるようなので、合わせてどの形態のパスワードが良いか検討されるのも良さそうです。
※参考: http://www.xmisao.com/2014/02/15/how-to-generate-a-random-string-in-ruby.html