Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6315)

Unified Diff: chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc

Issue 1394723002: This CL fixes the issue with login using alternative e-mails. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@2526
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc
diff --git a/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc
index 50b3d0853ad401d2b6ad45a85fdbabe8a0b2c5f3..bdfd9f89ea736af36941292b892397a160cb4855 100644
--- a/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc
@@ -480,6 +480,29 @@ void GaiaScreenHandler::HandleWebviewLoadAborted(
UpdateState(error_reason);
}
+std::string GaiaScreenHandler::GetCanonicalEmail(
+ const std::string& authenticated_email,
+ const std::string& gaia_id) const {
+ const std::string sanitized_email = gaia::SanitizeEmail(authenticated_email);
+
+ const std::string canonicalized_email =
+ gaia::CanonicalizeEmail(sanitized_email);
+ user_manager::UserManager* user_manager = user_manager::UserManager::Get();
+ if (user_manager && !user_manager->IsKnownUser(canonicalized_email)) {
+ std::string old_canonical_email;
+ if (user_manager->GetKnownUserCanonicalEmail(gaia_id,
+ &old_canonical_email)) {
+ if (old_canonical_email != canonicalized_email) {
+ LOG(WARNING) << "Existing user '" << old_canonical_email
+ << "' authenticated by alias '" << sanitized_email << "'.";
+ return old_canonical_email;
+ }
+ }
+ }
+ // For compatibility reasons, sanitized email is used.
+ return sanitized_email;
+}
+
void GaiaScreenHandler::HandleCompleteAuthentication(
const std::string& gaia_id,
const std::string& email,
@@ -494,7 +517,9 @@ void GaiaScreenHandler::HandleCompleteAuthentication(
DCHECK(!gaia_id.empty());
const std::string sanitized_email = gaia::SanitizeEmail(email);
Delegate()->SetDisplayEmail(sanitized_email);
- UserContext user_context(sanitized_email);
+
+ const std::string canonical_email = GetCanonicalEmail(email, gaia_id);
+ UserContext user_context(canonical_email);
user_context.SetGaiaID(gaia_id);
user_context.SetKey(Key(password));
user_context.SetAuthCode(auth_code);
@@ -615,7 +640,8 @@ void GaiaScreenHandler::DoCompleteLogin(const std::string& gaia_id,
DCHECK(!gaia_id.empty());
const std::string sanitized_email = gaia::SanitizeEmail(typed_email);
Delegate()->SetDisplayEmail(sanitized_email);
- UserContext user_context(sanitized_email);
+ const std::string canonical_email = GetCanonicalEmail(typed_email, gaia_id);
+ UserContext user_context(canonical_email);
user_context.SetGaiaID(gaia_id);
user_context.SetKey(Key(password));
user_context.SetAuthFlow(using_saml
« no previous file with comments | « chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.h ('k') | components/user_manager/user_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698