auth.h revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
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/string16.h"
12#include "net/base/host_port_pair.h"
13#include "net/base/net_export.h"
14
15namespace net {
16
17// Holds info about an authentication challenge that we may want to display
18// to the user.
19class 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.
46class 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
85enum AuthState {
86  AUTH_STATE_DONT_NEED_AUTH,
87  AUTH_STATE_NEED_AUTH,
88  AUTH_STATE_HAVE_AUTH,
89  AUTH_STATE_CANCELED
90};
91
92class 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