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