1*6777b538SAndroid Build Coastguard Worker // Copyright 2011 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #ifndef NET_BASE_AUTH_H__ 6*6777b538SAndroid Build Coastguard Worker #define NET_BASE_AUTH_H__ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include <string> 9*6777b538SAndroid Build Coastguard Worker 10*6777b538SAndroid Build Coastguard Worker #include "net/base/net_export.h" 11*6777b538SAndroid Build Coastguard Worker #include "url/scheme_host_port.h" 12*6777b538SAndroid Build Coastguard Worker 13*6777b538SAndroid Build Coastguard Worker namespace net { 14*6777b538SAndroid Build Coastguard Worker 15*6777b538SAndroid Build Coastguard Worker // Holds info about an authentication challenge that we may want to display 16*6777b538SAndroid Build Coastguard Worker // to the user. 17*6777b538SAndroid Build Coastguard Worker class NET_EXPORT AuthChallengeInfo { 18*6777b538SAndroid Build Coastguard Worker public: 19*6777b538SAndroid Build Coastguard Worker AuthChallengeInfo(); 20*6777b538SAndroid Build Coastguard Worker AuthChallengeInfo(const AuthChallengeInfo& other); 21*6777b538SAndroid Build Coastguard Worker ~AuthChallengeInfo(); 22*6777b538SAndroid Build Coastguard Worker 23*6777b538SAndroid Build Coastguard Worker // Returns true if this AuthChallengeInfo is equal to |other| except for 24*6777b538SAndroid Build Coastguard Worker // |path|. Can be used to determine if the same credentials can be provided 25*6777b538SAndroid Build Coastguard Worker // for two different requests. 26*6777b538SAndroid Build Coastguard Worker bool MatchesExceptPath(const AuthChallengeInfo& other) const; 27*6777b538SAndroid Build Coastguard Worker 28*6777b538SAndroid Build Coastguard Worker // Whether this came from a server or a proxy. 29*6777b538SAndroid Build Coastguard Worker bool is_proxy = false; 30*6777b538SAndroid Build Coastguard Worker 31*6777b538SAndroid Build Coastguard Worker // The service issuing the challenge. 32*6777b538SAndroid Build Coastguard Worker url::SchemeHostPort challenger; 33*6777b538SAndroid Build Coastguard Worker 34*6777b538SAndroid Build Coastguard Worker // The authentication scheme used, such as "basic" or "digest". The encoding 35*6777b538SAndroid Build Coastguard Worker // is ASCII. 36*6777b538SAndroid Build Coastguard Worker std::string scheme; 37*6777b538SAndroid Build Coastguard Worker 38*6777b538SAndroid Build Coastguard Worker // The realm of the challenge. May be empty. The encoding is UTF-8. 39*6777b538SAndroid Build Coastguard Worker std::string realm; 40*6777b538SAndroid Build Coastguard Worker 41*6777b538SAndroid Build Coastguard Worker // The authentication challenge. 42*6777b538SAndroid Build Coastguard Worker std::string challenge; 43*6777b538SAndroid Build Coastguard Worker 44*6777b538SAndroid Build Coastguard Worker // The path on which authentication was requested. 45*6777b538SAndroid Build Coastguard Worker std::string path; 46*6777b538SAndroid Build Coastguard Worker }; 47*6777b538SAndroid Build Coastguard Worker 48*6777b538SAndroid Build Coastguard Worker // Authentication Credentials for an authentication credentials. 49*6777b538SAndroid Build Coastguard Worker class NET_EXPORT AuthCredentials { 50*6777b538SAndroid Build Coastguard Worker public: 51*6777b538SAndroid Build Coastguard Worker AuthCredentials(); 52*6777b538SAndroid Build Coastguard Worker AuthCredentials(const std::u16string& username, 53*6777b538SAndroid Build Coastguard Worker const std::u16string& password); 54*6777b538SAndroid Build Coastguard Worker ~AuthCredentials(); 55*6777b538SAndroid Build Coastguard Worker 56*6777b538SAndroid Build Coastguard Worker // Set the |username| and |password|. 57*6777b538SAndroid Build Coastguard Worker void Set(const std::u16string& username, const std::u16string& password); 58*6777b538SAndroid Build Coastguard Worker 59*6777b538SAndroid Build Coastguard Worker // Determines if |this| is equivalent to |other|. 60*6777b538SAndroid Build Coastguard Worker bool Equals(const AuthCredentials& other) const; 61*6777b538SAndroid Build Coastguard Worker 62*6777b538SAndroid Build Coastguard Worker // Returns true if all credentials are empty. 63*6777b538SAndroid Build Coastguard Worker bool Empty() const; 64*6777b538SAndroid Build Coastguard Worker username()65*6777b538SAndroid Build Coastguard Worker const std::u16string& username() const { return username_; } password()66*6777b538SAndroid Build Coastguard Worker const std::u16string& password() const { return password_; } 67*6777b538SAndroid Build Coastguard Worker 68*6777b538SAndroid Build Coastguard Worker private: 69*6777b538SAndroid Build Coastguard Worker // The username to provide, possibly empty. This should be ASCII only to 70*6777b538SAndroid Build Coastguard Worker // minimize compatibility problems, but arbitrary UTF-16 strings are allowed 71*6777b538SAndroid Build Coastguard Worker // and will be attempted. 72*6777b538SAndroid Build Coastguard Worker std::u16string username_; 73*6777b538SAndroid Build Coastguard Worker 74*6777b538SAndroid Build Coastguard Worker // The password to provide, possibly empty. This should be ASCII only to 75*6777b538SAndroid Build Coastguard Worker // minimize compatibility problems, but arbitrary UTF-16 strings are allowed 76*6777b538SAndroid Build Coastguard Worker // and will be attempted. 77*6777b538SAndroid Build Coastguard Worker std::u16string password_; 78*6777b538SAndroid Build Coastguard Worker 79*6777b538SAndroid Build Coastguard Worker // Intentionally allowing the implicit copy constructor and assignment 80*6777b538SAndroid Build Coastguard Worker // operators. 81*6777b538SAndroid Build Coastguard Worker }; 82*6777b538SAndroid Build Coastguard Worker 83*6777b538SAndroid Build Coastguard Worker // Authentication structures 84*6777b538SAndroid Build Coastguard Worker enum AuthState { 85*6777b538SAndroid Build Coastguard Worker AUTH_STATE_DONT_NEED_AUTH, 86*6777b538SAndroid Build Coastguard Worker AUTH_STATE_NEED_AUTH, 87*6777b538SAndroid Build Coastguard Worker AUTH_STATE_HAVE_AUTH, 88*6777b538SAndroid Build Coastguard Worker AUTH_STATE_CANCELED 89*6777b538SAndroid Build Coastguard Worker }; 90*6777b538SAndroid Build Coastguard Worker 91*6777b538SAndroid Build Coastguard Worker } // namespace net 92*6777b538SAndroid Build Coastguard Worker 93*6777b538SAndroid Build Coastguard Worker #endif // NET_BASE_AUTH_H__ 94