diff options
Diffstat (limited to 'chrome/browser/sync/engine/authenticator.h')
-rw-r--r-- | chrome/browser/sync/engine/authenticator.h | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/chrome/browser/sync/engine/authenticator.h b/chrome/browser/sync/engine/authenticator.h new file mode 100644 index 0000000..6c5005b --- /dev/null +++ b/chrome/browser/sync/engine/authenticator.h @@ -0,0 +1,106 @@ +// Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// The authenticator is a cross-platform class that handles authentication for +// the sync client. +// +// Current State: +// The authenticator is currently only used to authenticate tokens using the +// newer protocol buffer request. + +#ifndef CHROME_BROWSER_SYNC_ENGINE_AUTHENTICATOR_H_ +#define CHROME_BROWSER_SYNC_ENGINE_AUTHENTICATOR_H_ + +#include <string> + +#include "base/basictypes.h" +#include "base/port.h" + +namespace sync_pb { +class UserIdentification; +} + +namespace browser_sync { + +class ServerConnectionManager; +class UserSettings; + +class Authenticator { + public: + // Single return enum. + enum AuthenticationResult { + SUCCESS = 0, + // We couldn't log on because we don't have saved credentials. + NO_SAVED_CREDENTIALS, + // We can't reach auth server (i.e. we're offline or server's down). + NOT_CONNECTED, + // Server's up, but we're down. + SERVICE_DOWN, + // We contacted the server, but the response didn't make sense. + CORRUPT_SERVER_RESPONSE, + // Bad username/password. + BAD_CREDENTIALS, + // Credentials are fine, but the user hasn't signed up. + USER_NOT_ACTIVATED, + + // Return values for internal use. + + // We will never return this to the user unless they call AuthenticateToken + // directly. Other auth functions retry and then return + // CORRUPT_SERVER_RESPONSE. + // TODO(sync): Implement retries. + BAD_AUTH_TOKEN, + // We should never return this, it's a placeholder during development. + // TODO(sync): Remove this + UNSPECIFIC_ERROR_RETURN, + }; + + // Constructor. This class will keep the connection authenticated. + // TODO(sync): Make it work as described. + // TODO(sync): Require a UI callback mechanism. + Authenticator(ServerConnectionManager* manager, UserSettings* settings); + + // Constructor for a simple authenticator used for programmatic login from + // test programs. + explicit Authenticator(ServerConnectionManager* manager); + + // This version of Authenticate tries to use saved credentials, if we have + // any. + AuthenticationResult Authenticate(); + + // If save_credentials is set we save the long-lived auth token to local disk. + // In all cases we save the username and password in memory (if given) so we + // can refresh the long-lived auth token if it expires. + // Also we save a 10-bit hash of the password to allow offline login. + // TODO(sync): Make it work as described. + // TODO(sync): Arguments for desired domain. + AuthenticationResult Authenticate(std::string username, std::string password, + bool save_credentials); + // A version of the auth token to authenticate cookie portion of + // authentication. It uses the new proto buffer based call instead of the HTTP + // GET based one we currently use. + // Can return one of SUCCESS, SERVICE_DOWN, CORRUPT_SERVER_RESPONSE, + // USER_NOT_ACTIVATED or BAD_AUTH_TOKEN. See above for the meaning of these + // values. + // TODO(sync): Make this function private when we're done. + AuthenticationResult AuthenticateToken(std::string auth_token); + + const char * display_email() const { return display_email_.c_str(); } + const char * display_name() const { return display_name_.c_str(); } + private: + // Stores the information in the UserIdentification returned from the server. + AuthenticationResult HandleSuccessfulTokenRequest( + const sync_pb::UserIdentification* user); + // The server connection manager that we're looking after. + ServerConnectionManager* server_connection_manager_; + // Returns SUCCESS or the value that should be returned to the user. + std::string display_email_; + std::string display_name_; + std::string obfuscated_id_; + UserSettings* const settings_; +}; + +} // namespace browser_sync + +#endif // CHROME_BROWSER_SYNC_ENGINE_AUTHENTICATOR_H_ |