| // Copyright 2016 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 COMPONENTS_OS_CRYPT_KWALLET_DBUS_H_ |
| #define COMPONENTS_OS_CRYPT_KWALLET_DBUS_H_ |
| |
| #include <string> |
| #include <vector> |
| |
| #include "base/component_export.h" |
| #include "base/macros.h" |
| #include "base/memory/ref_counted.h" |
| #include "base/nix/xdg_util.h" |
| |
| namespace dbus { |
| class Bus; |
| class ObjectProxy; |
| } |
| |
| // Contains wrappers for dbus invocations related to KWallet. |
| class COMPONENT_EXPORT(OS_CRYPT) KWalletDBus { |
| public: |
| // Error code for dbus calls to kwallet. |
| enum Error { SUCCESS = 0, CANNOT_CONTACT, CANNOT_READ }; |
| |
| explicit KWalletDBus(base::nix::DesktopEnvironment desktop_env); |
| virtual ~KWalletDBus(); |
| |
| // Set the bus that we will use. Required before any other operation. |
| // The owner of KWalletDBus is responsible for killing the bus. |
| virtual void SetSessionBus(scoped_refptr<dbus::Bus> session_bus); |
| |
| // Expose the bus so that shutdown can be scheduled asynchronously. |
| virtual dbus::Bus* GetSessionBus(); |
| |
| // Use KLauncher to start the KWallet service. Returns true if successful. |
| virtual bool StartKWalletd() WARN_UNUSED_RESULT; |
| |
| // The functions below are wrappers for calling the eponymous KWallet dbus |
| // methods. They take pointers to locations where the return values will be |
| // written. More KWallet documentation at |
| // https://api.kde.org/4.12-api/kdelibs-apidocs/kdeui/html/classKWallet_1_1Wallet.html |
| |
| // Determine if the KDE wallet is enabled. |
| virtual Error IsEnabled(bool* enabled) WARN_UNUSED_RESULT; |
| |
| // Get the name of the wallet used to store network passwords. |
| virtual Error NetworkWallet(std::string* wallet_name_ptr) WARN_UNUSED_RESULT; |
| |
| // Open the |wallet_name| wallet for use. |
| virtual Error Open(const std::string& wallet_name, |
| const std::string& app_name, |
| int* handle_ptr) WARN_UNUSED_RESULT; |
| |
| // Determine if the current folder has they entry key. |
| virtual Error HasEntry(int wallet_handle, |
| const std::string& folder_name, |
| const std::string& signon_realm, |
| const std::string& app_name, |
| bool* has_entry_ptr) WARN_UNUSED_RESULT; |
| |
| // Read the entry key from the current folder. |
| virtual Error ReadEntry(int wallet_handle, |
| const std::string& folder_name, |
| const std::string& signon_realm, |
| const std::string& app_name, |
| std::vector<uint8_t>* bytes_ptr) WARN_UNUSED_RESULT; |
| |
| // Return the list of keys of all entries in this folder. |
| virtual Error EntryList(int wallet_handle, |
| const std::string& folder_name, |
| const std::string& app_name, |
| std::vector<std::string>* entry_list_ptr) |
| WARN_UNUSED_RESULT; |
| |
| // Remove the entry key from the current folder. |
| // |*return_code_ptr| is 0 on success. |
| virtual Error RemoveEntry(int wallet_handle, |
| const std::string& folder_name, |
| const std::string& signon_realm, |
| const std::string& app_name, |
| int* return_code_ptr) WARN_UNUSED_RESULT; |
| |
| // Write a binary entry to the current folder. |
| // |*return_code_ptr| is 0 on success. |
| virtual Error WriteEntry(int wallet_handle, |
| const std::string& folder_name, |
| const std::string& signon_realm, |
| const std::string& app_name, |
| const uint8_t* data, |
| size_t length, |
| int* return_code_ptr) WARN_UNUSED_RESULT; |
| |
| // Determine if the folder |folder_name| exists in the wallet. |
| virtual Error HasFolder(int handle, |
| const std::string& folder_name, |
| const std::string& app_name, |
| bool* has_folder_ptr) WARN_UNUSED_RESULT; |
| |
| // Create the folder |folder_name|. |
| virtual Error CreateFolder(int handle, |
| const std::string& folder_name, |
| const std::string& app_name, |
| bool* success_ptr) WARN_UNUSED_RESULT; |
| |
| // Write a password to the current folder. |
| virtual Error WritePassword(int handle, |
| const std::string& folder_name, |
| const std::string& key, |
| const std::string& password, |
| const std::string& app_name, |
| bool* write_success_ptr) WARN_UNUSED_RESULT; |
| |
| // Read the password for |key| from |folder_name|. |
| // Clear |password_ptr| if no such password exists. |
| virtual Error ReadPassword(int handle, |
| const std::string& folder_name, |
| const std::string& key, |
| const std::string& app_name, |
| std::string* password_ptr) WARN_UNUSED_RESULT; |
| |
| // Close the wallet. The wallet will only be closed if it is open but not in |
| // use (rare), or if it is forced closed. |
| virtual Error Close(int handle, |
| bool force, |
| const std::string& app_name, |
| bool* success_ptr) WARN_UNUSED_RESULT; |
| |
| private: |
| // DBus handle for communication with klauncher and kwalletd. |
| scoped_refptr<dbus::Bus> session_bus_; |
| // Object proxy for kwalletd. We do not own this. |
| dbus::ObjectProxy* kwallet_proxy_; |
| |
| // KWallet DBus name. |
| std::string dbus_service_name_; |
| // DBus path to KWallet interfaces. |
| std::string dbus_path_; |
| // The name used for logging and by klauncher when starting KWallet. |
| std::string kwalletd_name_; |
| |
| DISALLOW_COPY_AND_ASSIGN(KWalletDBus); |
| }; |
| |
| #endif // COMPONENTS_OS_CRYPT_KWALLET_DBUS_H_ |