mirror of
https://github.com/chatmail/core.git
synced 2026-05-08 17:36:29 +03:00
api: jsonrpc: add is_open(account_id: u32), add_closed_account(), change_passphrase(account_id: u32, passphrase: String) and open(account_id: u32, passphrase: String)
This commit is contained in:
@@ -184,10 +184,20 @@ impl CommandApi {
|
|||||||
// Account Management
|
// Account Management
|
||||||
// ---------------------------------------------
|
// ---------------------------------------------
|
||||||
|
|
||||||
|
/// Adds a new account.
|
||||||
async fn add_account(&self) -> Result<u32> {
|
async fn add_account(&self) -> Result<u32> {
|
||||||
self.accounts.write().await.add_account().await
|
self.accounts.write().await.add_account().await
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Adds a new closed/encrypted account.
|
||||||
|
///
|
||||||
|
/// To use it it must be opened first with `open`.
|
||||||
|
/// The first call to `open` after the creation will set the passphrase.
|
||||||
|
/// It can later be changed with `change_passphrase`.
|
||||||
|
async fn add_closed_account(&self) -> Result<u32> {
|
||||||
|
self.accounts.write().await.add_closed_account().await
|
||||||
|
}
|
||||||
|
|
||||||
/// Imports/migrated an existing account from a database path into this account manager.
|
/// Imports/migrated an existing account from a database path into this account manager.
|
||||||
/// Returns the ID of new account.
|
/// Returns the ID of new account.
|
||||||
async fn migrate_account(&self, path_to_db: String) -> Result<u32> {
|
async fn migrate_account(&self, path_to_db: String) -> Result<u32> {
|
||||||
@@ -337,6 +347,36 @@ impl CommandApi {
|
|||||||
ctx.is_configured().await
|
ctx.is_configured().await
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Checks if the database of the context is open (encrypted accounts are closed unless opened with their passphrase).
|
||||||
|
///
|
||||||
|
/// Closed accounts need to be opened with `open(account_id: u32, passphrase: String)`
|
||||||
|
async fn is_open(&self, account_id: u32) -> Result<bool> {
|
||||||
|
let ctx = self.get_context(account_id).await?;
|
||||||
|
Ok(ctx.is_open().await)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Changes the passphrase on the open database.
|
||||||
|
///
|
||||||
|
/// Existing database must already be encrypted and the passphrase cannot be empty.
|
||||||
|
///
|
||||||
|
/// It is impossible to encrypt unencrypted database with this method and vice versa.
|
||||||
|
async fn change_passphrase(&self, account_id: u32, passphrase: String) -> Result<()> {
|
||||||
|
let ctx = self.get_context(account_id).await?;
|
||||||
|
ctx.change_passphrase(passphrase).await
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Opens the database with the given passphrase.
|
||||||
|
///
|
||||||
|
/// This can only be used on closed context, such as created by `add_closed_account`.
|
||||||
|
/// If the database is new, this operation sets the database passphrase.
|
||||||
|
/// For existing databases the passphrase should be the one used to encrypt the database the first time.
|
||||||
|
///
|
||||||
|
/// Returns true if passphrase is correct, false is passphrase is not correct. Fails on other errors.
|
||||||
|
async fn open(&self, account_id: u32, passphrase: String) -> Result<bool> {
|
||||||
|
let ctx = self.get_context(account_id).await?;
|
||||||
|
ctx.open(passphrase).await
|
||||||
|
}
|
||||||
|
|
||||||
/// Get system info for an account.
|
/// Get system info for an account.
|
||||||
async fn get_info(&self, account_id: u32) -> Result<BTreeMap<&'static str, String>> {
|
async fn get_info(&self, account_id: u32) -> Result<BTreeMap<&'static str, String>> {
|
||||||
let ctx = self.get_context(account_id).await?;
|
let ctx = self.get_context(account_id).await?;
|
||||||
|
|||||||
Reference in New Issue
Block a user