Class: WEBrick::HTTPAuth::Htdigest

Inherits:
Object
  • Object
show all
Includes:
UserDB
Defined in:
lib/webrick/httpauth/htdigest.rb

Instance Attribute Summary

Attributes included from UserDB

#auth_type

Instance Method Summary collapse

Methods included from UserDB

#make_passwd

Constructor Details

#initialize(path) ⇒ Htdigest

Returns a new instance of Htdigest.



19
20
21
22
23
24
25
26
27
# File 'lib/webrick/httpauth/htdigest.rb', line 19

def initialize(path)
  @path = path
  @mtime = Time.at(0)
  @digest = Hash.new
  @mutex = Mutex::new
  @auth_type = DigestAuth
  open(@path,"a").close unless File::exist?(@path)
  reload
end

Instance Method Details

#delete_passwd(realm, user) ⇒ Object



75
76
77
78
79
# File 'lib/webrick/httpauth/htdigest.rb', line 75

def delete_passwd(realm, user)
  if hash = @digest[realm]
    hash.delete(user)
  end
end

#eachObject



81
82
83
84
85
86
87
88
# File 'lib/webrick/httpauth/htdigest.rb', line 81

def each
  @digest.keys.sort.each{|realm|
    hash = @digest[realm]
    hash.keys.sort.each{|user|
      yield([user, realm, hash[user]])
    }
  }
end

#flush(output = nil) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
# File 'lib/webrick/httpauth/htdigest.rb', line 47

def flush(output=nil)
  output ||= @path
  tmp = Tempfile.new("htpasswd", File::dirname(output))
  begin
    each{|item| tmp.puts(item.join(":")) }
    tmp.close
    File::rename(tmp.path, output)
  rescue
    tmp.close(true)
  end
end

#get_passwd(realm, user, reload_db) ⇒ Object



59
60
61
62
63
64
# File 'lib/webrick/httpauth/htdigest.rb', line 59

def get_passwd(realm, user, reload_db)
  reload() if reload_db
  if hash = @digest[realm]
    hash[user]
  end
end

#reloadObject



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/webrick/httpauth/htdigest.rb', line 29

def reload
  mtime = File::mtime(@path)
  if mtime > @mtime
    @digest.clear
    open(@path){|io|
      while line = io.gets
        line.chomp!
        user, realm, pass = line.split(/:/, 3)
        unless @digest[realm]
          @digest[realm] = Hash.new
        end
        @digest[realm][user] = pass
      end
    }
    @mtime = mtime
  end
end

#set_passwd(realm, user, pass) ⇒ Object



66
67
68
69
70
71
72
73
# File 'lib/webrick/httpauth/htdigest.rb', line 66

def set_passwd(realm, user, pass)
  @mutex.synchronize{
    unless @digest[realm]
      @digest[realm] = Hash.new
    end
    @digest[realm][user] = make_passwd(realm, user, pass)
  }
end