Return encryption recovery status on API
This commit is contained in:
@@ -9,6 +9,7 @@ use matrix_sdk::authentication::oauth::error::{
|
||||
use matrix_sdk::authentication::oauth::{
|
||||
ClientId, OAuthError, OAuthSession, UrlOrQuery, UserSession,
|
||||
};
|
||||
use matrix_sdk::encryption::recovery::RecoveryState;
|
||||
use matrix_sdk::ruma::serde::Raw;
|
||||
use matrix_sdk::{Client, ClientBuildError, RefreshTokenError};
|
||||
use ractor::ActorRef;
|
||||
@@ -25,6 +26,14 @@ struct StoredSession {
|
||||
client_id: ClientId,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize, Copy, Clone)]
|
||||
pub enum EncryptionRecoveryState {
|
||||
Unknown,
|
||||
Enabled,
|
||||
Disabled,
|
||||
Incomplete,
|
||||
}
|
||||
|
||||
/// Matrix Gateway session errors
|
||||
#[derive(thiserror::Error, Debug)]
|
||||
enum MatrixClientError {
|
||||
@@ -64,6 +73,8 @@ enum MatrixClientError {
|
||||
FinishLogin(matrix_sdk::Error),
|
||||
#[error("Failed to write session file! {0}")]
|
||||
WriteSessionFile(std::io::Error),
|
||||
#[error("Failed to rename device! {0}")]
|
||||
RenameDevice(matrix_sdk::HttpError),
|
||||
}
|
||||
|
||||
#[derive(serde::Deserialize)]
|
||||
@@ -232,6 +243,19 @@ impl MatrixClient {
|
||||
// Persist session tokens
|
||||
self.save_stored_session().await?;
|
||||
|
||||
// Rename created session to give it a more explicit name
|
||||
self.client
|
||||
.rename_device(
|
||||
self.client
|
||||
.session_meta()
|
||||
.context("Missing device ID!")?
|
||||
.device_id
|
||||
.as_ref(),
|
||||
&AppConfig::get().website_origin,
|
||||
)
|
||||
.await
|
||||
.map_err(MatrixClientError::RenameDevice)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -304,4 +328,14 @@ impl MatrixClient {
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Get current encryption keys recovery state
|
||||
pub fn recovery_state(&self) -> EncryptionRecoveryState {
|
||||
match self.client.encryption().recovery().state() {
|
||||
RecoveryState::Unknown => EncryptionRecoveryState::Unknown,
|
||||
RecoveryState::Enabled => EncryptionRecoveryState::Enabled,
|
||||
RecoveryState::Disabled => EncryptionRecoveryState::Disabled,
|
||||
RecoveryState::Incomplete => EncryptionRecoveryState::Incomplete,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user