OLD | NEW |
---|---|
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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_PARALLEL_AUTHENTICATOR_H_ | 5 #ifndef CHROME_BROWSER_CHROMEOS_LOGIN_PARALLEL_AUTHENTICATOR_H_ |
6 #define CHROME_BROWSER_CHROMEOS_LOGIN_PARALLEL_AUTHENTICATOR_H_ | 6 #define CHROME_BROWSER_CHROMEOS_LOGIN_PARALLEL_AUTHENTICATOR_H_ |
7 #pragma once | 7 #pragma once |
8 | 8 |
9 #include <string> | 9 #include <string> |
10 #include <vector> | 10 #include <vector> |
(...skipping 14 matching lines...) Expand all Loading... | |
25 #include "chrome/common/net/gaia/gaia_auth_consumer.h" | 25 #include "chrome/common/net/gaia/gaia_auth_consumer.h" |
26 | 26 |
27 class GaiaAuthFetcher; | 27 class GaiaAuthFetcher; |
28 class LoginFailure; | 28 class LoginFailure; |
29 class Profile; | 29 class Profile; |
30 | 30 |
31 namespace base { | 31 namespace base { |
32 class Lock; | 32 class Lock; |
33 } | 33 } |
34 | 34 |
35 namespace crypto { | |
36 class SymmetricKey; | |
37 } | |
38 | |
35 namespace chromeos { | 39 namespace chromeos { |
36 | 40 |
37 class LoginStatusConsumer; | 41 class LoginStatusConsumer; |
38 class ParallelAuthenticator; | 42 class ParallelAuthenticator; |
39 class ResolveChecker; | 43 class ResolveChecker; |
40 | 44 |
41 // Authenticates a Chromium OS user against the Google Accounts ClientLogin API. | 45 // Authenticates a Chromium OS user against the Google Accounts ClientLogin API. |
42 // | 46 // |
43 // Simultaneously attempts authentication both offline and online, failing over | 47 // Simultaneously attempts authentication both offline and online, failing over |
44 // to the "localaccount" in the event that authentication fails. | 48 // to the "localaccount" in the event that authentication fails. |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
142 const GaiaAuthConsumer::ClientLoginResult& credentials) OVERRIDE; | 146 const GaiaAuthConsumer::ClientLoginResult& credentials) OVERRIDE; |
143 virtual void RetryAuth(Profile* profile, | 147 virtual void RetryAuth(Profile* profile, |
144 const std::string& username, | 148 const std::string& username, |
145 const std::string& password, | 149 const std::string& password, |
146 const std::string& login_token, | 150 const std::string& login_token, |
147 const std::string& login_captcha) OVERRIDE; | 151 const std::string& login_captcha) OVERRIDE; |
148 virtual void VerifyOAuth1AccessToken(const std::string& oauth1_access_token, | 152 virtual void VerifyOAuth1AccessToken(const std::string& oauth1_access_token, |
149 const std::string& oauth1_secret) OVERRIDE; | 153 const std::string& oauth1_secret) OVERRIDE; |
150 virtual std::string EncryptToken(const std::string& token) OVERRIDE; | 154 virtual std::string EncryptToken(const std::string& token) OVERRIDE; |
151 virtual std::string DecryptToken(const std::string& encrypted_token) OVERRIDE; | 155 virtual std::string DecryptToken(const std::string& encrypted_token) OVERRIDE; |
156 virtual std::string DecryptLegacyToken( | |
157 const std::string& encrypted_token) OVERRIDE; | |
152 | 158 |
153 // AuthAttemptStateResolver overrides. | 159 // AuthAttemptStateResolver overrides. |
154 // Attempts to make a decision and call back |consumer_| based on | 160 // Attempts to make a decision and call back |consumer_| based on |
155 // the state we have gathered at the time of call. If a decision | 161 // the state we have gathered at the time of call. If a decision |
156 // can't be made, defers until the next time this is called. | 162 // can't be made, defers until the next time this is called. |
157 // When a decision is made, will call back to |consumer_| on the UI thread. | 163 // When a decision is made, will call back to |consumer_| on the UI thread. |
158 // | 164 // |
159 // Must be called on the IO thread. | 165 // Must be called on the IO thread. |
160 virtual void Resolve() OVERRIDE; | 166 virtual void Resolve() OVERRIDE; |
161 | 167 |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
213 current_online_ = attempt; | 219 current_online_ = attempt; |
214 } | 220 } |
215 | 221 |
216 // Resets |current_state_| and then posts a task to the UI thread to | 222 // Resets |current_state_| and then posts a task to the UI thread to |
217 // Initiate() |to_initiate|. | 223 // Initiate() |to_initiate|. |
218 // Call this method on the IO thread. | 224 // Call this method on the IO thread. |
219 void ResyncRecoverHelper(CryptohomeOp* to_initiate); | 225 void ResyncRecoverHelper(CryptohomeOp* to_initiate); |
220 | 226 |
221 // If we don't have the system salt yet, loads it from the CryptohomeLibrary. | 227 // If we don't have the system salt yet, loads it from the CryptohomeLibrary. |
222 void LoadSystemSalt(); | 228 void LoadSystemSalt(); |
229 // If we don't have supplemental_user_key_ yet, loads it from the NSS DB. | |
230 // Returns false if the key can not be loaded/created. | |
231 bool LoadSupplementalUserKey(); | |
223 | 232 |
224 // If we haven't already, looks in a file called |filename| next to | 233 // If we haven't already, looks in a file called |filename| next to |
225 // the browser executable for a "localaccount" name, and retrieves it | 234 // the browser executable for a "localaccount" name, and retrieves it |
226 // if one is present. If someone attempts to authenticate with this | 235 // if one is present. If someone attempts to authenticate with this |
227 // username, we will mount a tmpfs for them and let them use the | 236 // username, we will mount a tmpfs for them and let them use the |
228 // browser. | 237 // browser. |
229 // Should only be called on the FILE thread. | 238 // Should only be called on the FILE thread. |
230 void LoadLocalaccount(const std::string& filename); | 239 void LoadLocalaccount(const std::string& filename); |
231 | 240 |
232 void SetLocalaccount(const std::string& new_name); | 241 void SetLocalaccount(const std::string& new_name); |
233 | 242 |
234 // Records OAuth1 access token verification failure for |user_account|. | 243 // Records OAuth1 access token verification failure for |user_account|. |
235 void RecordOAuthCheckFailure(const std::string& user_account); | 244 void RecordOAuthCheckFailure(const std::string& user_account); |
236 | 245 |
237 // Stores a hash of |password|, salted with the ascii of |system_salt_|. | 246 // Stores a hash of |password|, salted with the ascii of |system_salt_|. |
wtc
2011/09/06 21:35:17
Nit: undo the whitespace.
zel
2011/09/06 22:33:35
Done.
| |
238 std::string HashPassword(const std::string& password); | 247 std::string HashPassword(const std::string& password); |
239 | 248 |
240 // Returns the ascii encoding of the system salt. | 249 // Returns the ascii encoding of the system salt. |
241 std::string SaltAsAscii(); | 250 std::string SaltAsAscii(); |
242 | 251 |
243 // Returns the ascii encoding of user supplemental key. | 252 // Returns the ascii encoding of user supplemental key. |
244 // TODO(zelidrag): http://crosbug.com/18905. Replace this with a key from | 253 // TODO(zelidrag): http://crosbug.com/18905. Replace this with a key from |
245 // nssdb instead. | 254 // nssdb instead. |
246 std::string UserSupplementalKeyAsAscii(); | 255 std::string UserSupplementalKeyAsAscii(); |
247 | 256 |
(...skipping 20 matching lines...) Expand all Loading... | |
268 scoped_ptr<AuthAttemptState> current_state_; | 277 scoped_ptr<AuthAttemptState> current_state_; |
269 scoped_refptr<OnlineAttempt> current_online_; | 278 scoped_refptr<OnlineAttempt> current_online_; |
270 scoped_refptr<CryptohomeOp> mounter_; | 279 scoped_refptr<CryptohomeOp> mounter_; |
271 scoped_refptr<CryptohomeOp> key_migrator_; | 280 scoped_refptr<CryptohomeOp> key_migrator_; |
272 scoped_refptr<CryptohomeOp> data_remover_; | 281 scoped_refptr<CryptohomeOp> data_remover_; |
273 scoped_refptr<CryptohomeOp> guest_mounter_; | 282 scoped_refptr<CryptohomeOp> guest_mounter_; |
274 scoped_refptr<CryptohomeOp> key_checker_; | 283 scoped_refptr<CryptohomeOp> key_checker_; |
275 | 284 |
276 std::string ascii_hash_; | 285 std::string ascii_hash_; |
277 chromeos::CryptohomeBlob system_salt_; | 286 chromeos::CryptohomeBlob system_salt_; |
287 scoped_ptr<crypto::SymmetricKey> supplemental_user_key_; | |
278 | 288 |
279 // When the user has changed her password, but gives us the old one, we will | 289 // When the user has changed her password, but gives us the old one, we will |
280 // be able to mount her cryptohome, but online authentication will fail. | 290 // be able to mount her cryptohome, but online authentication will fail. |
281 // This allows us to present the same behavior to the caller, regardless | 291 // This allows us to present the same behavior to the caller, regardless |
282 // of the order in which we receive these results. | 292 // of the order in which we receive these results. |
283 bool already_reported_success_; | 293 bool already_reported_success_; |
284 base::Lock success_lock_; // A lock around already_reported_success_. | 294 base::Lock success_lock_; // A lock around already_reported_success_. |
285 | 295 |
286 // Status relating to the local "backdoor" account. | 296 // Status relating to the local "backdoor" account. |
287 std::string localaccount_; | 297 std::string localaccount_; |
288 bool checked_for_localaccount_; // Needed because empty localaccount_ is ok. | 298 bool checked_for_localaccount_; // Needed because empty localaccount_ is ok. |
289 base::Lock localaccount_lock_; // A lock around checked_for_localaccount_. | 299 base::Lock localaccount_lock_; // A lock around checked_for_localaccount_. |
290 | 300 |
291 // True if we use OAuth-based authentication flow. | 301 // True if we use OAuth-based authentication flow. |
292 bool using_oauth_; | 302 bool using_oauth_; |
293 | 303 |
294 friend class ResolveChecker; | 304 friend class ResolveChecker; |
295 friend class ParallelAuthenticatorTest; | 305 friend class ParallelAuthenticatorTest; |
296 FRIEND_TEST_ALL_PREFIXES(ParallelAuthenticatorTest, SaltToAscii); | 306 FRIEND_TEST_ALL_PREFIXES(ParallelAuthenticatorTest, SaltToAscii); |
297 FRIEND_TEST_ALL_PREFIXES(ParallelAuthenticatorTest, ReadLocalaccount); | 307 FRIEND_TEST_ALL_PREFIXES(ParallelAuthenticatorTest, ReadLocalaccount); |
298 FRIEND_TEST_ALL_PREFIXES(ParallelAuthenticatorTest, | 308 FRIEND_TEST_ALL_PREFIXES(ParallelAuthenticatorTest, |
299 ReadLocalaccountTrailingWS); | 309 ReadLocalaccountTrailingWS); |
300 FRIEND_TEST_ALL_PREFIXES(ParallelAuthenticatorTest, ReadNoLocalaccount); | 310 FRIEND_TEST_ALL_PREFIXES(ParallelAuthenticatorTest, ReadNoLocalaccount); |
301 DISALLOW_COPY_AND_ASSIGN(ParallelAuthenticator); | 311 DISALLOW_COPY_AND_ASSIGN(ParallelAuthenticator); |
302 }; | 312 }; |
303 | 313 |
304 } // namespace chromeos | 314 } // namespace chromeos |
305 | 315 |
306 #endif // CHROME_BROWSER_CHROMEOS_LOGIN_PARALLEL_AUTHENTICATOR_H_ | 316 #endif // CHROME_BROWSER_CHROMEOS_LOGIN_PARALLEL_AUTHENTICATOR_H_ |
OLD | NEW |