• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_H_
6 #define CHROME_BROWSER_CHROMEOS_LOGIN_USERS_SUPERVISED_USER_MANAGER_H_
7 
8 #include <string>
9 
10 #include "base/basictypes.h"
11 #include "base/callback.h"
12 #include "base/strings/string16.h"
13 #include "base/values.h"
14 #include "chrome/browser/profiles/profile.h"
15 
16 class PrefRegistrySimple;
17 
18 namespace user_manager {
19 class User;
20 }
21 
22 namespace chromeos {
23 
24 class SupervisedUserAuthentication;
25 
26 // Keys in dictionary with supervised password information.
27 extern const char kSchemaVersion[];
28 extern const char kPasswordRevision[];
29 extern const char kSalt[];
30 extern const char kRequirePasswordUpdate[];
31 extern const char kHasIncompleteKey[];
32 extern const int kMinPasswordRevision;
33 
34 // Values for these keys are not stored in local state.
35 extern const char kEncryptedPassword[];
36 extern const char kPasswordSignature[];
37 extern const char kPasswordEncryptionKey[];
38 extern const char kPasswordSignatureKey[];
39 
40 extern const char kPasswordUpdateFile[];
41 
42 // Base class for SupervisedUserManagerImpl - provides a mechanism for getting
43 // and setting specific values for supervised users, as well as additional
44 // lookup methods that make sense only for supervised users.
45 class SupervisedUserManager {
46  public:
47   typedef base::Callback<void(const std::string& /* token */)>
48       LoadTokenCallback;
49 
50   // Registers user manager preferences.
51   static void RegisterPrefs(PrefRegistrySimple* registry);
52 
SupervisedUserManager()53   SupervisedUserManager() {}
~SupervisedUserManager()54   virtual ~SupervisedUserManager() {}
55 
56   // Checks if given user have supervised users on this device.
57 
58   virtual bool HasSupervisedUsers(const std::string& manager_id) const = 0;
59 
60   // Creates supervised user with given |display_name| and |local_user_id|
61   // and persists that to user list. Also links this user identified by
62   // |sync_user_id| to manager with a |manager_id|.
63   // Returns created user, or existing user if there already
64   // was a supervised user with such display name.
65   // TODO(antrim): Refactor into a single struct to have only 1 getter.
66   virtual const user_manager::User* CreateUserRecord(
67       const std::string& manager_id,
68       const std::string& local_user_id,
69       const std::string& sync_user_id,
70       const base::string16& display_name) = 0;
71 
72   // Generates unique user ID for supervised user.
73   virtual std::string GenerateUserId() = 0;
74 
75   // Returns the supervised user with the given |display_name| if found in
76   // the persistent list. Returns |NULL| otherwise.
77   virtual const user_manager::User* FindByDisplayName(
78       const base::string16& display_name) const = 0;
79 
80   // Returns the supervised user with the given |sync_id| if found in
81   // the persistent list. Returns |NULL| otherwise.
82   virtual const user_manager::User* FindBySyncId(
83       const std::string& sync_id) const = 0;
84 
85   // Returns sync_user_id for supervised user with |user_id| or empty string if
86   // such user is not found or it doesn't have user_id defined.
87   virtual std::string GetUserSyncId(const std::string& user_id) const = 0;
88 
89   // Returns the display name for manager of user |user_id| if it is known
90   // (was previously set by a |SaveUserDisplayName| call).
91   // Otherwise, returns a manager id.
92   virtual base::string16 GetManagerDisplayName(
93       const std::string& user_id) const = 0;
94 
95   // Returns the user id for manager of user |user_id| if it is known (user is
96   // actually a managed user).
97   // Otherwise, returns an empty string.
98   virtual std::string GetManagerUserId(const std::string& user_id) const = 0;
99 
100   // Returns the display email for manager of user |user_id| if it is known
101   // (user is actually a managed user).
102   // Otherwise, returns an empty string.
103   virtual std::string GetManagerDisplayEmail(const std::string& user_id)
104       const = 0;
105 
106   // Create a record about starting supervised user creation transaction.
107   virtual void StartCreationTransaction(const base::string16& display_name) = 0;
108 
109   // Add user id to supervised user creation transaction record.
110   virtual void SetCreationTransactionUserId(const std::string& user_id) = 0;
111 
112   // Remove supervised user creation transaction record.
113   virtual void CommitCreationTransaction() = 0;
114 
115   // Return object that handles specifics of supervised user authentication.
116   virtual SupervisedUserAuthentication* GetAuthentication() = 0;
117 
118   // Fill |result| with public password-specific data for |user_id| from Local
119   // State.
120   virtual void GetPasswordInformation(const std::string& user_id,
121                                       base::DictionaryValue* result) = 0;
122 
123   // Stores public password-specific data from |password_info| for |user_id| in
124   // Local State.
125   virtual void SetPasswordInformation(
126       const std::string& user_id,
127       const base::DictionaryValue* password_info) = 0;
128 
129   // Loads a sync oauth token in background, and passes it to callback.
130   virtual void LoadSupervisedUserToken(Profile* profile,
131                                        const LoadTokenCallback& callback) = 0;
132 
133   // Configures sync service with oauth token.
134   virtual void ConfigureSyncWithToken(Profile* profile,
135                                       const std::string& token) = 0;
136 
137  private:
138   DISALLOW_COPY_AND_ASSIGN(SupervisedUserManager);
139 };
140 
141 }  // namespace chromeos
142 
143 #endif  // CHROME_BROWSER_CHROMEOS_LOGIN_USERS_SUPERVISED_USER_MANAGER_H_
144