| OLD | NEW | 
|---|
|  | (Empty) | 
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |  | 
| 2 // Use of this source code is governed by a BSD-style license that can be |  | 
| 3 // found in the LICENSE file. |  | 
| 4 |  | 
| 5 #ifndef NET_HTTP_HTTP_AUTH_CONTROLLER_H_ |  | 
| 6 #define NET_HTTP_HTTP_AUTH_CONTROLLER_H_ |  | 
| 7 |  | 
| 8 #include <string> |  | 
| 9 |  | 
| 10 #include "base/basictypes.h" |  | 
| 11 #include "base/ref_counted.h" |  | 
| 12 #include "base/scoped_ptr.h" |  | 
| 13 #include "googleurl/src/gurl.h" |  | 
| 14 #include "net/base/completion_callback.h" |  | 
| 15 #include "net/base/net_log.h" |  | 
| 16 #include "net/http/http_auth.h" |  | 
| 17 |  | 
| 18 namespace net { |  | 
| 19 |  | 
| 20 class AuthChallengeInfo; |  | 
| 21 class HostResolver; |  | 
| 22 class HttpNetworkSession; |  | 
| 23 class HttpRequestHeaders; |  | 
| 24 struct HttpRequestInfo; |  | 
| 25 |  | 
| 26 class HttpAuthController { |  | 
| 27  public: |  | 
| 28   // The arguments are self explanatory except possibly for |auth_url|, which |  | 
| 29   // should be both the auth target and auth path in a single url argument. |  | 
| 30   HttpAuthController(HttpAuth::Target target, const GURL& auth_url, |  | 
| 31                      scoped_refptr<HttpNetworkSession> session, |  | 
| 32                      const BoundNetLog& net_log); |  | 
| 33 |  | 
| 34   // Generate an authentication token for |target| if necessary. The return |  | 
| 35   // value is a net error code. |OK| will be returned both in the case that |  | 
| 36   // a token is correctly generated synchronously, as well as when no tokens |  | 
| 37   // were necessary. |  | 
| 38   int MaybeGenerateAuthToken(const HttpRequestInfo* request, |  | 
| 39                              CompletionCallback* callback); |  | 
| 40 |  | 
| 41   // Adds either the proxy auth header, or the origin server auth header, |  | 
| 42   // as specified by |target_|. |  | 
| 43   void AddAuthorizationHeader(HttpRequestHeaders* authorization_headers); |  | 
| 44 |  | 
| 45   // Checks for and handles HTTP status code 401 or 407. |  | 
| 46   // |HandleAuthChallenge()| returns OK on success, |  | 
| 47   // ERR_AUTH_NEEDS_CANONICAL_NAME if the handler needs the canonical name |  | 
| 48   // resolved, or a network error code. It may also populate |auth_info_|. |  | 
| 49   int HandleAuthChallenge(scoped_refptr<HttpResponseHeaders> headers, |  | 
| 50                           int load_flags, bool establishing_tunnel); |  | 
| 51 |  | 
| 52   int ResolveCanonicalName(CompletionCallback* callback); |  | 
| 53 |  | 
| 54   // Store the supplied credentials and prepare to restart the auth. |  | 
| 55   void ResetAuth(const std::wstring& username, const std::wstring& password); |  | 
| 56 |  | 
| 57   bool HaveAuthHandler() const { |  | 
| 58     return handler_.get() != NULL; |  | 
| 59   } |  | 
| 60 |  | 
| 61   bool HaveAuth() const { |  | 
| 62     return handler_.get() && !identity_.invalid; |  | 
| 63   } |  | 
| 64 |  | 
| 65   // The caller receives ownership of the return AuthChallengeInfo. |  | 
| 66   AuthChallengeInfo* auth_info() { |  | 
| 67     return auth_info_.release(); |  | 
| 68   } |  | 
| 69 |  | 
| 70  private: |  | 
| 71   // Searches the auth cache for an entry that encompasses the request's path. |  | 
| 72   // If such an entry is found, updates |identity_| and |handler_| with the |  | 
| 73   // cache entry's data and returns true. |  | 
| 74   bool SelectPreemptiveAuth(); |  | 
| 75 |  | 
| 76   // Invalidates any auth cache entries after authentication has failed. |  | 
| 77   // The identity that was rejected is |identity_|. |  | 
| 78   void InvalidateRejectedAuthFromCache(); |  | 
| 79 |  | 
| 80   // Sets |identity_| to the next identity that the transaction should try. It |  | 
| 81   // chooses candidates by searching the auth cache and the URL for a |  | 
| 82   // username:password. Returns true if an identity was found. |  | 
| 83   bool SelectNextAuthIdentityToTry(); |  | 
| 84 |  | 
| 85   // Populates auth_info_ with the challenge information, so that |  | 
| 86   // URLRequestHttpJob can prompt for a username/password. |  | 
| 87   void PopulateAuthChallenge(); |  | 
| 88 |  | 
| 89   // Indicates if this handler is for Proxy auth or Server auth. |  | 
| 90   HttpAuth::Target target_; |  | 
| 91 |  | 
| 92   // Holds the {scheme, host, path, port} for the authentication target. |  | 
| 93   const GURL auth_url_; |  | 
| 94 |  | 
| 95   // Holds the {scheme, host, port} for the authentication target. |  | 
| 96   const GURL auth_origin_; |  | 
| 97 |  | 
| 98   // The absolute path of the resource needing authentication. |  | 
| 99   // For proxy authentication the path is empty. |  | 
| 100   const std::string auth_path_; |  | 
| 101 |  | 
| 102   // |handler_| encapsulates the logic for the particular auth-scheme. |  | 
| 103   // This includes the challenge's parameters. If NULL, then there is no |  | 
| 104   // associated auth handler. |  | 
| 105   scoped_ptr<HttpAuthHandler> handler_; |  | 
| 106 |  | 
| 107   // |identity_| holds the (username/password) that should be used by |  | 
| 108   // the handler_ to generate credentials. This identity can come from |  | 
| 109   // a number of places (url, cache, prompt). |  | 
| 110   HttpAuth::Identity identity_; |  | 
| 111 |  | 
| 112   // |auth_token_| contains the opaque string to pass to the proxy or |  | 
| 113   // server to authenticate the client. |  | 
| 114   std::string auth_token_; |  | 
| 115 |  | 
| 116   // Contains information about the auth challenge. |  | 
| 117   scoped_refptr<AuthChallengeInfo> auth_info_; |  | 
| 118 |  | 
| 119   // True if we've used the username/password embedded in the URL.  This |  | 
| 120   // makes sure we use the embedded identity only once for the transaction, |  | 
| 121   // preventing an infinite auth restart loop. |  | 
| 122   bool embedded_identity_used_; |  | 
| 123 |  | 
| 124   // True if default credentials have already been tried for this transaction |  | 
| 125   // in response to an HTTP authentication challenge. |  | 
| 126   bool default_credentials_used_; |  | 
| 127 |  | 
| 128   scoped_refptr<HttpNetworkSession> session_; |  | 
| 129 |  | 
| 130   BoundNetLog net_log_; |  | 
| 131 }; |  | 
| 132 |  | 
| 133 }  // namespace net |  | 
| 134 |  | 
| 135 #endif  // NET_HTTP_HTTP_AUTH_CONTROLLER_H_ |  | 
| OLD | NEW | 
|---|