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 CHROME_BROWSER_CHROMEOS_LOGIN_USERS_SUPERVISED_USER_MANAGER_IMPL_H_
6#define CHROME_BROWSER_CHROMEOS_LOGIN_USERS_SUPERVISED_USER_MANAGER_IMPL_H_
7
8#include <vector>
9
10#include "base/basictypes.h"
11#include "base/compiler_specific.h"
12#include "chrome/browser/chromeos/login/supervised/supervised_user_authentication.h"
13#include "chrome/browser/chromeos/login/users/supervised_user_manager.h"
14
15namespace chromeos {
16
17class ChromeUserManagerImpl;
18class CrosSettings;
19
20// Implementation of the UserManager.
21class SupervisedUserManagerImpl
22    : public SupervisedUserManager {
23 public:
24  virtual ~SupervisedUserManagerImpl();
25
26  virtual bool HasSupervisedUsers(const std::string& manager_id) const OVERRIDE;
27  virtual const user_manager::User* CreateUserRecord(
28      const std::string& manager_id,
29      const std::string& local_user_id,
30      const std::string& sync_user_id,
31      const base::string16& display_name) OVERRIDE;
32  virtual std::string GenerateUserId() OVERRIDE;
33  virtual const user_manager::User* FindByDisplayName(
34      const base::string16& display_name) const OVERRIDE;
35  virtual const user_manager::User* FindBySyncId(
36      const std::string& sync_id) const OVERRIDE;
37  virtual std::string GetUserSyncId(const std::string& user_id) const OVERRIDE;
38  virtual base::string16 GetManagerDisplayName(const std::string& user_id) const
39      OVERRIDE;
40  virtual std::string GetManagerUserId(const std::string& user_id) const
41      OVERRIDE;
42  virtual std::string GetManagerDisplayEmail(const std::string& user_id) const
43      OVERRIDE;
44  virtual void StartCreationTransaction(const base::string16& display_name)
45      OVERRIDE;
46  virtual void SetCreationTransactionUserId(const std::string& user_id)
47      OVERRIDE;
48  virtual void CommitCreationTransaction() OVERRIDE;
49  virtual SupervisedUserAuthentication* GetAuthentication() OVERRIDE;
50  virtual void GetPasswordInformation(const std::string& user_id,
51                                      base::DictionaryValue* result) OVERRIDE;
52  virtual void SetPasswordInformation(
53      const std::string& user_id,
54      const base::DictionaryValue* password_info) OVERRIDE;
55  virtual void LoadSupervisedUserToken(
56      Profile * profile,
57      const LoadTokenCallback& callback) OVERRIDE;
58  virtual void ConfigureSyncWithToken(
59      Profile* profile,
60      const std::string& token) OVERRIDE;
61
62 private:
63  friend class ChromeUserManagerImpl;
64  friend class UserManager;
65
66  explicit SupervisedUserManagerImpl(ChromeUserManagerImpl* owner);
67
68  // Returns true if there is non-committed user creation transaction.
69  bool HasFailedUserCreationTransaction();
70
71  // Attempts to clean up data that could be left from failed user creation.
72  void RollbackUserCreationTransaction();
73
74  void RemoveNonCryptohomeData(const std::string& user_id);
75
76  bool CheckForFirstRun(const std::string& user_id);
77
78  // Update name if this user is manager of some managed users.
79  void UpdateManagerName(const std::string& manager_id,
80                         const base::string16& new_display_name);
81
82  bool GetUserStringValue(const std::string& user_id,
83                          const char* key,
84                          std::string* out_value) const;
85
86  void SetUserStringValue(const std::string& user_id,
87                          const char* key,
88                          const std::string& value);
89
90  bool GetUserIntegerValue(const std::string& user_id,
91                           const char* key,
92                           int* out_value) const;
93
94  void SetUserIntegerValue(const std::string& user_id,
95                           const char* key,
96                           const int value);
97
98  bool GetUserBooleanValue(const std::string& user_id,
99                           const char* key,
100                           bool* out_value) const;
101
102  void SetUserBooleanValue(const std::string& user_id,
103                           const char* key,
104                           const bool value);
105
106  void CleanPref(const std::string& user_id,
107                 const char* key);
108
109  ChromeUserManagerImpl* owner_;
110
111  // Interface to the signed settings store.
112  CrosSettings* cros_settings_;
113
114  scoped_ptr<SupervisedUserAuthentication> authentication_;
115
116  DISALLOW_COPY_AND_ASSIGN(SupervisedUserManagerImpl);
117};
118
119}  // namespace chromeos
120
121#endif  // CHROME_BROWSER_CHROMEOS_LOGIN_USERS_SUPERVISED_USER_MANAGER_IMPL_H_
122