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

View file

@ -1,11 +1,13 @@
//! Models the euphoria API at <http://api.euphoria.io/>. //! Models the euphoria API at <http://api.euphoria.io/>.
mod account_cmds;
mod events; mod events;
pub mod packet; pub mod packet;
mod room_cmds; mod room_cmds;
mod session_cmds; mod session_cmds;
mod types; mod types;
pub use account_cmds::*;
pub use events::*; pub use events::*;
pub use packet::Data; pub use packet::Data;
pub use room_cmds::*; pub use room_cmds::*;

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;

View file

@ -84,6 +84,7 @@ macro_rules! commands {
} }
packets! { packets! {
// Events
BounceEvent, BounceEvent,
DisconnectEvent, DisconnectEvent,
HelloEvent, HelloEvent,
@ -98,10 +99,12 @@ packets! {
PmInitiateEvent, PmInitiateEvent,
SendEvent, SendEvent,
SnapshotEvent, SnapshotEvent,
// Session commands
Auth, Auth,
AuthReply, AuthReply,
Ping, Ping,
PingReply, PingReply,
// Chat room commands
GetMessage, GetMessage,
GetMessageReply, GetMessageReply,
Log, Log,
@ -114,17 +117,45 @@ packets! {
SendReply, SendReply,
Who, Who,
WhoReply, WhoReply,
// Account commands
ChangeEmail,
ChangeEmailReply,
ChangeName,
ChangeNameReply,
ChangePassword,
ChangePasswordReply,
Login,
LoginReply,
Logout,
LogoutReply,
RegisterAccount,
RegisterAccountReply,
ResendVerificationEmail,
ResendVerificationEmailReply,
ResetPassword,
ResetPasswordReply,
} }
commands! { commands! {
// Session commands
Auth => AuthReply, Auth => AuthReply,
Ping => PingReply, Ping => PingReply,
// Chat room commands
GetMessage => GetMessageReply, GetMessage => GetMessageReply,
Log => LogReply, Log => LogReply,
Nick => NickReply, Nick => NickReply,
PmInitiate => PmInitiateReply, PmInitiate => PmInitiateReply,
Send => SendReply, Send => SendReply,
Who => WhoReply, Who => WhoReply,
// Account commands
ChangeEmail => ChangeEmailReply,
ChangeName => ChangeNameReply,
ChangePassword => ChangePasswordReply,
Login => LoginReply,
Logout => LogoutReply,
RegisterAccount => RegisterAccountReply,
ResendVerificationEmail => ResendVerificationEmailReply,
ResetPassword => ResetPasswordReply,
} }
#[derive(Debug, Clone)] #[derive(Debug, Clone)]