xref: /aosp_15_r20/external/cronet/net/http/url_security_manager.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_HTTP_URL_SECURITY_MANAGER_H_
6*6777b538SAndroid Build Coastguard Worker #define NET_HTTP_URL_SECURITY_MANAGER_H_
7*6777b538SAndroid Build Coastguard Worker 
8*6777b538SAndroid Build Coastguard Worker #include <memory>
9*6777b538SAndroid Build Coastguard Worker 
10*6777b538SAndroid Build Coastguard Worker #include "net/base/net_export.h"
11*6777b538SAndroid Build Coastguard Worker 
12*6777b538SAndroid Build Coastguard Worker namespace url {
13*6777b538SAndroid Build Coastguard Worker class SchemeHostPort;
14*6777b538SAndroid Build Coastguard Worker }
15*6777b538SAndroid Build Coastguard Worker 
16*6777b538SAndroid Build Coastguard Worker namespace net {
17*6777b538SAndroid Build Coastguard Worker 
18*6777b538SAndroid Build Coastguard Worker class HttpAuthFilter;
19*6777b538SAndroid Build Coastguard Worker 
20*6777b538SAndroid Build Coastguard Worker // The URL security manager controls the policies (allow, deny, prompt user)
21*6777b538SAndroid Build Coastguard Worker // regarding URL actions (e.g., sending the default credentials to a server).
22*6777b538SAndroid Build Coastguard Worker class NET_EXPORT_PRIVATE URLSecurityManager {
23*6777b538SAndroid Build Coastguard Worker  public:
24*6777b538SAndroid Build Coastguard Worker   URLSecurityManager() = default;
25*6777b538SAndroid Build Coastguard Worker 
26*6777b538SAndroid Build Coastguard Worker   URLSecurityManager(const URLSecurityManager&) = delete;
27*6777b538SAndroid Build Coastguard Worker   URLSecurityManager& operator=(const URLSecurityManager&) = delete;
28*6777b538SAndroid Build Coastguard Worker 
29*6777b538SAndroid Build Coastguard Worker   virtual ~URLSecurityManager() = default;
30*6777b538SAndroid Build Coastguard Worker 
31*6777b538SAndroid Build Coastguard Worker   // Creates a platform-dependent instance of URLSecurityManager.
32*6777b538SAndroid Build Coastguard Worker   //
33*6777b538SAndroid Build Coastguard Worker   // A security manager has two allowlists, a "default allowlist" that is a
34*6777b538SAndroid Build Coastguard Worker   // allowlist of servers with which default credentials can be used, and a
35*6777b538SAndroid Build Coastguard Worker   // "delegate allowlist" that is the allowlist of servers that are allowed to
36*6777b538SAndroid Build Coastguard Worker   // have delegated Kerberos tickets.
37*6777b538SAndroid Build Coastguard Worker   //
38*6777b538SAndroid Build Coastguard Worker   // On creation both allowlists are empty.
39*6777b538SAndroid Build Coastguard Worker   //
40*6777b538SAndroid Build Coastguard Worker   // If the default allowlist is empty and the platform is Windows, it indicates
41*6777b538SAndroid Build Coastguard Worker   // that security zone mapping should be used to determine whether default
42*6777b538SAndroid Build Coastguard Worker   // credentials should be used. If the default allowlist is empty and the
43*6777b538SAndroid Build Coastguard Worker   // platform is non-Windows, it indicates that no servers should be
44*6777b538SAndroid Build Coastguard Worker   // allowlisted.
45*6777b538SAndroid Build Coastguard Worker   //
46*6777b538SAndroid Build Coastguard Worker   // If the delegate allowlist is empty no servers can have delegated Kerberos
47*6777b538SAndroid Build Coastguard Worker   // tickets.
48*6777b538SAndroid Build Coastguard Worker   //
49*6777b538SAndroid Build Coastguard Worker   static std::unique_ptr<URLSecurityManager> Create();
50*6777b538SAndroid Build Coastguard Worker 
51*6777b538SAndroid Build Coastguard Worker   // Returns true if we can send the default credentials to the server at
52*6777b538SAndroid Build Coastguard Worker   // |auth_scheme_host_port| for HTTP NTLM or Negotiate authentication.
53*6777b538SAndroid Build Coastguard Worker   virtual bool CanUseDefaultCredentials(
54*6777b538SAndroid Build Coastguard Worker       const url::SchemeHostPort& auth_scheme_host_port) const = 0;
55*6777b538SAndroid Build Coastguard Worker 
56*6777b538SAndroid Build Coastguard Worker   // Returns true if Kerberos delegation is allowed for the server at
57*6777b538SAndroid Build Coastguard Worker   // |auth_scheme_host_port| for HTTP Negotiate authentication.
58*6777b538SAndroid Build Coastguard Worker   virtual bool CanDelegate(
59*6777b538SAndroid Build Coastguard Worker       const url::SchemeHostPort& auth_scheme_host_port) const = 0;
60*6777b538SAndroid Build Coastguard Worker 
61*6777b538SAndroid Build Coastguard Worker   virtual void SetDefaultAllowlist(
62*6777b538SAndroid Build Coastguard Worker       std::unique_ptr<HttpAuthFilter> allowlist_default) = 0;
63*6777b538SAndroid Build Coastguard Worker   virtual void SetDelegateAllowlist(
64*6777b538SAndroid Build Coastguard Worker       std::unique_ptr<HttpAuthFilter> allowlist_delegate) = 0;
65*6777b538SAndroid Build Coastguard Worker };
66*6777b538SAndroid Build Coastguard Worker 
67*6777b538SAndroid Build Coastguard Worker class URLSecurityManagerAllowlist : public URLSecurityManager {
68*6777b538SAndroid Build Coastguard Worker  public:
69*6777b538SAndroid Build Coastguard Worker   URLSecurityManagerAllowlist();
70*6777b538SAndroid Build Coastguard Worker 
71*6777b538SAndroid Build Coastguard Worker   URLSecurityManagerAllowlist(const URLSecurityManagerAllowlist&) = delete;
72*6777b538SAndroid Build Coastguard Worker   URLSecurityManagerAllowlist& operator=(const URLSecurityManagerAllowlist&) =
73*6777b538SAndroid Build Coastguard Worker       delete;
74*6777b538SAndroid Build Coastguard Worker 
75*6777b538SAndroid Build Coastguard Worker   ~URLSecurityManagerAllowlist() override;
76*6777b538SAndroid Build Coastguard Worker 
77*6777b538SAndroid Build Coastguard Worker   // URLSecurityManager methods.
78*6777b538SAndroid Build Coastguard Worker   bool CanUseDefaultCredentials(
79*6777b538SAndroid Build Coastguard Worker       const url::SchemeHostPort& auth_scheme_host_port) const override;
80*6777b538SAndroid Build Coastguard Worker   bool CanDelegate(
81*6777b538SAndroid Build Coastguard Worker       const url::SchemeHostPort& auth_scheme_host_port) const override;
82*6777b538SAndroid Build Coastguard Worker   void SetDefaultAllowlist(
83*6777b538SAndroid Build Coastguard Worker       std::unique_ptr<HttpAuthFilter> allowlist_default) override;
84*6777b538SAndroid Build Coastguard Worker   void SetDelegateAllowlist(
85*6777b538SAndroid Build Coastguard Worker       std::unique_ptr<HttpAuthFilter> allowlist_delegate) override;
86*6777b538SAndroid Build Coastguard Worker 
87*6777b538SAndroid Build Coastguard Worker  protected:
88*6777b538SAndroid Build Coastguard Worker   bool HasDefaultAllowlist() const;
89*6777b538SAndroid Build Coastguard Worker 
90*6777b538SAndroid Build Coastguard Worker  private:
91*6777b538SAndroid Build Coastguard Worker   std::unique_ptr<const HttpAuthFilter> allowlist_default_;
92*6777b538SAndroid Build Coastguard Worker   std::unique_ptr<const HttpAuthFilter> allowlist_delegate_;
93*6777b538SAndroid Build Coastguard Worker };
94*6777b538SAndroid Build Coastguard Worker 
95*6777b538SAndroid Build Coastguard Worker }  // namespace net
96*6777b538SAndroid Build Coastguard Worker 
97*6777b538SAndroid Build Coastguard Worker #endif  // NET_HTTP_URL_SECURITY_MANAGER_H_
98