1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 3bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// found in the LICENSE file. 4bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// 5bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// The signin manager encapsulates some functionality tracking 6bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// which user is signed in. When a user is signed in, a ClientLogin 7bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// request is run on their behalf. Auth tokens are fetched from Google 8bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// and the results are stored in the TokenService. 9bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 10bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#ifndef CHROME_BROWSER_SYNC_SIGNIN_MANAGER_H_ 11bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#define CHROME_BROWSER_SYNC_SIGNIN_MANAGER_H_ 12bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#pragma once 13bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 14bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include <string> 15bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/logging.h" 16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h" 17bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/common/net/gaia/gaia_auth_consumer.h" 18bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/common/net/gaia/google_service_auth_error.h" 19bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 204a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass GaiaAuthFetcher; 21bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass Profile; 22bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass PrefService; 23bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 24bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Details for the Notification type GOOGLE_SIGNIN_SUCCESSFUL. 25bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// A listener might use this to make note of a username / password 26bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// pair for encryption keys. 27bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenstruct GoogleServiceSigninSuccessDetails { 28bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GoogleServiceSigninSuccessDetails(const std::string& in_username, 29bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string& in_password) 30bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen : username(in_username), 31bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen password(in_password) {} 32bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::string username; 33bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::string password; 34bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}; 35bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 36bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass SigninManager : public GaiaAuthConsumer { 37bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public: 38731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick SigninManager(); 39731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick virtual ~SigninManager(); 40731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 41bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Call to register our prefs. 42bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen static void RegisterUserPrefs(PrefService* user_prefs); 43bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 44bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // If user was signed in, load tokens from DB if available. 45bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void Initialize(Profile* profile); 46bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 47bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // If a user is signed in, this will return their name. 48bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Otherwise, it will return an empty string. 49bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string& GetUsername(); 50bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 51bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Sets the user name. Used for migrating credentials from previous system. 52bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void SetUsername(const std::string& username); 53bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 54bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Attempt to sign in this user. If successful, set a preference indicating 55bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // the signed in user and send out a notification, then start fetching tokens 56bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // for the user. 57bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void StartSignIn(const std::string& username, 58bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string& password, 59bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string& login_token, 60bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string& login_captcha); 61731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 62731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Used when a second factor access code was required to complete a signin 63731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // attempt. 64731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick void ProvideSecondFactorAccessCode(const std::string& access_code); 65731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 66bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Sign a user out, removing the preference, erasing all keys 67731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // associated with the user, and canceling all auth in progress. 68bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void SignOut(); 69bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 70bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // GaiaAuthConsumer 71bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void OnClientLoginSuccess(const ClientLoginResult& result); 72bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void OnClientLoginFailure(const GoogleServiceAuthError& error); 73bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void OnGetUserInfoSuccess(const std::string& key, 74bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string& value); 75bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void OnGetUserInfoKeyNotFound(const std::string& key); 76bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void OnGetUserInfoFailure(const GoogleServiceAuthError& error); 77bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 78bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen private: 79bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Profile* profile_; 80bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::string username_; 81bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::string password_; // This is kept empty whenever possible. 82731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick bool had_two_factor_error_; 83bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 84bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Result of the last client login, kept pending the lookup of the 85bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // canonical email. 86bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ClientLoginResult last_result_; 87bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 88bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Actual client login handler. 894a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch scoped_ptr<GaiaAuthFetcher> client_login_; 90bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}; 91bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 92bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#endif // CHROME_BROWSER_SYNC_SIGNIN_MANAGER_H_ 93