Add account commands to api

This commit is contained in:
Joscha 2022-08-22 16:45:36 +02:00
parent b2400b60ad
commit b8ac67631e
3 changed files with 200 additions and 0 deletions

167
src/api/account_cmds.rs Normal file
View file

@ -0,0 +1,167 @@
//! Account commands.
//!
//! These commands enable a client to register, associate, and dissociate with
//! an account. An account allows an identity to be shared across browsers and
//! devices, and is a prerequisite for room management
use serde::{Deserialize, Serialize};
use super::Snowflake;
/// Change the primary email address associated with the signed in account.
///
/// The email address may need to be verified before the change is fully applied.
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ChangeEmail {
/// The new primary email address for the account.
pub email: String,
/// The accounts password.
pub password: String,
}
/// Indicate that the primary email address has been changed.
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ChangeEmailReply {
/// True if authentication succeeded and the email was changed.
pub success: bool,
/// If [`Self::success`] was false, the reason for failure.
pub reason: Option<String>,
/// If true, a verification email will be sent out, and the user must verify
/// the address before it becomes their primary address.
pub verification_needed: bool,
}
/// Change the name associated with the signed in account.
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ChangeName {
/// The name to associate with the account.
pub name: String,
}
/// Indicate a successful name change.
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ChangeNameReply {
/// The new name associated with the account.
pub name: String,
}
/// Change the password of the signed in account.
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ChangePassword {
/// The current (and soon-to-be former) password.
pub old_password: String,
/// The new password.
pub new_password: String,
}
/// Return the outcome of changing the password.
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ChangePasswordReply;
/// Attempt to log an anonymous session into an account.
///
/// The command will return an error if the session is already logged in.
///
/// If the login succeeds, the client should expect to receive a
/// [`DisconnectEvent`](super::DisconnectEvent) shortly after. The next
/// connection the client makes will be a logged in session.
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Login {
/// The namespace of a personal identifier.
pub namespace: String,
/// The id of a personal identifier.
pub id: String,
/// The password for unlocking the account.
pub password: String,
}
/// Return whether the session successfully logged into an account.
///
/// If this reply returns success, the client should expect to receive a
/// [`DisconnectEvent`](super::DisconnectEvent) shortly after. The next
/// connection the client makes will be a logged in session.
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LoginReply {
/// True if the session is now logged in.
pub success: bool,
/// If [`Self::success`] was false, the reason why.
pub reason: Option<String>,
/// If [`Self::success`] was true, the id of the account the session logged
/// into.
pub account_id: Option<Snowflake>,
}
/// Log a session out of an account.
///
/// The command will return an error if the session is not logged in.
///
/// If the logout is successful, the client should expect to receive a
/// [`DisconnectEvent`](super::DisconnectEvent) shortly after. The next
/// connection the client makes will be a logged out session.
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Logout;
/// Confirm a logout.
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LogoutReply;
/// Create a new account and logs into it.
///
/// The command will return an error if the session is already logged in.
///
/// If the account registration succeeds, the client should expect to receive a
/// [`DisconnectEvent`](super::DisconnectEvent) shortly after. The next
/// connection the client makes will be a logged in session using the new
/// account.
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RegisterAccount {
/// The namespace of a personal identifier.
pub namespace: String,
/// The id of a personal identifier.
pub id: String,
/// The password for unlocking the account.
pub password: String,
}
/// Return whether the new account was registered.
///
/// If this reply returns success, the client should expect to receive a
/// [`DisconnectEvent`](super::DisconnectEvent) shortly after. The next
/// connection the client makes will be a logged in session, using the newly
/// created account.
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RegisterAccountReply {
/// True if the session is now logged in.
pub success: bool,
/// If [`Self::success`] was false, the reason why.
pub reason: Option<String>,
/// If [`Self::success`] was true, the id of the account the session logged
/// into.
pub account_id: Option<Snowflake>,
}
/// Force a new email to be sent for verifying an accounts primary email
/// address.
///
/// An error will be returned if the account has no unverified email addresses
/// associated with it.
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResendVerificationEmail;
/// Indicate that a verification email has been sent.
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResendVerificationEmailReply;
/// Generate a password reset request.
///
/// An email will be sent to the owner of the given personal identifier, with
/// instructions and a confirmation code for resetting the password.
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResetPassword {
pub namespace: String,
pub id: String,
}
/// Confirm that the password reset is in progress.
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResetPasswordReply;