Add email endpoints

master
Tait Hoyem 1 year ago
parent d81ee25329
commit 4454ce0fc8

@ -23,10 +23,15 @@ use crate::{
RegionListResponse,
EmailUsageResponse,
EmailDomainListResponse,
EmailDomainAddResponse,
EmailDomainRemoveResponse,
EmailUserListResponse,
EmailUserAddResponse,
EmailUserRemoveResponse,
EmailUserSetPasswordResponse,
EmailAliasListResponse,
EmailAliasAddResponse,
EmailAliasRemoveResponse,
MonitorCheckListResponse,
MonitorCheckTypesResponse,
MonitorContactListResponse,
@ -82,6 +87,10 @@ pub enum ZoneSubArgs {
pub enum EmailDomainSubArgs {
/// `email domain list`
List(EmailDomainListRequest),
/// `email domain add`
Add(EmailDomainAddRequest),
/// `email domain remove`
Remove(EmailDomainRemoveRequest),
}
#[derive(Serialize, Deserialize, Debug, clap::Subcommand)]
@ -97,6 +106,17 @@ pub enum EmailUserSubArgs {
SetPassword(EmailUserSetPasswordRequest),
}
#[derive(Serialize, Deserialize, Debug, clap::Subcommand)]
/// All possible `email alias` subcommands.
pub enum EmailAliasSubArgs {
/// `email alias list`
List(EmailAliasListRequest),
/// `email alias add`
Add(EmailAliasAddRequest),
/// `email alias remove`
Remove(EmailAliasRemoveRequest),
}
#[derive(Serialize, Deserialize, Debug, clap::Subcommand)]
/// All possible `email` subcommands.
pub enum EmailSubArgs {
@ -108,6 +128,9 @@ pub enum EmailSubArgs {
#[clap(subcommand)]
/// `email user`
User(EmailUserSubArgs),
#[clap(subcommand)]
/// `email alias`
Alias(EmailAliasSubArgs)
}
#[derive(Serialize, Deserialize, Debug, clap::Subcommand)]
@ -314,10 +337,15 @@ impl Args {
Self::Region(RegionSubArgs::List(reg_list)) => print_req(reg_list)?,
Self::Email(EmailSubArgs::Usage(email_usage)) => print_req(email_usage)?,
Self::Email(EmailSubArgs::Domain(EmailDomainSubArgs::List(email_domain_list))) => print_req(email_domain_list)?,
Self::Email(EmailSubArgs::Domain(EmailDomainSubArgs::Add(email_domain_add_req))) => print_req(email_domain_add_req)?,
Self::Email(EmailSubArgs::Domain(EmailDomainSubArgs::Remove(email_domain_rem_req))) => print_req(email_domain_rem_req)?,
Self::Email(EmailSubArgs::User(EmailUserSubArgs::List(email_user_list))) => print_req(email_user_list)?,
Self::Email(EmailSubArgs::User(EmailUserSubArgs::Add(email_add_user_req))) => print_req(email_add_user_req)?,
Self::Email(EmailSubArgs::User(EmailUserSubArgs::Remove(email_del_req))) => print_req(email_del_req)?,
Self::Email(EmailSubArgs::User(EmailUserSubArgs::SetPassword(email_user_set_password))) => print_req(email_user_set_password)?,
Self::Email(EmailSubArgs::Alias(EmailAliasSubArgs::List(email_alias_list))) => print_req(email_alias_list)?,
Self::Email(EmailSubArgs::Alias(EmailAliasSubArgs::Add(email_alias_add))) => print_req(email_alias_add)?,
Self::Email(EmailSubArgs::Alias(EmailAliasSubArgs::Remove(email_alias_rem))) => print_req(email_alias_rem)?,
}
Ok(())
}
@ -541,3 +569,44 @@ pub struct RecordRemoveRequest {
/// The ID of the DNS record to remove. See [`RecordListResponse`]
record_id: i32,
}
#[lunanode_request(response="EmailDomainAddResponse", endpoint="email/domain-add/")]
/// Adds a new domain to Lunanode's email server.
pub struct EmailDomainAddRequest {
/// The domain name you would like to add mail service for.
name: String,
}
#[lunanode_request(response="EmailDomainRemoveResponse", endpoint="email/domain-remove/")]
/// Removes a domain from Lunanode's email service.
pub struct EmailDomainRemoveRequest {
/// The domain id which should be removed. See: [`EmailDomainListRequest`]
domain_id: i32,
}
#[lunanode_request(response="EmailAliasListResponse", endpoint="email/alias-list/")]
/// Show all aliases for a given domain's email.
pub struct EmailAliasListRequest {
/// The domain id for which the email alias records will be fetched. See: [`EmailDomainListRequest`]
domain_id: i32,
}
#[lunanode_request(response="EmailAliasAddResponse", endpoint="email/alias-add/")]
/// Add an email alias or a catch-all address.
pub struct EmailAliasAddRequest {
/// The domain id for which the alias will be set on. See: [`EmailDomainListRequest`]
domain_id: i32,
/// The name of the alias XYZ@example.com (use a blank string here for a catch-all).
name: String,
/// The destination of the alias, which should be an existing address on the system.
target: String,
}
#[lunanode_request(response="EmailAliasRemoveResponse", endpoint="email/alias-remove/")]
/// Remove an email alias.
pub struct EmailAliasRemoveRequest {
/// The domain id for which the email alias will be deletes.
domain_id: i32,
/// The alias id to delete.
alias_id: i32,
}

@ -869,3 +869,45 @@ pub struct RecordAddResponse {}
/// The result of remove a DNS record.
/// See also: [`crate::requests::RecordRemoveRequest`]
pub struct RecordRemoveResponse {}
#[lunanode_response]
/// The result of remove a DNS record.
/// See also: [`crate::requests::RecordRemoveRequest`]
pub struct EmailDomainAddResponse {}
#[lunanode_response]
/// The result of remove a DNS record.
/// See also: [`crate::requests::RecordRemoveRequest`]
pub struct EmailDomainRemoveResponse {}
#[serde_as]
#[derive(Serialize, Deserialize, Debug)]
/// A single email alias
pub struct EmailAlias {
#[serde_as(as="DisplayFromStr")]
/// email alias id for a given domain; this needs to be used in conjunction with a domain ID to do anything useful.
id: i32,
/// The source address of the email (blank for catch-all).
source: String,
/// Where the final address is (this may be external).
destination: String,
}
#[lunanode_response]
/// The result of listing email aliases.
/// See also: [`crate::requests::EmailAliasListRequest`]
pub struct EmailAliasListResponse {
#[serde(flatten)]
aliases: std::collections::HashMap<String, EmailAlias>,
}
#[lunanode_response]
/// The result of adding a new email alias.
/// See also: [`crate::requests::EmailAliasListRequest`]
pub struct EmailAliasAddResponse {}
#[lunanode_response]
/// The result removing an email alias.
/// See also: [`crate::requests::EmailAliasListRequest`]
pub struct EmailAliasRemoveResponse {}

Loading…
Cancel
Save