Class: Rack::Client::Auth::Digest::MD5
- Inherits:
-
Auth::Digest::MD5
- Object
- Auth::Digest::MD5
- Rack::Client::Auth::Digest::MD5
- Includes:
- DualBand
- Defined in:
- lib/rack/client/middleware/auth/digest/md5.rb
Instance Method Summary collapse
- #async_call(env) ⇒ Object
- #authorization(challenge) ⇒ Object
-
#initialize(app, realm, username, password, options = {}) ⇒ MD5
constructor
A new instance of MD5.
- #next_nc ⇒ Object
- #params_for(challenge) ⇒ Object
- #sync_call(env) ⇒ Object
- #valid?(challenge) ⇒ Boolean
- #valid_nonce?(challenge) ⇒ Boolean
- #valid_opaque?(challenge) ⇒ Boolean
Methods included from DualBand
Constructor Details
#initialize(app, realm, username, password, options = {}) ⇒ MD5
Returns a new instance of MD5.
8 9 10 11 |
# File 'lib/rack/client/middleware/auth/digest/md5.rb', line 8 def initialize(app, realm, username, password, = {}) @app, @realm, @username, @password = app, realm, username, password @nc = 0 end |
Instance Method Details
#async_call(env) ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/rack/client/middleware/auth/digest/md5.rb', line 25 def async_call(env) @app.call(env) do |response_parts| request = Rack::Request.new(env) response = Response.new(*response_parts) challenge = Digest::Challenge.new(request, response, @realm, @username, @password) if challenge.required? && challenge.digest? && valid?(challenge) @app.call(env.merge((challenge))) {|response_parts| yield response_parts } else @app.call(env) {|response_parts| yield response_parts } end end end |
#authorization(challenge) ⇒ Object
51 52 53 |
# File 'lib/rack/client/middleware/auth/digest/md5.rb', line 51 def (challenge) return 'HTTP_AUTHORIZATION' => "Digest #{params_for(challenge)}" end |
#next_nc ⇒ Object
71 72 73 |
# File 'lib/rack/client/middleware/auth/digest/md5.rb', line 71 def next_nc sprintf("%08x", @nc += 1) end |
#params_for(challenge) ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/rack/client/middleware/auth/digest/md5.rb', line 55 def params_for(challenge) nc = next_nc Rack::Auth::Digest::Params.new do |params| params['username'] = @username params['realm'] = @realm params['nonce'] = challenge.nonce.to_s params['uri'] = challenge.path params['qop'] = challenge.qop params['nc'] = nc params['cnonce'] = challenge.cnonce params['response'] = challenge.response(nc) params['opaque'] = challenge.opaque end end |
#sync_call(env) ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/rack/client/middleware/auth/digest/md5.rb', line 13 def sync_call(env) request = Rack::Request.new(env) response = Response.new(*@app.call(env)) challenge = Digest::Challenge.new(request, response, @realm, @username, @password) if challenge.required? && challenge.digest? && valid?(challenge) return @app.call(env.merge((challenge))) end response.finish end |
#valid?(challenge) ⇒ Boolean
39 40 41 |
# File 'lib/rack/client/middleware/auth/digest/md5.rb', line 39 def valid?(challenge) valid_opaque?(challenge) && valid_nonce?(challenge) end |
#valid_nonce?(challenge) ⇒ Boolean
47 48 49 |
# File 'lib/rack/client/middleware/auth/digest/md5.rb', line 47 def valid_nonce?(challenge) challenge.nonce.valid? end |
#valid_opaque?(challenge) ⇒ Boolean
43 44 45 |
# File 'lib/rack/client/middleware/auth/digest/md5.rb', line 43 def valid_opaque?(challenge) !(challenge.opaque.nil? || challenge.opaque.empty?) end |