| Index: net/http/http_auth_handler_digest.cc
|
| diff --git a/net/http/http_auth_handler_digest.cc b/net/http/http_auth_handler_digest.cc
|
| index c74b3da58c43905d1b600a5816fc96bf51854e08..8c8787f6500502a868c8514754cdd062c90e8cb3 100644
|
| --- a/net/http/http_auth_handler_digest.cc
|
| +++ b/net/http/http_auth_handler_digest.cc
|
| @@ -23,7 +23,7 @@
|
|
|
| namespace net {
|
|
|
| -static const char* const kDigestSchemeName = "digest";
|
| +static const char kDigestSchemeName[] = "digest";
|
|
|
| // Digest authentication is specified in RFC 2617.
|
| // The expanded derivations are listed in the tables below.
|
| @@ -79,37 +79,6 @@ std::string HttpAuthHandlerDigest::FixedNonceGenerator::GenerateNonce() const {
|
| return nonce_;
|
| }
|
|
|
| -HttpAuthHandlerDigest::Factory::Factory()
|
| - : nonce_generator_(new DynamicNonceGenerator()) {
|
| -}
|
| -
|
| -HttpAuthHandlerDigest::Factory::~Factory() {
|
| -}
|
| -
|
| -void HttpAuthHandlerDigest::Factory::set_nonce_generator(
|
| - const NonceGenerator* nonce_generator) {
|
| - nonce_generator_.reset(nonce_generator);
|
| -}
|
| -
|
| -int HttpAuthHandlerDigest::Factory::CreateAuthHandler(
|
| - const HttpAuthChallengeTokenizer& challenge,
|
| - HttpAuth::Target target,
|
| - const GURL& origin,
|
| - CreateReason reason,
|
| - int digest_nonce_count,
|
| - const BoundNetLog& net_log,
|
| - scoped_ptr<HttpAuthHandler>* handler) {
|
| - // TODO(cbentzel): Move towards model of parsing in the factory
|
| - // method and only constructing when valid.
|
| - scoped_ptr<HttpAuthHandler> tmp_handler(
|
| - new HttpAuthHandlerDigest(digest_nonce_count, nonce_generator_.get()));
|
| - int result =
|
| - tmp_handler->HandleInitialChallenge(challenge, target, origin, net_log);
|
| - if (result == OK)
|
| - handler->swap(tmp_handler);
|
| - return result;
|
| -}
|
| -
|
| HttpAuth::AuthorizationResult HttpAuthHandlerDigest::HandleAnotherChallenge(
|
| const HttpAuthChallengeTokenizer& challenge) {
|
| // Even though Digest is not connection based, a "second round" is parsed
|
| @@ -161,8 +130,10 @@ int HttpAuthHandlerDigest::GenerateAuthTokenImpl(
|
| }
|
|
|
| HttpAuthHandlerDigest::HttpAuthHandlerDigest(
|
| - int nonce_count, const NonceGenerator* nonce_generator)
|
| - : stale_(false),
|
| + int nonce_count,
|
| + const NonceGenerator* nonce_generator)
|
| + : HttpAuthHandler(kDigestSchemeName),
|
| + stale_(false),
|
| algorithm_(ALGORITHM_UNSPECIFIED),
|
| qop_(QOP_UNSPECIFIED),
|
| nonce_count_(nonce_count),
|
| @@ -193,7 +164,9 @@ HttpAuthHandlerDigest::~HttpAuthHandlerDigest() {
|
| // webserver was not sending the realm with a BASIC challenge).
|
| bool HttpAuthHandlerDigest::ParseChallenge(
|
| const HttpAuthChallengeTokenizer& challenge) {
|
| - auth_scheme_ = kDigestSchemeName;
|
| + // FAIL -- Couldn't match auth-scheme.
|
| + if (!challenge.SchemeIs(kDigestSchemeName))
|
| + return false;
|
|
|
| // Initialize to defaults.
|
| stale_ = false;
|
| @@ -201,10 +174,6 @@ bool HttpAuthHandlerDigest::ParseChallenge(
|
| qop_ = QOP_UNSPECIFIED;
|
| realm_ = original_realm_ = nonce_ = domain_ = opaque_ = std::string();
|
|
|
| - // FAIL -- Couldn't match auth-scheme.
|
| - if (!challenge.SchemeIs(kDigestSchemeName))
|
| - return false;
|
| -
|
| HttpUtil::NameValuePairsIterator parameters = challenge.param_pairs();
|
|
|
| // Loop through all the properties.
|
| @@ -381,4 +350,40 @@ std::string HttpAuthHandlerDigest::AssembleCredentials(
|
| return authorization;
|
| }
|
|
|
| +HttpAuthHandlerDigest::Factory::Factory()
|
| + : nonce_generator_(new DynamicNonceGenerator()) {}
|
| +
|
| +HttpAuthHandlerDigest::Factory::~Factory() {}
|
| +
|
| +void HttpAuthHandlerDigest::Factory::set_nonce_generator(
|
| + const NonceGenerator* nonce_generator) {
|
| + nonce_generator_.reset(nonce_generator);
|
| +}
|
| +
|
| +scoped_ptr<HttpAuthHandler>
|
| +HttpAuthHandlerDigest::Factory::CreateAuthHandlerForScheme(
|
| + const std::string& scheme) {
|
| + DCHECK(HttpAuth::IsValidNormalizedScheme(scheme));
|
| + if (scheme != kDigestSchemeName)
|
| + return scoped_ptr<HttpAuthHandler>();
|
| + return make_scoped_ptr(new HttpAuthHandlerDigest(1, nonce_generator_.get()));
|
| +}
|
| +
|
| +scoped_ptr<HttpAuthHandler>
|
| +HttpAuthHandlerDigest::Factory::CreateAndInitPreemptiveAuthHandler(
|
| + HttpAuthCache::Entry* cache_entry,
|
| + const HttpAuthChallengeTokenizer& tokenizer,
|
| + HttpAuth::Target target,
|
| + const BoundNetLog& net_log) {
|
| + if (cache_entry->scheme() != kDigestSchemeName)
|
| + return scoped_ptr<HttpAuthHandler>();
|
| + scoped_ptr<HttpAuthHandler> handler(new HttpAuthHandlerDigest(
|
| + cache_entry->IncrementNonceCount(), nonce_generator_.get()));
|
| + int rv = handler->HandleInitialChallenge(tokenizer, target,
|
| + cache_entry->origin(), net_log);
|
| + if (rv == OK)
|
| + return handler;
|
| + return scoped_ptr<HttpAuthHandler>();
|
| +}
|
| +
|
| } // namespace net
|
|
|