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 53 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