| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 #ifndef CHROME_BROWSER_CHROMEOS_LOGIN_GOOGLE_AUTHENTICATOR_H_ | 5 #ifndef CHROME_BROWSER_CHROMEOS_LOGIN_GOOGLE_AUTHENTICATOR_H_ |
| 6 #define CHROME_BROWSER_CHROMEOS_LOGIN_GOOGLE_AUTHENTICATOR_H_ | 6 #define CHROME_BROWSER_CHROMEOS_LOGIN_GOOGLE_AUTHENTICATOR_H_ |
| 7 | 7 |
| 8 #include <string> | 8 #include <string> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 63 virtual void OnURLFetchComplete(const URLFetcher* source, | 63 virtual void OnURLFetchComplete(const URLFetcher* source, |
| 64 const GURL& url, | 64 const GURL& url, |
| 65 const URLRequestStatus& status, | 65 const URLRequestStatus& status, |
| 66 int response_code, | 66 int response_code, |
| 67 const ResponseCookies& cookies, | 67 const ResponseCookies& cookies, |
| 68 const std::string& data); | 68 const std::string& data); |
| 69 | 69 |
| 70 | 70 |
| 71 | 71 |
| 72 // Public for testing. | 72 // Public for testing. |
| 73 void set_system_salt(const std::vector<unsigned char>& new_salt) { | 73 void set_system_salt(const chromeos::CryptohomeBlob& new_salt) { |
| 74 system_salt_ = new_salt; | 74 system_salt_ = new_salt; |
| 75 } | 75 } |
| 76 void set_localaccount(const std::string& new_name) { | 76 void set_localaccount(const std::string& new_name) { |
| 77 localaccount_ = new_name; | 77 localaccount_ = new_name; |
| 78 checked_for_localaccount_ = true; | 78 checked_for_localaccount_ = true; |
| 79 } | 79 } |
| 80 void set_username(const std::string& fake_user) { username_ = fake_user; } | 80 void set_username(const std::string& fake_user) { username_ = fake_user; } |
| 81 void set_password_hash(const std::string& fake_hash) { | 81 void set_password_hash(const std::string& fake_hash) { |
| 82 ascii_hash_ = fake_hash; | 82 ascii_hash_ = fake_hash; |
| 83 } | 83 } |
| 84 | 84 |
| 85 // These methods must be called on the UI thread, as they make DBus calls | 85 // These methods must be called on the UI thread, as they make DBus calls |
| 86 // and also call back to the login UI. | 86 // and also call back to the login UI. |
| 87 void OnLoginSuccess(const std::string& credentials); | 87 void OnLoginSuccess(const std::string& credentials); |
| 88 void CheckOffline(const std::string& error); | 88 void CheckOffline(const std::string& error); |
| 89 void CheckLocalaccount(const std::string& error); | 89 void CheckLocalaccount(const std::string& error); |
| 90 void OnLoginFailure(const std::string& data); | 90 void OnLoginFailure(const std::string& data); |
| 91 | 91 |
| 92 // Perform basic canonicalization of |email_address|, taking into account | 92 // Perform basic canonicalization of |email_address|, taking into account |
| 93 // that gmail does not consider '.' or caps inside a username to matter. | 93 // that gmail does not consider '.' or caps inside a username to matter. |
| 94 // For example, c.masone@gmail.com == cMaSone@gmail.com, per | 94 // For example, c.masone@gmail.com == cMaSone@gmail.com, per |
| 95 // http://mail.google.com/support/bin/answer.py?hl=en&ctx=mail&answer=10313# | 95 // http://mail.google.com/support/bin/answer.py?hl=en&ctx=mail&answer=10313# |
| 96 static std::string Canonicalize(const std::string& email_address); | 96 static std::string Canonicalize(const std::string& email_address); |
| 97 | 97 |
| 98 // The signal to cryptohomed that we want a tmpfs. | 98 // The signal to cryptohomed that we want a tmpfs. |
| 99 // TODO(cmasone): revisit this after cryptohome re-impl | 99 // TODO(cmasone): revisit this after cryptohome re-impl |
| 100 static const char kTmpfsTrigger[]; | 100 static const char kTmpfsTrigger[]; |
| 101 | 101 |
| 102 private: | 102 private: |
| 103 // If we don't have the system salt yet, loads it from |path|. | 103 // If we don't have the system salt yet, loads it from the CryptohomeLibrary. |
| 104 // Should only be called on the FILE thread. | 104 void LoadSystemSalt(); |
| 105 void LoadSystemSalt(const FilePath& path); | |
| 106 | 105 |
| 107 // If we haven't already, looks in a file called |filename| next to | 106 // If we haven't already, looks in a file called |filename| next to |
| 108 // the browser executable for a "localaccount" name, and retrieves it | 107 // the browser executable for a "localaccount" name, and retrieves it |
| 109 // if one is present. If someone attempts to authenticate with this | 108 // if one is present. If someone attempts to authenticate with this |
| 110 // username, we will mount a tmpfs for them and let them use the | 109 // username, we will mount a tmpfs for them and let them use the |
| 111 // browser. | 110 // browser. |
| 112 // Should only be called on the FILE thread. | 111 // Should only be called on the FILE thread. |
| 113 void LoadLocalaccount(const std::string& filename); | 112 void LoadLocalaccount(const std::string& filename); |
| 114 | 113 |
| 115 // Stores a hash of |password|, salted with the ascii of |system_salt_|. | 114 // Stores a hash of |password|, salted with the ascii of |system_salt_|. |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 160 static const char kOpenSSLMagic[]; | 159 static const char kOpenSSLMagic[]; |
| 161 | 160 |
| 162 // Name of a file, next to chrome, that contains a local account username. | 161 // Name of a file, next to chrome, that contains a local account username. |
| 163 static const char kLocalaccountFile[]; | 162 static const char kLocalaccountFile[]; |
| 164 | 163 |
| 165 URLFetcher* fetcher_; | 164 URLFetcher* fetcher_; |
| 166 URLRequestContextGetter* getter_; | 165 URLRequestContextGetter* getter_; |
| 167 std::string username_; | 166 std::string username_; |
| 168 std::string ascii_hash_; | 167 std::string ascii_hash_; |
| 169 std::string request_body_; | 168 std::string request_body_; |
| 170 std::vector<unsigned char> system_salt_; | 169 chromeos::CryptohomeBlob system_salt_; |
| 171 std::string localaccount_; | 170 std::string localaccount_; |
| 172 bool checked_for_localaccount_; // needed becasuse empty localaccount_ is ok. | 171 bool checked_for_localaccount_; // needed becasuse empty localaccount_ is ok. |
| 173 bool unlock_; // True if authenticating to unlock the computer. | 172 bool unlock_; // True if authenticating to unlock the computer. |
| 174 bool try_again_; // True if we're willing to retry the login attempt. | 173 bool try_again_; // True if we're willing to retry the login attempt. |
| 175 | 174 |
| 176 friend class GoogleAuthenticatorTest; | 175 friend class GoogleAuthenticatorTest; |
| 177 FRIEND_TEST_ALL_PREFIXES(GoogleAuthenticatorTest, SaltToAsciiTest); | 176 FRIEND_TEST_ALL_PREFIXES(GoogleAuthenticatorTest, SaltToAsciiTest); |
| 178 FRIEND_TEST_ALL_PREFIXES(GoogleAuthenticatorTest, CheckTwoFactorResponse); | 177 FRIEND_TEST_ALL_PREFIXES(GoogleAuthenticatorTest, CheckTwoFactorResponse); |
| 179 FRIEND_TEST_ALL_PREFIXES(GoogleAuthenticatorTest, CheckNormalErrorCode); | 178 FRIEND_TEST_ALL_PREFIXES(GoogleAuthenticatorTest, CheckNormalErrorCode); |
| 180 FRIEND_TEST_ALL_PREFIXES(GoogleAuthenticatorTest, EmailAddressNoOp); | 179 FRIEND_TEST_ALL_PREFIXES(GoogleAuthenticatorTest, EmailAddressNoOp); |
| 181 FRIEND_TEST_ALL_PREFIXES(GoogleAuthenticatorTest, EmailAddressIgnoreCaps); | 180 FRIEND_TEST_ALL_PREFIXES(GoogleAuthenticatorTest, EmailAddressIgnoreCaps); |
| 182 FRIEND_TEST_ALL_PREFIXES(GoogleAuthenticatorTest, | 181 FRIEND_TEST_ALL_PREFIXES(GoogleAuthenticatorTest, |
| 183 EmailAddressIgnoreDomainCaps); | 182 EmailAddressIgnoreDomainCaps); |
| 184 FRIEND_TEST_ALL_PREFIXES(GoogleAuthenticatorTest, | 183 FRIEND_TEST_ALL_PREFIXES(GoogleAuthenticatorTest, |
| 185 EmailAddressIgnoreOneUsernameDot); | 184 EmailAddressIgnoreOneUsernameDot); |
| 186 FRIEND_TEST_ALL_PREFIXES(GoogleAuthenticatorTest, | 185 FRIEND_TEST_ALL_PREFIXES(GoogleAuthenticatorTest, |
| 187 EmailAddressIgnoreManyUsernameDots); | 186 EmailAddressIgnoreManyUsernameDots); |
| 188 FRIEND_TEST_ALL_PREFIXES(GoogleAuthenticatorTest, | 187 FRIEND_TEST_ALL_PREFIXES(GoogleAuthenticatorTest, |
| 189 EmailAddressIgnoreConsecutiveUsernameDots); | 188 EmailAddressIgnoreConsecutiveUsernameDots); |
| 190 FRIEND_TEST_ALL_PREFIXES(GoogleAuthenticatorTest, | 189 FRIEND_TEST_ALL_PREFIXES(GoogleAuthenticatorTest, |
| 191 EmailAddressDifferentOnesRejected); | 190 EmailAddressDifferentOnesRejected); |
| 192 FRIEND_TEST_ALL_PREFIXES(GoogleAuthenticatorTest, | 191 FRIEND_TEST_ALL_PREFIXES(GoogleAuthenticatorTest, |
| 193 EmailAddressIgnorePlusSuffix); | 192 EmailAddressIgnorePlusSuffix); |
| 194 FRIEND_TEST_ALL_PREFIXES(GoogleAuthenticatorTest, | 193 FRIEND_TEST_ALL_PREFIXES(GoogleAuthenticatorTest, |
| 195 EmailAddressIgnoreMultiPlusSuffix); | 194 EmailAddressIgnoreMultiPlusSuffix); |
| 196 FRIEND_TEST_ALL_PREFIXES(GoogleAuthenticatorTest, ReadSaltTest); | 195 FRIEND_TEST_ALL_PREFIXES(GoogleAuthenticatorTest, ReadSaltOnlyOnceTest); |
| 197 FRIEND_TEST_ALL_PREFIXES(GoogleAuthenticatorTest, ReadLocalaccountTest); | 196 FRIEND_TEST_ALL_PREFIXES(GoogleAuthenticatorTest, ReadLocalaccountTest); |
| 198 FRIEND_TEST_ALL_PREFIXES(GoogleAuthenticatorTest, | 197 FRIEND_TEST_ALL_PREFIXES(GoogleAuthenticatorTest, |
| 199 ReadLocalaccountTrailingWSTest); | 198 ReadLocalaccountTrailingWSTest); |
| 200 FRIEND_TEST_ALL_PREFIXES(GoogleAuthenticatorTest, ReadNoLocalaccountTest); | 199 FRIEND_TEST_ALL_PREFIXES(GoogleAuthenticatorTest, ReadNoLocalaccountTest); |
| 201 FRIEND_TEST_ALL_PREFIXES(GoogleAuthenticatorTest, LoginNetFailureTest); | 200 FRIEND_TEST_ALL_PREFIXES(GoogleAuthenticatorTest, LoginNetFailureTest); |
| 202 FRIEND_TEST_ALL_PREFIXES(GoogleAuthenticatorTest, LoginDeniedTest); | 201 FRIEND_TEST_ALL_PREFIXES(GoogleAuthenticatorTest, LoginDeniedTest); |
| 203 FRIEND_TEST_ALL_PREFIXES(GoogleAuthenticatorTest, TwoFactorLoginTest); | 202 FRIEND_TEST_ALL_PREFIXES(GoogleAuthenticatorTest, TwoFactorLoginTest); |
| 204 | 203 |
| 205 DISALLOW_COPY_AND_ASSIGN(GoogleAuthenticator); | 204 DISALLOW_COPY_AND_ASSIGN(GoogleAuthenticator); |
| 206 }; | 205 }; |
| 207 | 206 |
| 208 } // namespace chromeos | 207 } // namespace chromeos |
| 209 | 208 |
| 210 #endif // CHROME_BROWSER_CHROMEOS_LOGIN_GOOGLE_AUTHENTICATOR_H_ | 209 #endif // CHROME_BROWSER_CHROMEOS_LOGIN_GOOGLE_AUTHENTICATOR_H_ |
| OLD | NEW |