Home | History | Annotate | Download | only in http
      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 #ifndef NET_HTTP_HTTP_AUTH_FILTER_H_
      6 #define NET_HTTP_HTTP_AUTH_FILTER_H_
      7 #pragma once
      8 
      9 #include <list>
     10 #include <string>
     11 
     12 #include "net/http/http_auth.h"
     13 #include "net/proxy/proxy_bypass_rules.h"
     14 
     15 class GURL;
     16 
     17 namespace net {
     18 
     19 // |HttpAuthFilter|s determine whether an authentication scheme should be
     20 // allowed for a particular peer.
     21 class HttpAuthFilter {
     22  public:
     23   virtual ~HttpAuthFilter() {}
     24 
     25   // Checks if (|url|, |target|) is supported by the authentication scheme.
     26   // Only the host of |url| is examined.
     27   virtual bool IsValid(const GURL& url, HttpAuth::Target target) const = 0;
     28 };
     29 
     30 // Whitelist HTTP authentication filter.
     31 // Explicit whitelists of domains are set via SetWhitelist().
     32 //
     33 // Uses the ProxyBypassRules class to do whitelisting for servers.
     34 // All proxies are allowed.
     35 class HttpAuthFilterWhitelist : public HttpAuthFilter {
     36  public:
     37   explicit HttpAuthFilterWhitelist(const std::string& server_whitelist);
     38   virtual ~HttpAuthFilterWhitelist();
     39 
     40   // Adds an individual URL |filter| to the list, of the specified |target|.
     41   bool AddFilter(const std::string& filter, HttpAuth::Target target);
     42 
     43   // Adds a rule that bypasses all "local" hostnames.
     44   void AddRuleToBypassLocal();
     45 
     46   const ProxyBypassRules& rules() const { return rules_; }
     47 
     48   // HttpAuthFilter methods:
     49   virtual bool IsValid(const GURL& url, HttpAuth::Target target) const;
     50 
     51  private:
     52   // Installs the whitelist.
     53   // |server_whitelist| is parsed by ProxyBypassRules.
     54   void SetWhitelist(const std::string& server_whitelist);
     55 
     56   // We are using ProxyBypassRules because they have the functionality that we
     57   // want, but we are not using it for proxy bypass.
     58   ProxyBypassRules rules_;
     59 
     60   DISALLOW_COPY_AND_ASSIGN(HttpAuthFilterWhitelist);
     61 };
     62 
     63 }   // namespace net
     64 
     65 #endif  // NET_HTTP_HTTP_AUTH_FILTER_H_
     66