auth.h revision 5821806d5e7f356e8fa4b058a389a808ea183019
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef NET_BASE_AUTH_H__ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NET_BASE_AUTH_H__ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/string16.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/host_port_pair.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/net_export.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Holds info about an authentication challenge that we may want to display 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// to the user. 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NET_EXPORT AuthChallengeInfo : 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public base::RefCountedThreadSafe<AuthChallengeInfo> { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AuthChallengeInfo(); 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Determines whether two AuthChallengeInfo's are equivalent. 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool Equals(const AuthChallengeInfo& other) const; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Whether this came from a server or a proxy. 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_proxy; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The service issuing the challenge. 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HostPortPair challenger; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The authentication scheme used, such as "basic" or "digest". If the 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |source| is FTP_SERVER, this is an empty string. The encoding is ASCII. 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string scheme; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The realm of the challenge. May be empty. The encoding is UTF-8. 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string realm; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class base::RefCountedThreadSafe<AuthChallengeInfo>; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~AuthChallengeInfo(); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Authentication Credentials for an authentication credentials. 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NET_EXPORT AuthCredentials { 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AuthCredentials(); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AuthCredentials(const string16& username, const string16& password); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~AuthCredentials(); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set the |username| and |password|. 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Set(const string16& username, const string16& password); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Determines if |this| is equivalent to |other|. 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool Equals(const AuthCredentials& other) const; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if all credentials are empty. 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool Empty() const; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overwrites the password memory to prevent it from being read if 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // it's paged out to disk. 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Zap(); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16& username() const { return username_; } 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16& password() const { return password_; } 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The username to provide, possibly empty. This should be ASCII only to 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // minimize compatibility problems, but arbitrary UTF-16 strings are allowed 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and will be attempted. 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 username_; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The password to provide, possibly empty. This should be ASCII only to 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // minimize compatibility problems, but arbitrary UTF-16 strings are allowed 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and will be attempted. 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 password_; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Intentionally allowing the implicit copy constructor and assignment 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // operators. 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Authentication structures 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum AuthState { 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AUTH_STATE_DONT_NEED_AUTH, 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AUTH_STATE_NEED_AUTH, 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AUTH_STATE_HAVE_AUTH, 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AUTH_STATE_CANCELED 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AuthData : public base::RefCountedThreadSafe<AuthData> { 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AuthState state; // whether we need, have, or gave up on authentication. 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AuthCredentials credentials; // The credentials to use for auth. 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We wouldn't instantiate this class if we didn't need authentication. 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AuthData(); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class base::RefCountedThreadSafe<AuthData>; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~AuthData(); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace net 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // NET_BASE_AUTH_H__ 107