shield-credentials 0.2.2

Credentials method for Shield.
Documentation
use async_trait::async_trait;
use shield::{
    Action, ActionMethod, Form, MethodSession, Request, Response, ResponseType, SessionAction,
    ShieldError, SignOutAction, erased_action,
};

use crate::provider::CredentialsProvider;

pub struct CredentialsSignOutAction;

#[async_trait]
impl Action<CredentialsProvider, ()> for CredentialsSignOutAction {
    fn id(&self) -> String {
        SignOutAction::id()
    }

    fn name(&self) -> String {
        SignOutAction::name()
    }

    fn openapi_summary(&self) -> &'static str {
        "Sign out with credentials"
    }

    fn openapi_description(&self) -> &'static str {
        "Sign out with credentials."
    }

    fn method(&self) -> ActionMethod {
        ActionMethod::Post
    }

    fn condition(
        &self,
        provider: &CredentialsProvider,
        session: &MethodSession<()>,
    ) -> Result<bool, ShieldError> {
        SignOutAction::condition(provider, session)
    }

    async fn forms(&self, provider: CredentialsProvider) -> Result<Vec<Form>, ShieldError> {
        SignOutAction::forms(provider).await
    }

    async fn call(
        &self,
        _provider: CredentialsProvider,
        _session: &MethodSession<()>,
        _request: Request,
    ) -> Result<Response, ShieldError> {
        Ok(Response::new(ResponseType::Default).session_action(SessionAction::Unauthenticate))
    }
}

erased_action!(CredentialsSignOutAction);