// Copyright 2011 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef NET_HTTP_URL_SECURITY_MANAGER_H_ #define NET_HTTP_URL_SECURITY_MANAGER_H_ #include #include "net/base/net_export.h" namespace url { class SchemeHostPort; } namespace net { class HttpAuthFilter; // The URL security manager controls the policies (allow, deny, prompt user) // regarding URL actions (e.g., sending the default credentials to a server). class NET_EXPORT_PRIVATE URLSecurityManager { public: URLSecurityManager() = default; URLSecurityManager(const URLSecurityManager&) = delete; URLSecurityManager& operator=(const URLSecurityManager&) = delete; virtual ~URLSecurityManager() = default; // Creates a platform-dependent instance of URLSecurityManager. // // A security manager has two allowlists, a "default allowlist" that is a // allowlist of servers with which default credentials can be used, and a // "delegate allowlist" that is the allowlist of servers that are allowed to // have delegated Kerberos tickets. // // On creation both allowlists are empty. // // If the default allowlist is empty and the platform is Windows, it indicates // that security zone mapping should be used to determine whether default // credentials should be used. If the default allowlist is empty and the // platform is non-Windows, it indicates that no servers should be // allowlisted. // // If the delegate allowlist is empty no servers can have delegated Kerberos // tickets. // static std::unique_ptr Create(); // Returns true if we can send the default credentials to the server at // |auth_scheme_host_port| for HTTP NTLM or Negotiate authentication. virtual bool CanUseDefaultCredentials( const url::SchemeHostPort& auth_scheme_host_port) const = 0; // Returns true if Kerberos delegation is allowed for the server at // |auth_scheme_host_port| for HTTP Negotiate authentication. virtual bool CanDelegate( const url::SchemeHostPort& auth_scheme_host_port) const = 0; virtual void SetDefaultAllowlist( std::unique_ptr allowlist_default) = 0; virtual void SetDelegateAllowlist( std::unique_ptr allowlist_delegate) = 0; }; class URLSecurityManagerAllowlist : public URLSecurityManager { public: URLSecurityManagerAllowlist(); URLSecurityManagerAllowlist(const URLSecurityManagerAllowlist&) = delete; URLSecurityManagerAllowlist& operator=(const URLSecurityManagerAllowlist&) = delete; ~URLSecurityManagerAllowlist() override; // URLSecurityManager methods. bool CanUseDefaultCredentials( const url::SchemeHostPort& auth_scheme_host_port) const override; bool CanDelegate( const url::SchemeHostPort& auth_scheme_host_port) const override; void SetDefaultAllowlist( std::unique_ptr allowlist_default) override; void SetDelegateAllowlist( std::unique_ptr allowlist_delegate) override; protected: bool HasDefaultAllowlist() const; private: std::unique_ptr allowlist_default_; std::unique_ptr allowlist_delegate_; }; } // namespace net #endif // NET_HTTP_URL_SECURITY_MANAGER_H_