// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_CHROMEOS_CROS_LOGIN_LIBRARY_H_ #define CHROME_BROWSER_CHROMEOS_CROS_LOGIN_LIBRARY_H_ #pragma once #include <string> #include "base/memory/singleton.h" #include "third_party/cros/chromeos_login.h" namespace chromeos { // This interface defines the interaction with the ChromeOS login library APIs. class LoginLibrary { public: class Delegate { public: virtual void OnComplete(bool value) = 0; }; virtual ~LoginLibrary() {} // Requests that the Upstart signal login-prompt-ready be emitted. virtual bool EmitLoginPromptReady() = 0; // Check whether or not |email| is present on the whitelist. // If so, we return true and store the signature passed when |email| was // whitelisted in |OUT_signature|. // If not, we return false and don't touch the output parameter. virtual bool CheckWhitelist(const std::string& email, std::vector<uint8>* OUT_signature) = 0; virtual void RequestRetrievePolicy(RetrievePolicyCallback callback, void* delegate_string) = 0; // Start fetch the value associated with |name|, if its present. // When fetching is done/failed, |callback| is called to pass back the fetch // results. If fetching is successful, |callback| will be called with // true for |success| and property's name, value and signature filled in // Property struct. Otherwise, |success| would be false. virtual void RequestRetrieveProperty(const std::string& name, RetrievePropertyCallback callback, void* user_data) = 0; virtual void RequestStorePolicy(const std::string& policy, StorePolicyCallback callback, void* delegate_bool) = 0; // Attempts to issue a signed async request to store |name|=|value|. // |signature| must by a SHA1 with RSA encryption signature over the string // "name=value" with the owner's private key. // Returns true if the attempt was successfully started. // callback->Run() will be called when the operation is complete. virtual bool StorePropertyAsync(const std::string& name, const std::string& value, const std::vector<uint8>& signature, Delegate* callback) = 0; // Attempts to issue a signed async request to whitelist |email|. // |signature| must by a SHA1 with RSA encryption signature over |email| // with the owner's private key. // Returns true if the attempt was successfully started. // callback->Run() will be called when the operation is complete. virtual bool WhitelistAsync(const std::string& email, const std::vector<uint8>& signature, Delegate* callback) = 0; // Attempts to issue a signed async request to remove |email| from the // whitelist of users allowed to log in to this machine. // |signature| must by a SHA1 with RSA encryption signature over |email| // with the owner's private key. // Returns true if the attempt was successfully started. // callback->Run() will be called when the operation is complete. virtual bool UnwhitelistAsync(const std::string& email, const std::vector<uint8>& signature, Delegate* callback) = 0; // DEPRECATED. We have re-implemented owner-signed settings by fetching // and caching a policy, and then pulling values from there. This is all // handled at the SignedSettings layer, so anyone using this stuff directly // should not be doing so anymore. // // Retrieves the user white list. Note the call is for display purpose only. // To determine if an email is white listed, you MUST use CheckWhitelist. // Returns true if the request is successfully dispatched. virtual bool EnumerateWhitelisted(std::vector<std::string>* whitelisted) = 0; // Tells the session manager to start a logged-in session for the user // |user_email|. |unique_id| is meant to be used when we have a non-human- // readable unique identifier by which we distinguish users (to deal with // potential email address changes over time). virtual bool StartSession(const std::string& user_email, const std::string& unique_id /* unused */) = 0; // Tells the session manager to terminate the current logged-in session. // In the event that we ever support multiple simultaneous user sessions, // This will tell the session manager to terminate the session for the user // indicated by |unique_id|. virtual bool StopSession(const std::string& unique_id /* unused */) = 0; // Restarts the Enterprise Daemon. virtual bool RestartEntd() = 0; // Restarts the job with specified command line string. virtual bool RestartJob(int pid, const std::string& command_line) = 0; // Factory function, creates a new instance and returns ownership. // For normal usage, access the singleton via CrosLibrary::Get(). static LoginLibrary* GetImpl(bool stub); }; } // namespace chromeos #endif // CHROME_BROWSER_CHROMEOS_CROS_LOGIN_LIBRARY_H_