| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/http/http_auth_handler_digest.h" | 5 #include "net/http/http_auth_handler_digest.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/md5.h" | 10 #include "base/md5.h" |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 99 return HttpAuth::AUTHORIZATION_RESULT_STALE; | 99 return HttpAuth::AUTHORIZATION_RESULT_STALE; |
| 100 } else if (base::LowerCaseEqualsASCII(parameters.name(), "realm")) { | 100 } else if (base::LowerCaseEqualsASCII(parameters.name(), "realm")) { |
| 101 original_realm = parameters.value(); | 101 original_realm = parameters.value(); |
| 102 } | 102 } |
| 103 } | 103 } |
| 104 return (original_realm_ != original_realm) ? | 104 return (original_realm_ != original_realm) ? |
| 105 HttpAuth::AUTHORIZATION_RESULT_DIFFERENT_REALM : | 105 HttpAuth::AUTHORIZATION_RESULT_DIFFERENT_REALM : |
| 106 HttpAuth::AUTHORIZATION_RESULT_REJECT; | 106 HttpAuth::AUTHORIZATION_RESULT_REJECT; |
| 107 } | 107 } |
| 108 | 108 |
| 109 int HttpAuthHandlerDigest::Init(const HttpAuthChallengeTokenizer& challenge) { | 109 int HttpAuthHandlerDigest::InitializeFromChallengeInternal( |
| 110 const HttpAuthChallengeTokenizer& challenge, |
| 111 const HttpResponseInfo&, |
| 112 const CompletionCallback&) { |
| 110 return ParseChallenge(challenge) ? OK : ERR_INVALID_RESPONSE; | 113 return ParseChallenge(challenge) ? OK : ERR_INVALID_RESPONSE; |
| 111 } | 114 } |
| 112 | 115 |
| 116 int HttpAuthHandlerDigest::InitializeFromCacheEntryInternal( |
| 117 HttpAuthCache::Entry* cache_entry) { |
| 118 HttpAuthChallengeTokenizer challenge(cache_entry->auth_challenge().begin(), |
| 119 cache_entry->auth_challenge().end()); |
| 120 return ParseChallenge(challenge) ? OK : ERR_INVALID_RESPONSE; |
| 121 } |
| 122 |
| 113 int HttpAuthHandlerDigest::GenerateAuthTokenImpl( | 123 int HttpAuthHandlerDigest::GenerateAuthTokenImpl( |
| 114 const AuthCredentials* credentials, | 124 const AuthCredentials* credentials, |
| 115 const HttpRequestInfo& request, | 125 const HttpRequestInfo& request, |
| 116 const CompletionCallback& callback, | 126 const CompletionCallback& callback, |
| 117 std::string* auth_token) { | 127 std::string* auth_token) { |
| 118 // Generate a random client nonce. | 128 // Generate a random client nonce. |
| 119 std::string cnonce = nonce_generator_->GenerateNonce(); | 129 std::string cnonce = nonce_generator_->GenerateNonce(); |
| 120 | 130 |
| 121 // Extract the request method and path -- the meaning of 'path' is overloaded | 131 // Extract the request method and path -- the meaning of 'path' is overloaded |
| 122 // in certain cases, to be a hostname. | 132 // in certain cases, to be a hostname. |
| (...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 365 const std::string& scheme) { | 375 const std::string& scheme) { |
| 366 DCHECK(HttpAuth::IsValidNormalizedScheme(scheme)); | 376 DCHECK(HttpAuth::IsValidNormalizedScheme(scheme)); |
| 367 if (scheme != kDigestSchemeName) | 377 if (scheme != kDigestSchemeName) |
| 368 return scoped_ptr<HttpAuthHandler>(); | 378 return scoped_ptr<HttpAuthHandler>(); |
| 369 return make_scoped_ptr(new HttpAuthHandlerDigest(1, nonce_generator_.get())); | 379 return make_scoped_ptr(new HttpAuthHandlerDigest(1, nonce_generator_.get())); |
| 370 } | 380 } |
| 371 | 381 |
| 372 scoped_ptr<HttpAuthHandler> | 382 scoped_ptr<HttpAuthHandler> |
| 373 HttpAuthHandlerDigest::Factory::CreateAndInitPreemptiveAuthHandler( | 383 HttpAuthHandlerDigest::Factory::CreateAndInitPreemptiveAuthHandler( |
| 374 HttpAuthCache::Entry* cache_entry, | 384 HttpAuthCache::Entry* cache_entry, |
| 375 const HttpAuthChallengeTokenizer& tokenizer, | |
| 376 HttpAuth::Target target, | 385 HttpAuth::Target target, |
| 377 const BoundNetLog& net_log) { | 386 const BoundNetLog& net_log) { |
| 378 if (cache_entry->scheme() != kDigestSchemeName) | 387 if (cache_entry->scheme() != kDigestSchemeName) |
| 379 return scoped_ptr<HttpAuthHandler>(); | 388 return scoped_ptr<HttpAuthHandler>(); |
| 380 scoped_ptr<HttpAuthHandler> handler(new HttpAuthHandlerDigest( | 389 scoped_ptr<HttpAuthHandler> handler(new HttpAuthHandlerDigest( |
| 381 cache_entry->IncrementNonceCount(), nonce_generator_.get())); | 390 cache_entry->IncrementNonceCount(), nonce_generator_.get())); |
| 382 int rv = handler->HandleInitialChallenge(tokenizer, target, | 391 int rv = handler->InitializeFromCacheEntry(cache_entry, target, net_log); |
| 383 cache_entry->origin(), net_log); | |
| 384 if (rv == OK) | 392 if (rv == OK) |
| 385 return handler; | 393 return handler; |
| 386 return scoped_ptr<HttpAuthHandler>(); | 394 return scoped_ptr<HttpAuthHandler>(); |
| 387 } | 395 } |
| 388 | 396 |
| 389 } // namespace net | 397 } // namespace net |
| OLD | NEW |