1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "net/http/http_auth_filter.h" 6 #include "base/string_util.h" 7 #include "googleurl/src/gurl.h" 8 9 namespace net { 10 11 // Using a std::set<> has the benefit of removing duplicates automatically. 12 typedef std::set<string16> RegistryWhitelist; 13 14 // TODO(ahendrickson) -- Determine if we want separate whitelists for HTTP and 15 // HTTPS, one for both, or only an HTTP one. My understanding is that the HTTPS 16 // entries in the registry mean that you are only allowed to connect to the site 17 // via HTTPS and still be considered 'safe'. 18 HttpAuthFilterWhitelist(const std::string & server_whitelist)19HttpAuthFilterWhitelist::HttpAuthFilterWhitelist( 20 const std::string& server_whitelist) { 21 SetWhitelist(server_whitelist); 22 } 23 ~HttpAuthFilterWhitelist()24HttpAuthFilterWhitelist::~HttpAuthFilterWhitelist() { 25 } 26 27 // Add a new domain |filter| to the whitelist, if it's not already there AddFilter(const std::string & filter,HttpAuth::Target target)28bool HttpAuthFilterWhitelist::AddFilter(const std::string& filter, 29 HttpAuth::Target target) { 30 if ((target != HttpAuth::AUTH_SERVER) && (target != HttpAuth::AUTH_PROXY)) 31 return false; 32 // All proxies pass 33 if (target == HttpAuth::AUTH_PROXY) 34 return true; 35 rules_.AddRuleFromString(filter); 36 return true; 37 } 38 AddRuleToBypassLocal()39void HttpAuthFilterWhitelist::AddRuleToBypassLocal() { 40 rules_.AddRuleToBypassLocal(); 41 } 42 IsValid(const GURL & url,HttpAuth::Target target) const43bool HttpAuthFilterWhitelist::IsValid(const GURL& url, 44 HttpAuth::Target target) const { 45 if ((target != HttpAuth::AUTH_SERVER) && (target != HttpAuth::AUTH_PROXY)) 46 return false; 47 // All proxies pass 48 if (target == HttpAuth::AUTH_PROXY) 49 return true; 50 return rules_.Matches(url); 51 } 52 SetWhitelist(const std::string & server_whitelist)53void HttpAuthFilterWhitelist::SetWhitelist( 54 const std::string& server_whitelist) { 55 rules_.ParseFromString(server_whitelist); 56 } 57 58 } // namespace net 59