Home | History | Annotate | Download | only in auth
      1 // Copyright 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CHROMEOS_LOGIN_AUTH_EXTENDED_AUTHENTICATOR_IMPL_H_
      6 #define CHROMEOS_LOGIN_AUTH_EXTENDED_AUTHENTICATOR_IMPL_H_
      7 
      8 #include <string>
      9 
     10 #include "base/basictypes.h"
     11 #include "base/callback.h"
     12 #include "base/compiler_specific.h"
     13 #include "base/memory/scoped_ptr.h"
     14 #include "chromeos/chromeos_export.h"
     15 #include "chromeos/login/auth/extended_authenticator.h"
     16 #include "third_party/cros_system_api/dbus/service_constants.h"
     17 
     18 namespace chromeos {
     19 
     20 class AuthStatusConsumer;
     21 class UserContext;
     22 
     23 // Implements ExtendedAuthenticator.
     24 class CHROMEOS_EXPORT ExtendedAuthenticatorImpl : public ExtendedAuthenticator {
     25  public:
     26   explicit ExtendedAuthenticatorImpl(NewAuthStatusConsumer* consumer);
     27   explicit ExtendedAuthenticatorImpl(AuthStatusConsumer* consumer);
     28 
     29   // ExtendedAuthenticator:
     30   virtual void SetConsumer(AuthStatusConsumer* consumer) override;
     31   virtual void AuthenticateToMount(
     32       const UserContext& context,
     33       const ResultCallback& success_callback) override;
     34   virtual void AuthenticateToCheck(
     35       const UserContext& context,
     36       const base::Closure& success_callback) override;
     37   virtual void CreateMount(const std::string& user_id,
     38                            const std::vector<cryptohome::KeyDefinition>& keys,
     39                            const ResultCallback& success_callback) override;
     40   virtual void AddKey(const UserContext& context,
     41                       const cryptohome::KeyDefinition& key,
     42                       bool replace_existing,
     43                       const base::Closure& success_callback) override;
     44   virtual void UpdateKeyAuthorized(
     45       const UserContext& context,
     46       const cryptohome::KeyDefinition& key,
     47       const std::string& signature,
     48       const base::Closure& success_callback) override;
     49   virtual void RemoveKey(const UserContext& context,
     50                          const std::string& key_to_remove,
     51                          const base::Closure& success_callback) override;
     52   virtual void TransformKeyIfNeeded(const UserContext& user_context,
     53                                     const ContextCallback& callback) override;
     54 
     55  private:
     56   virtual ~ExtendedAuthenticatorImpl();
     57 
     58   // Callback for system salt getter.
     59   void OnSaltObtained(const std::string& system_salt);
     60 
     61   // Performs actual operation with fully configured |context|.
     62   void DoAuthenticateToMount(const ResultCallback& success_callback,
     63                              const UserContext& context);
     64   void DoAuthenticateToCheck(const base::Closure& success_callback,
     65                              const UserContext& context);
     66   void DoAddKey(const cryptohome::KeyDefinition& key,
     67                 bool replace_existing,
     68                 const base::Closure& success_callback,
     69                 const UserContext& context);
     70   void DoUpdateKeyAuthorized(const cryptohome::KeyDefinition& key,
     71                              const std::string& signature,
     72                              const base::Closure& success_callback,
     73                              const UserContext& context);
     74   void DoRemoveKey(const std::string& key_to_remove,
     75                    const base::Closure& success_callback,
     76                    const UserContext& context);
     77 
     78   // Inner operation callbacks.
     79   void OnMountComplete(const std::string& time_marker,
     80                        const UserContext& context,
     81                        const ResultCallback& success_callback,
     82                        bool success,
     83                        cryptohome::MountError return_code,
     84                        const std::string& mount_hash);
     85   void OnOperationComplete(const std::string& time_marker,
     86                            const UserContext& context,
     87                            const base::Closure& success_callback,
     88                            bool success,
     89                            cryptohome::MountError return_code);
     90 
     91   bool salt_obtained_;
     92   std::string system_salt_;
     93   std::vector<base::Closure> system_salt_callbacks_;
     94 
     95   NewAuthStatusConsumer* consumer_;
     96   AuthStatusConsumer* old_consumer_;
     97 
     98   DISALLOW_COPY_AND_ASSIGN(ExtendedAuthenticatorImpl);
     99 };
    100 
    101 }  // namespace chromeos
    102 
    103 #endif  // CHROMEOS_LOGIN_AUTH_EXTENDED_AUTHENTICATOR_IMPL_H_
    104