Class: WEBrick::HTTPAuth::Htdigest
| Relationships & Source Files | |
| Super Chains via Extension / Inclusion / Inheritance | |
| Instance Chain: 
          self,
          UserDB
         | |
| Inherits: | Object | 
| Defined in: | lib/webrick/httpauth/htdigest.rb | 
Overview
Htdigest accesses apache-compatible digest password files.  Passwords are matched to a realm where they are valid.  For security, the path for a digest password database should be stored outside of the paths available to the HTTP server.
Htdigest is intended for use with DigestAuth and stores passwords using cryptographic hashes.
htpasswd = WEBrick::HTTPAuth::Htdigest.new 'my_password_file'
htpasswd.set_passwd 'my realm', 'username', 'password'
htpasswd.flushClass Method Summary
- 
    
      .new(path)  ⇒ Htdigest 
    
    constructor
    Open a digest password database at path
Instance Attribute Summary
UserDB - Included
| #auth_type | The authentication type. | 
Instance Method Summary
- 
    
      #delete_passwd(realm, user)  
    
    Removes a password from the database for userinrealm.
- 
    
      #each  
    
    Iterate passwords in the database. 
- 
    
      #flush(output = nil)  
    
    Flush the password database. 
- 
    
      #get_passwd(realm, user, reload_db)  
    
    Retrieves a password from the database for userinrealm.
- 
    
      #reload  
    
    Reloads passwords from the database. 
- 
    
      #set_passwd(realm, user, pass)  
    
    Sets a password in the database for userinrealmtopass.
UserDB - Included
| #get_passwd | Retrieves a password in  | 
| #make_passwd | Creates an obscured password in  | 
| #set_passwd | Sets a password in  | 
Constructor Details
    .new(path)  ⇒ Htdigest 
  
Open a digest password database at path
# File 'lib/webrick/httpauth/htdigest.rb', line 36
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)
Removes a password from the database for user in realm.
# File 'lib/webrick/httpauth/htdigest.rb', line 112
def delete_passwd(realm, user) if hash = @digest[realm] hash.delete(user) end end
#each
Iterate passwords in the database.
# File 'lib/webrick/httpauth/htdigest.rb', line 121
def each # :yields: [user, realm, password_hash] @digest.keys.sort.each{|realm| hash = @digest[realm] hash.keys.sort.each{|user| yield([user, realm, hash[user]]) } } end
#flush(output = nil)
Flush the password database.  If output is given the database will be written there instead of to the original path.
# File 'lib/webrick/httpauth/htdigest.rb', line 71
def flush(output=nil) output ||= @path tmp = Tempfile.create("htpasswd", File::dirname(output)) renamed = false begin each{|item| tmp.puts(item.join(":")) } tmp.close File::rename(tmp.path, output) renamed = true ensure tmp.close if !tmp.closed? File.unlink(tmp.path) if !renamed end end
#get_passwd(realm, user, reload_db)
Retrieves a password from the database for user in realm.  If reload_db is true the database will be reloaded first.
# File 'lib/webrick/httpauth/htdigest.rb', line 90
def get_passwd(realm, user, reload_db) reload() if reload_db if hash = @digest[realm] hash[user] end end
#reload
Reloads passwords from the database
# File 'lib/webrick/httpauth/htdigest.rb', line 49
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)
Sets a password in the database for user in realm to pass.
# File 'lib/webrick/httpauth/htdigest.rb', line 100
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