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