Home | History | Annotate | Download | only in cros
      1 // Copyright (c) 2011 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_CROS_LOGIN_LIBRARY_H_
      6 #define CHROME_BROWSER_CHROMEOS_CROS_LOGIN_LIBRARY_H_
      7 #pragma once
      8 
      9 #include <string>
     10 
     11 #include "base/memory/singleton.h"
     12 #include "third_party/cros/chromeos_login.h"
     13 
     14 namespace chromeos {
     15 
     16 // This interface defines the interaction with the ChromeOS login library APIs.
     17 class LoginLibrary {
     18  public:
     19   class Delegate {
     20    public:
     21     virtual void OnComplete(bool value) = 0;
     22   };
     23 
     24   virtual ~LoginLibrary() {}
     25   // Requests that the Upstart signal login-prompt-ready be emitted.
     26   virtual bool EmitLoginPromptReady() = 0;
     27 
     28   // Check whether or not |email| is present on the whitelist.
     29   // If so, we return true and store the signature passed when |email| was
     30   // whitelisted in |OUT_signature|.
     31   // If not, we return false and don't touch the output parameter.
     32   virtual bool CheckWhitelist(const std::string& email,
     33                               std::vector<uint8>* OUT_signature) = 0;
     34 
     35   virtual void RequestRetrievePolicy(RetrievePolicyCallback callback,
     36                                      void* delegate_string) = 0;
     37 
     38   // Start fetch the value associated with |name|, if its present.
     39   // When fetching is done/failed, |callback| is called to pass back the fetch
     40   // results. If fetching is successful, |callback| will be called with
     41   // true for |success| and property's name, value and signature filled in
     42   // Property struct. Otherwise, |success| would be false.
     43   virtual void RequestRetrieveProperty(const std::string& name,
     44                                        RetrievePropertyCallback callback,
     45                                        void* user_data) = 0;
     46 
     47   virtual void RequestStorePolicy(const std::string& policy,
     48                                   StorePolicyCallback callback,
     49                                   void* delegate_bool) = 0;
     50 
     51   // Attempts to issue a signed async request to store |name|=|value|.
     52   // |signature| must by a SHA1 with RSA encryption signature over the string
     53   // "name=value" with the owner's private key.
     54   //  Returns true if the attempt was successfully started.
     55   //  callback->Run() will be called when the operation is complete.
     56   virtual bool StorePropertyAsync(const std::string& name,
     57                                   const std::string& value,
     58                                   const std::vector<uint8>& signature,
     59                                   Delegate* callback) = 0;
     60 
     61   // Attempts to issue a signed async request to whitelist |email|.
     62   // |signature| must by a SHA1 with RSA encryption signature over |email|
     63   // with the owner's private key.
     64   //  Returns true if the attempt was successfully started.
     65   //  callback->Run() will be called when the operation is complete.
     66   virtual bool WhitelistAsync(const std::string& email,
     67                               const std::vector<uint8>& signature,
     68                               Delegate* callback) = 0;
     69 
     70   // Attempts to issue a signed async request to remove |email| from the
     71   // whitelist of users allowed to log in to this machine.
     72   // |signature| must by a SHA1 with RSA encryption signature over |email|
     73   // with the owner's private key.
     74   //  Returns true if the attempt was successfully started.
     75   //  callback->Run() will be called when the operation is complete.
     76   virtual bool UnwhitelistAsync(const std::string& email,
     77                                 const std::vector<uint8>& signature,
     78                                 Delegate* callback) = 0;
     79 
     80   // DEPRECATED.  We have re-implemented owner-signed settings by fetching
     81   // and caching a policy, and then pulling values from there.  This is all
     82   // handled at the SignedSettings layer, so anyone using this stuff directly
     83   // should not be doing so anymore.
     84   //
     85   // Retrieves the user white list. Note the call is for display purpose only.
     86   // To determine if an email is white listed, you MUST use CheckWhitelist.
     87   //  Returns true if the request is successfully dispatched.
     88   virtual bool EnumerateWhitelisted(std::vector<std::string>* whitelisted) = 0;
     89 
     90   // Tells the session manager to start a logged-in session for the user
     91   // |user_email|.  |unique_id| is meant to be used when we have a non-human-
     92   // readable unique identifier by which we distinguish users (to deal with
     93   // potential email address changes over time).
     94   virtual bool StartSession(const std::string& user_email,
     95                             const std::string& unique_id /* unused */) = 0;
     96 
     97   // Tells the session manager to terminate the current logged-in session.
     98   // In the event that we ever support multiple simultaneous user sessions,
     99   // This will tell the session manager to terminate the session for the user
    100   // indicated by |unique_id|.
    101   virtual bool StopSession(const std::string& unique_id /* unused */) = 0;
    102 
    103   // Restarts the Enterprise Daemon.
    104   virtual bool RestartEntd() = 0;
    105 
    106   // Restarts the job with specified command line string.
    107   virtual bool RestartJob(int pid, const std::string& command_line) = 0;
    108 
    109   // Factory function, creates a new instance and returns ownership.
    110   // For normal usage, access the singleton via CrosLibrary::Get().
    111   static LoginLibrary* GetImpl(bool stub);
    112 };
    113 
    114 }  // namespace chromeos
    115 
    116 #endif  // CHROME_BROWSER_CHROMEOS_CROS_LOGIN_LIBRARY_H_
    117