Class: WEBrick::HTTPAuth::Htdigest (Ruby 2.7.3)
Description: Class : WEBrick::HTTPAuth::Htdigest - Ruby 2.7.3

### Home Classes Methods

### In Files

- webrick/httpauth/htdigest.rb

### Parent

Object

### Methods

- ::new
- #delete_passwd
- #each
- #flush
- #get_passwd
- #reload
- #set_passwd

### Included Modules

- WEBrick::HTTPAuth::UserDB

### Class/Module Index

Quicksearch

- Errno
- Errno::ECONNABORTED
- Errno::ECONNRESET
- Errno::EPROTO
- Object
- WEBrick
- WEBrick::AccessLog
- WEBrick::AccessLog::AccessLogError
- WEBrick::BasicLog
- WEBrick::CGI
- WEBrick::Config
- WEBrick::Cookie
- WEBrick::Daemon
- WEBrick::GenericServer
- WEBrick::HTMLUtils
- WEBrick::HTTPAuth
- WEBrick::HTTPAuth::Authenticator
- WEBrick::HTTPAuth::BasicAuth
- WEBrick::HTTPAuth::DigestAuth
- WEBrick::HTTPAuth::Htdigest
- WEBrick::HTTPAuth::Htgroup
- WEBrick::HTTPAuth::Htpasswd
- WEBrick::HTTPAuth::ProxyAuthenticator
- WEBrick::HTTPAuth::ProxyBasicAuth
- WEBrick::HTTPAuth::ProxyDigestAuth
- WEBrick::HTTPAuth::UserDB
- WEBrick::HTTPProxyServer
- WEBrick::HTTPRequest
- WEBrick::HTTPResponse
- WEBrick::HTTPResponse::InvalidHeader
- WEBrick::HTTPServer
- WEBrick::HTTPServerError
- WEBrick::HTTPServlet
- WEBrick::HTTPServlet::AbstractServlet
- WEBrick::HTTPServlet::CGIHandler
- WEBrick::HTTPServlet::DefaultFileHandler
- WEBrick::HTTPServlet::ERBHandler
- WEBrick::HTTPServlet::FileHandler
- WEBrick::HTTPServlet::HTTPServletError
- WEBrick::HTTPServlet::ProcHandler
- WEBrick::HTTPStatus
- WEBrick::HTTPStatus::ClientError
- WEBrick::HTTPStatus::EOFError
- WEBrick::HTTPStatus::Error
- WEBrick::HTTPStatus::Info
- WEBrick::HTTPStatus::Redirect
- WEBrick::HTTPStatus::ServerError
- WEBrick::HTTPStatus::Status
- WEBrick::HTTPStatus::Success
- WEBrick::HTTPUtils
- WEBrick::HTTPUtils::FormData
- WEBrick::HTTPVersion
- WEBrick::Log
- WEBrick::SNIRequest
- WEBrick::ServerError
- WEBrick::SimpleServer
- WEBrick::Utils
- WEBrick::Utils::TimeoutHandler

No matching classes.

# WEBrick::HTTPAuth::Htdigest

`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 `WEBrick::HTTPAuth::DigestAuth` and stores passwords using cryptographic hashes.

    htpasswd = WEBrick::HTTPAuth::Htdigest.new 'my_password_file'
    htpasswd.set_passwd 'my realm', 'username', 'password'
    htpasswd.flush

### Public Class Methods

new(path) click to toggle source

Open a digest password database at `path`

                   # File webrick/httpauth/htdigest.rb, line 37
    def initialize(path)
      @path = path
      @mtime = Time.at(0)
      @digest = Hash.new
      @mutex = Thread::Mutex::new
      @auth_type = DigestAuth
      File.open(@path,"a").close unless File.exist?(@path)
      reload
    end

### Public Instance Methods

delete_passwd(realm, user) click to toggle source

Removes a password from the database for `user` in `realm`.

                   # File webrick/httpauth/htdigest.rb, line 113
    def delete_passwd(realm, user)
      if hash = @digest[realm]
        hash.delete(user)
      end
    end

each() click to toggle source

Iterate passwords in the database.

                   # File webrick/httpauth/htdigest.rb, line 122
    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) click to toggle source

Flush the password database. If `output` is given the database will be written there instead of to the original path.

                   # File webrick/httpauth/htdigest.rb, line 72
    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
        File.unlink(tmp.path) if !renamed
      end
    end

get_passwd(realm, user, reload_db) click to toggle source

Retrieves a password from the database for `user` in `realm`. If `reload_db` is true the database will be reloaded first.

                   # File webrick/httpauth/htdigest.rb, line 91
    def get_passwd(realm, user, reload_db)
      reload() if reload_db
      if hash = @digest[realm]
        hash[user]
      end
    end

reload() click to toggle source

Reloads passwords from the database

                   # File webrick/httpauth/htdigest.rb, line 50
    def reload
      mtime = File::mtime(@path)
      if mtime > @mtime
        @digest.clear
        File.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) click to toggle source

Sets a password in the database for `user` in `realm` to `pass`.

                   # File webrick/httpauth/htdigest.rb, line 101
    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