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 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
140 virtual void RecoverEncryptedData( | 140 virtual void RecoverEncryptedData( |
141 const std::string& old_password, | 141 const std::string& old_password, |
142 const GaiaAuthConsumer::ClientLoginResult& credentials) OVERRIDE; | 142 const GaiaAuthConsumer::ClientLoginResult& credentials) OVERRIDE; |
143 virtual void ResyncEncryptedData( | 143 virtual void ResyncEncryptedData( |
144 const GaiaAuthConsumer::ClientLoginResult& credentials) OVERRIDE; | 144 const GaiaAuthConsumer::ClientLoginResult& credentials) OVERRIDE; |
145 virtual void RetryAuth(Profile* profile, | 145 virtual void RetryAuth(Profile* profile, |
146 const std::string& username, | 146 const std::string& username, |
147 const std::string& password, | 147 const std::string& password, |
148 const std::string& login_token, | 148 const std::string& login_token, |
149 const std::string& login_captcha) OVERRIDE; | 149 const std::string& login_captcha) OVERRIDE; |
150 virtual void VerifyOAuth1AccessToken(const std::string& oauth1_access_token, | |
151 const std::string& oauth1_secret) OVERRIDE; | |
152 virtual std::string EncryptToken(const std::string& token) OVERRIDE; | |
153 virtual std::string DecryptToken(const std::string& encrypted_token) OVERRIDE; | |
154 | |
155 // AuthAttemptStateResolver overrides. | 150 // AuthAttemptStateResolver overrides. |
156 // Attempts to make a decision and call back |consumer_| based on | 151 // Attempts to make a decision and call back |consumer_| based on |
157 // the state we have gathered at the time of call. If a decision | 152 // the state we have gathered at the time of call. If a decision |
158 // can't be made, defers until the next time this is called. | 153 // can't be made, defers until the next time this is called. |
159 // When a decision is made, will call back to |consumer_| on the UI thread. | 154 // When a decision is made, will call back to |consumer_| on the UI thread. |
160 // | 155 // |
161 // Must be called on the IO thread. | 156 // Must be called on the IO thread. |
162 virtual void Resolve() OVERRIDE; | 157 virtual void Resolve() OVERRIDE; |
163 | 158 |
164 // Call this on the FILE thread. | 159 // Call this on the FILE thread. |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
232 // username, we will mount a tmpfs for them and let them use the | 227 // username, we will mount a tmpfs for them and let them use the |
233 // browser. | 228 // browser. |
234 // Should only be called on the FILE thread. | 229 // Should only be called on the FILE thread. |
235 void LoadLocalaccount(const std::string& filename); | 230 void LoadLocalaccount(const std::string& filename); |
236 | 231 |
237 void SetLocalaccount(const std::string& new_name); | 232 void SetLocalaccount(const std::string& new_name); |
238 | 233 |
239 // Records OAuth1 access token verification failure for |user_account|. | 234 // Records OAuth1 access token verification failure for |user_account|. |
240 void RecordOAuthCheckFailure(const std::string& user_account); | 235 void RecordOAuthCheckFailure(const std::string& user_account); |
241 | 236 |
242 // Stores a hash of |password|, salted with the ascii of |system_salt_|. | |
243 std::string HashPassword(const std::string& password); | |
244 | |
245 // Returns the ascii encoding of the system salt. | |
246 std::string SaltAsAscii(); | |
247 | |
248 // Signal login completion status for cases when a new user is added via | 237 // Signal login completion status for cases when a new user is added via |
249 // an external authentication provider (i.e. GAIA extension). | 238 // an external authentication provider (i.e. GAIA extension). |
250 void ResolveLoginCompletionStatus(); | 239 void ResolveLoginCompletionStatus(); |
251 | 240 |
252 // Name of a file, next to chrome, that contains a local account username. | 241 // Name of a file, next to chrome, that contains a local account username. |
253 static const char kLocalaccountFile[]; | 242 static const char kLocalaccountFile[]; |
254 | 243 |
255 // Milliseconds until we timeout our attempt to hit ClientLogin. | 244 // Milliseconds until we timeout our attempt to hit ClientLogin. |
256 static const int kClientLoginTimeoutMs; | 245 static const int kClientLoginTimeoutMs; |
257 | 246 |
258 // Milliseconds until we re-check whether we've gotten the localaccount name. | 247 // Milliseconds until we re-check whether we've gotten the localaccount name. |
259 static const int kLocalaccountRetryIntervalMs; | 248 static const int kLocalaccountRetryIntervalMs; |
260 | 249 |
261 // Handles all net communications with Gaia. | 250 // Handles all net communications with Gaia. |
262 scoped_ptr<GaiaAuthFetcher> gaia_authenticator_; | 251 scoped_ptr<GaiaAuthFetcher> gaia_authenticator_; |
263 | 252 |
264 // Used when we need to try online authentication again, after successful | 253 // Used when we need to try online authentication again, after successful |
265 // mount, but failed online login. | 254 // mount, but failed online login. |
266 scoped_ptr<AuthAttemptState> reauth_state_; | 255 scoped_ptr<AuthAttemptState> reauth_state_; |
267 | 256 |
268 scoped_ptr<AuthAttemptState> current_state_; | 257 scoped_ptr<AuthAttemptState> current_state_; |
269 scoped_refptr<OnlineAttempt> current_online_; | 258 scoped_refptr<OnlineAttempt> current_online_; |
270 scoped_refptr<CryptohomeOp> mounter_; | 259 scoped_refptr<CryptohomeOp> mounter_; |
271 scoped_refptr<CryptohomeOp> key_migrator_; | 260 scoped_refptr<CryptohomeOp> key_migrator_; |
272 scoped_refptr<CryptohomeOp> data_remover_; | 261 scoped_refptr<CryptohomeOp> data_remover_; |
273 scoped_refptr<CryptohomeOp> guest_mounter_; | 262 scoped_refptr<CryptohomeOp> guest_mounter_; |
274 scoped_refptr<CryptohomeOp> key_checker_; | 263 scoped_refptr<CryptohomeOp> key_checker_; |
275 | 264 |
276 std::string ascii_hash_; | |
277 chromeos::CryptohomeBlob system_salt_; | |
278 scoped_ptr<crypto::SymmetricKey> supplemental_user_key_; | |
279 | |
280 // When the user has changed her password, but gives us the old one, we will | 265 // When the user has changed her password, but gives us the old one, we will |
281 // be able to mount her cryptohome, but online authentication will fail. | 266 // be able to mount her cryptohome, but online authentication will fail. |
282 // This allows us to present the same behavior to the caller, regardless | 267 // This allows us to present the same behavior to the caller, regardless |
283 // of the order in which we receive these results. | 268 // of the order in which we receive these results. |
284 bool already_reported_success_; | 269 bool already_reported_success_; |
285 base::Lock success_lock_; // A lock around already_reported_success_. | 270 base::Lock success_lock_; // A lock around already_reported_success_. |
286 | 271 |
287 // Status relating to the local "backdoor" account. | 272 // Status relating to the local "backdoor" account. |
288 std::string localaccount_; | 273 std::string localaccount_; |
289 bool checked_for_localaccount_; // Needed because empty localaccount_ is ok. | 274 bool checked_for_localaccount_; // Needed because empty localaccount_ is ok. |
290 base::Lock localaccount_lock_; // A lock around checked_for_localaccount_. | 275 base::Lock localaccount_lock_; // A lock around checked_for_localaccount_. |
291 | 276 |
292 // True if we use OAuth-based authentication flow. | 277 // True if we use OAuth-based authentication flow. |
293 bool using_oauth_; | 278 bool using_oauth_; |
294 | 279 |
295 friend class ResolveChecker; | 280 friend class ResolveChecker; |
296 friend class ParallelAuthenticatorTest; | 281 friend class ParallelAuthenticatorTest; |
297 FRIEND_TEST_ALL_PREFIXES(ParallelAuthenticatorTest, SaltToAscii); | |
298 FRIEND_TEST_ALL_PREFIXES(ParallelAuthenticatorTest, ReadLocalaccount); | 282 FRIEND_TEST_ALL_PREFIXES(ParallelAuthenticatorTest, ReadLocalaccount); |
299 FRIEND_TEST_ALL_PREFIXES(ParallelAuthenticatorTest, | 283 FRIEND_TEST_ALL_PREFIXES(ParallelAuthenticatorTest, |
300 ReadLocalaccountTrailingWS); | 284 ReadLocalaccountTrailingWS); |
301 FRIEND_TEST_ALL_PREFIXES(ParallelAuthenticatorTest, ReadNoLocalaccount); | 285 FRIEND_TEST_ALL_PREFIXES(ParallelAuthenticatorTest, ReadNoLocalaccount); |
302 DISALLOW_COPY_AND_ASSIGN(ParallelAuthenticator); | 286 DISALLOW_COPY_AND_ASSIGN(ParallelAuthenticator); |
303 }; | 287 }; |
304 | 288 |
305 } // namespace chromeos | 289 } // namespace chromeos |
306 | 290 |
307 #endif // CHROME_BROWSER_CHROMEOS_LOGIN_PARALLEL_AUTHENTICATOR_H_ | 291 #endif // CHROME_BROWSER_CHROMEOS_LOGIN_PARALLEL_AUTHENTICATOR_H_ |
OLD | NEW |