Home | History | Annotate | Download | only in base
      1 // Copyright (c) 2011 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_BASE_AUTH_H__
      6 #define NET_BASE_AUTH_H__
      7 
      8 #include <string>
      9 
     10 #include "base/memory/ref_counted.h"
     11 #include "base/strings/string16.h"
     12 #include "net/base/host_port_pair.h"
     13 #include "net/base/net_export.h"
     14 
     15 namespace net {
     16 
     17 // Holds info about an authentication challenge that we may want to display
     18 // to the user.
     19 class NET_EXPORT AuthChallengeInfo :
     20     public base::RefCountedThreadSafe<AuthChallengeInfo> {
     21  public:
     22   AuthChallengeInfo();
     23 
     24   // Determines whether two AuthChallengeInfo's are equivalent.
     25   bool Equals(const AuthChallengeInfo& other) const;
     26 
     27   // Whether this came from a server or a proxy.
     28   bool is_proxy;
     29 
     30   // The service issuing the challenge.
     31   HostPortPair challenger;
     32 
     33   // The authentication scheme used, such as "basic" or "digest". If the
     34   // |source| is FTP_SERVER, this is an empty string. The encoding is ASCII.
     35   std::string scheme;
     36 
     37   // The realm of the challenge. May be empty. The encoding is UTF-8.
     38   std::string realm;
     39 
     40  private:
     41   friend class base::RefCountedThreadSafe<AuthChallengeInfo>;
     42   ~AuthChallengeInfo();
     43 };
     44 
     45 // Authentication Credentials for an authentication credentials.
     46 class NET_EXPORT AuthCredentials {
     47  public:
     48   AuthCredentials();
     49   AuthCredentials(const base::string16& username,
     50                   const base::string16& password);
     51   ~AuthCredentials();
     52 
     53   // Set the |username| and |password|.
     54   void Set(const base::string16& username, const base::string16& password);
     55 
     56   // Determines if |this| is equivalent to |other|.
     57   bool Equals(const AuthCredentials& other) const;
     58 
     59   // Returns true if all credentials are empty.
     60   bool Empty() const;
     61 
     62   // Overwrites the password memory to prevent it from being read if
     63   // it's paged out to disk.
     64   void Zap();
     65 
     66   const base::string16& username() const { return username_; }
     67   const base::string16& password() const { return password_; }
     68 
     69  private:
     70   // The username to provide, possibly empty. This should be ASCII only to
     71   // minimize compatibility problems, but arbitrary UTF-16 strings are allowed
     72   // and will be attempted.
     73   base::string16 username_;
     74 
     75   // The password to provide, possibly empty. This should be ASCII only to
     76   // minimize compatibility problems, but arbitrary UTF-16 strings are allowed
     77   // and will be attempted.
     78   base::string16 password_;
     79 
     80   // Intentionally allowing the implicit copy constructor and assignment
     81   // operators.
     82 };
     83 
     84 // Authentication structures
     85 enum AuthState {
     86   AUTH_STATE_DONT_NEED_AUTH,
     87   AUTH_STATE_NEED_AUTH,
     88   AUTH_STATE_HAVE_AUTH,
     89   AUTH_STATE_CANCELED
     90 };
     91 
     92 class AuthData : public base::RefCountedThreadSafe<AuthData> {
     93  public:
     94   AuthState state;  // whether we need, have, or gave up on authentication.
     95   AuthCredentials credentials; // The credentials to use for auth.
     96 
     97   // We wouldn't instantiate this class if we didn't need authentication.
     98   AuthData();
     99 
    100  private:
    101   friend class base::RefCountedThreadSafe<AuthData>;
    102   ~AuthData();
    103 };
    104 
    105 }  // namespace net
    106 
    107 #endif  // NET_BASE_AUTH_H__
    108