xref: /aosp_15_r20/external/cronet/net/base/auth.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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