| OLD | NEW |
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/signin/core/browser/dice_header_helper.h" | 5 #include "components/signin/core/browser/dice_header_helper.h" |
| 6 | 6 |
| 7 #include "base/strings/string_number_conversions.h" |
| 7 #include "components/signin/core/common/profile_management_switches.h" | 8 #include "components/signin/core/common/profile_management_switches.h" |
| 8 #include "google_apis/gaia/gaia_auth_util.h" | 9 #include "google_apis/gaia/gaia_auth_util.h" |
| 9 #include "google_apis/gaia/gaia_urls.h" | 10 #include "google_apis/gaia/gaia_urls.h" |
| 10 #include "url/gurl.h" | |
| 11 | 11 |
| 12 namespace signin { | 12 namespace signin { |
| 13 | 13 |
| 14 namespace { |
| 15 |
| 16 const char kActionAttrName[] = "action"; |
| 17 const char kAuthUserAttrName[] = "authuser"; |
| 18 const char kAuthorizationCodeAttrName[] = "authorization_code"; |
| 19 const char kEmailAttrName[] = "email"; |
| 20 const char kIdAttrName[] = "id"; |
| 21 |
| 22 // Determines the Dice action that has been passed from Gaia in the header. |
| 23 DiceAction GetDiceActionFromHeader(const std::string& value) { |
| 24 if (value == "SIGNIN") |
| 25 return DiceAction::SIGNIN; |
| 26 else if (value == "SIGNOUT") |
| 27 return DiceAction::SIGNOUT; |
| 28 else if (value == "SINGLE_SESSION_SIGN_OUT") |
| 29 return DiceAction::SINGLE_SESSION_SIGNOUT; |
| 30 else |
| 31 return DiceAction::NONE; |
| 32 } |
| 33 |
| 34 } // namespace |
| 35 |
| 36 // static |
| 37 DiceResponseParams DiceHeaderHelper::BuildDiceResponseParams( |
| 38 const std::string& header_value) { |
| 39 DCHECK(!header_value.empty()); |
| 40 DiceResponseParams params; |
| 41 ResponseHeaderDictionary header_dictionary = |
| 42 ParseAccountConsistencyResponseHeader(header_value); |
| 43 ResponseHeaderDictionary::const_iterator it = header_dictionary.begin(); |
| 44 for (; it != header_dictionary.end(); ++it) { |
| 45 const std::string key_name(it->first); |
| 46 const std::string value(it->second); |
| 47 if (key_name == kActionAttrName) { |
| 48 params.user_intention = GetDiceActionFromHeader(value); |
| 49 } else if (key_name == kIdAttrName) { |
| 50 params.obfuscated_gaia_id = value; |
| 51 } else if (key_name == kEmailAttrName) { |
| 52 params.email = value; |
| 53 } else if (key_name == kAuthUserAttrName) { |
| 54 bool parse_success = base::StringToInt(value, ¶ms.session_index); |
| 55 if (!parse_success) |
| 56 params.session_index = -1; |
| 57 } else if (key_name == kAuthorizationCodeAttrName) { |
| 58 params.authorization_code = value; |
| 59 } else { |
| 60 DLOG(WARNING) << "Unexpected Gaia header attribute '" << key_name << "'."; |
| 61 } |
| 62 } |
| 63 |
| 64 if (params.obfuscated_gaia_id.empty() || params.email.empty() || |
| 65 params.session_index == -1) { |
| 66 DLOG(WARNING) << "Missing parameters for Dice header."; |
| 67 params.user_intention = DiceAction::NONE; |
| 68 } |
| 69 |
| 70 if (params.user_intention == DiceAction::SIGNIN && |
| 71 params.authorization_code.empty()) { |
| 72 DLOG(WARNING) << "Missing authorization code for Dice SIGNIN."; |
| 73 params.user_intention = DiceAction::NONE; |
| 74 } |
| 75 |
| 76 return params; |
| 77 } |
| 78 |
| 14 bool DiceHeaderHelper::IsUrlEligibleForRequestHeader(const GURL& url) { | 79 bool DiceHeaderHelper::IsUrlEligibleForRequestHeader(const GURL& url) { |
| 15 if (switches::GetAccountConsistencyMethod() != | 80 if (switches::GetAccountConsistencyMethod() != |
| 16 switches::AccountConsistencyMethod::kDice) { | 81 switches::AccountConsistencyMethod::kDice) { |
| 17 return false; | 82 return false; |
| 18 } | 83 } |
| 19 return gaia::IsGaiaSignonRealm(url.GetOrigin()); | 84 return gaia::IsGaiaSignonRealm(url.GetOrigin()); |
| 20 } | 85 } |
| 21 | 86 |
| 22 std::string DiceHeaderHelper::BuildRequestHeader(bool is_header_request, | 87 std::string DiceHeaderHelper::BuildRequestHeader(bool is_header_request, |
| 23 const GURL& url, | 88 const GURL& url, |
| 24 const std::string& account_id, | 89 const std::string& account_id, |
| 25 int profile_mode_mask) { | 90 int profile_mode_mask) { |
| 26 return "client_id=" + GaiaUrls::GetInstance()->oauth2_chrome_client_id(); | 91 return "client_id=" + GaiaUrls::GetInstance()->oauth2_chrome_client_id(); |
| 27 } | 92 } |
| 28 | 93 |
| 29 } // namespace signin | 94 } // namespace signin |
| OLD | NEW |