use std::{fmt::Debug, sync::Arc};
use oxinat_derive::uri_builder_alias;
use crate::{UriBuilder, Version};
uri_builder_alias!(AuthenticateUriBuilder);
ImplAuthenticateUriBuilder! {
(String),
}
#[derive(Clone, Debug, Default, UriBuilder)]
#[match_path(path = "{parent}")]
pub struct AuthUriLegacyBuilder<Parent>
where
Parent: AuthenticateUriBuilder
{
#[parent]
parent: Option<Arc<Parent>>
}
#[derive(Clone, Debug, Default, UriBuilder)]
#[match_path(path = "{parent}/services")]
pub struct ServicesUriBuilder<'a> {
#[parent]
parent: Option<&'a AuthUriLegacyBuilder<String>>
}
#[derive(Clone, Debug, Default, UriBuilder)]
#[match_path(path = "{parent}/tokens")]
pub struct TokensUriBuilder<'a> {
#[parent]
parent: Option<&'a ServicesUriBuilder<'a>>
}
#[derive(Clone, Debug, Default, UriBuilder)]
#[match_path(path = "{parent}/issue")]
#[match_path(path = "{parent}/issue/user/{username}")]
pub struct IssueUserUriBuilder<'a> {
#[param]
username: Option<String>,
#[parent]
parent: Option<&'a TokensUriBuilder<'a>>
}
#[derive(Clone, Debug, Default, UriBuilder)]
#[match_path(path = "{parent}/validate/{token}/{secret}")]
pub struct ValidateUserUriBuilder<'a> {
#[param]
secret: Option<String>,
#[param]
token: Option<String>,
#[parent]
parent: Option<&'a TokensUriBuilder<'a>>
}
#[derive(Clone, Debug, Default, UriBuilder)]
#[match_path(path = "{parent}/invalidate/{token}/{secret}")]
pub struct InValidateUserUriBuilder<'a> {
#[param]
secret: Option<String>,
#[param]
token: Option<String>,
#[parent]
parent: Option<&'a TokensUriBuilder<'a>>
}
impl TokensUriBuilder<'_> {
pub fn invalidate(&self) -> InValidateUserUriBuilder {
InValidateUserUriBuilder::from_parent(self)
}
pub fn issue(&self) -> IssueUserUriBuilder {
IssueUserUriBuilder::from_parent(self)
}
pub fn validate(&self) -> ValidateUserUriBuilder {
ValidateUserUriBuilder::from_parent(self)
}
}
impl ServicesUriBuilder<'_> {
pub fn build_auth(&self) -> crate::BuildResult {
self.build_join("auth")
}
pub fn tokens(&self) -> TokensUriBuilder {
TokensUriBuilder::from_parent(self)
}
}
impl AuthUriLegacyBuilder<String> {
pub fn build_jsessionid(&self) -> crate::BuildResult {
self.build_join("JSESSIONID")
}
pub fn services(&self) -> ServicesUriBuilder {
ServicesUriBuilder::from_parent(&Arc::new(self))
}
}
pub trait AuthUriLegacy: Version {
fn auth_legacy(&self) -> AuthUriLegacyBuilder<String> {
AuthUriLegacyBuilder::from_parent(self.data_uri().into())
}
}