google_service_auth_error.h revision 72a454cd3513ac24fbdd0e0cb9ad70b86a99b801
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// A GoogleServiceAuthError is immutable, plain old data representing an 6// error from an attempt to authenticate with a Google service. 7// It could be from Google Accounts itself, or any service using Google 8// Accounts (e.g expired credentials). It may contain additional data such as 9// captcha challenges. 10 11// A GoogleServiceAuthError without additional data is just a State, defined 12// below. A case could be made to have this relation implicit, to allow raising 13// error events concisely by doing OnAuthError(GoogleServiceAuthError::NONE), 14// for example. But the truth is this class is ever so slightly more than a 15// transparent wrapper around 'State' due to additional Captcha data 16// (e.g consider operator=), and this would violate the style guide. Thus, 17// you must explicitly use the constructor when all you have is a State. 18// The good news is the implementation nests the enum inside a class, so you 19// may forward declare and typedef GoogleServiceAuthError to something shorter 20// in the comfort of your own translation unit. 21 22#ifndef CHROME_COMMON_NET_GAIA_GOOGLE_SERVICE_AUTH_ERROR_H_ 23#define CHROME_COMMON_NET_GAIA_GOOGLE_SERVICE_AUTH_ERROR_H_ 24#pragma once 25 26#include <string> 27 28#include "googleurl/src/gurl.h" 29 30class DictionaryValue; 31 32class GoogleServiceAuthError { 33 public: 34 // 35 // These enumerations are referenced by integer value in HTML login code. 36 // Do not change the numeric values. 37 // 38 enum State { 39 // The user is authenticated. 40 NONE = 0, 41 42 // The credentials supplied to GAIA were either invalid, or the locally 43 // cached credentials have expired. 44 INVALID_GAIA_CREDENTIALS = 1, 45 46 // The GAIA user is not authorized to use the service. 47 USER_NOT_SIGNED_UP = 2, 48 49 // Could not connect to server to verify credentials. This could be in 50 // response to either failure to connect to GAIA or failure to connect to 51 // the service needing GAIA tokens during authentication. 52 CONNECTION_FAILED = 3, 53 54 // The user needs to satisfy a CAPTCHA challenge to unlock their account. 55 // If no other information is available, this can be resolved by visiting 56 // https://www.google.com/accounts/DisplayUnlockCaptcha. Otherwise, 57 // captcha() will provide details about the associated challenge. 58 CAPTCHA_REQUIRED = 4, 59 60 // The user account has been deleted. 61 ACCOUNT_DELETED = 5, 62 63 // The user account has been disabled. 64 ACCOUNT_DISABLED = 6, 65 66 // The service is not available; try again later. 67 SERVICE_UNAVAILABLE = 7, 68 69 // The password is valid but we need two factor to get a token. 70 TWO_FACTOR = 8, 71 72 // The requestor of the authentication step cancelled the request 73 // prior to completion. 74 REQUEST_CANCELED = 9, 75 76 // The user has provided a HOSTED account, when this service requires 77 // a GOOGLE account. 78 HOSTED_NOT_ALLOWED = 10, 79 }; 80 81 // Additional data for CAPTCHA_REQUIRED errors. 82 struct Captcha { 83 Captcha(const std::string& t, const GURL& img, const GURL& unlock); 84 std::string token; // Globally identifies the specific CAPTCHA challenge. 85 GURL image_url; // The CAPTCHA image to show the user. 86 GURL unlock_url; // Pretty unlock page containing above captcha. 87 }; 88 89 // For test only. 90 bool operator==(const GoogleServiceAuthError &b) const; 91 92 // Construct a GoogleServiceAuthError from a State with no additional data. 93 explicit GoogleServiceAuthError(State s); 94 95 // Construct a GoogleServiceAuthError from a network error. 96 // It will be created with CONNECTION_FAILED set. 97 static GoogleServiceAuthError FromConnectionError(int error); 98 99 // Construct a CAPTCHA_REQUIRED error with CAPTCHA challenge data. 100 static GoogleServiceAuthError FromCaptchaChallenge( 101 const std::string& captcha_token, 102 const GURL& captcha_image_url, 103 const GURL& captcha_unlock_url); 104 105 // Provided for convenience for clients needing to reset an instance to NONE. 106 // (avoids err_ = GoogleServiceAuthError(GoogleServiceAuthError::NONE), due 107 // to explicit class and State enum relation. Note: shouldn't be inlined! 108 static GoogleServiceAuthError None(); 109 110 // The error information. 111 const State& state() const; 112 const Captcha& captcha() const; 113 int network_error() const; 114 115 // Returns info about this object in a dictionary. Caller takes 116 // ownership of returned dictionary. 117 DictionaryValue* ToValue() const; 118 119 private: 120 GoogleServiceAuthError(State s, int error); 121 122 GoogleServiceAuthError(State s, const std::string& captcha_token, 123 const GURL& captcha_image_url, 124 const GURL& captcha_unlock_url); 125 126 State state_; 127 Captcha captcha_; 128 int network_error_; 129}; 130 131#endif // CHROME_COMMON_NET_GAIA_GOOGLE_SERVICE_AUTH_ERROR_H_ 132