pub struct PasswordManagementPlugin { /* private fields */ }Expand description
Password management plugin for password reset and change functionality
Implementations§
Source§impl PasswordManagementPlugin
impl PasswordManagementPlugin
pub fn new() -> Self
pub fn with_config(config: PasswordManagementConfig) -> Self
pub fn reset_token_expiry_hours(self, val: i64) -> Self
pub fn reset_token_expiry(self, val: Duration) -> Self
pub fn require_current_password(self, val: bool) -> Self
pub fn send_email_notifications(self, val: bool) -> Self
pub fn revoke_sessions_on_password_reset(self, val: bool) -> Self
pub fn send_reset_password(self, val: Arc<dyn SendResetPassword>) -> Self
pub fn on_password_reset(self, val: Arc<OnPasswordResetCallback>) -> Self
pub fn password_hasher(self, val: Arc<dyn PasswordHasher>) -> Self
Source§impl PasswordManagementPlugin
impl PasswordManagementPlugin
Sourcepub fn request_password_reset_callback_endpoint(
token: &str,
query: &ResetPasswordCallbackQuery,
) -> AuthResult<ServerEndpoint<()>>
pub fn request_password_reset_callback_endpoint( token: &str, query: &ResetPasswordCallbackQuery, ) -> AuthResult<ServerEndpoint<()>>
Inspect a reset proof and preserve the intentional redirect API error.
The proof remains available for resetPassword. Logical parameters and
response Location headers remain available to installed hooks and the caller.
§Errors
Returns an error if logical input cannot be serialized.
Sourcepub fn request_password_reset_endpoint(
body: &RequestPasswordResetRequest,
) -> AuthResult<ServerEndpoint<RequestPasswordResetResponse>>
pub fn request_password_reset_endpoint( body: &RequestPasswordResetRequest, ) -> AuthResult<ServerEndpoint<RequestPasswordResetResponse>>
Deliver an owned, redeemable reset proof using logical server dispatch.
The operation does not require a caller session. Redirect trust checks apply when a physical request is supplied, matching the reference server API.
§Errors
Returns an error if the logical input cannot be serialized.
Sourcepub fn reset_password_endpoint(
body: &ResetPasswordRequest,
) -> AuthResult<ServerEndpoint<StatusResponse>>
pub fn reset_password_endpoint( body: &ResetPasswordRequest, ) -> AuthResult<ServerEndpoint<StatusResponse>>
Reset the proof owner’s password without requiring a caller session.
A nonempty body token takes precedence over the optional logical query token. Dispatch consumes the proof once and runs the configured reset callback and hooks.
§Errors
Returns an error if the logical input cannot be serialized.
Sourcepub fn set_password_endpoint(
body: &SetPasswordRequest,
) -> AuthResult<ServerEndpoint<StatusResponse>>
pub fn set_password_endpoint( body: &SetPasswordRequest, ) -> AuthResult<ServerEndpoint<StatusResponse>>
Set a password for the authoritative caller without exposing an HTTP route.
Dispatch uses logical session headers and installed hooks. Existing sessions remain active, and only the caller’s credential account can be created or filled.
§Errors
Returns an error if the logical input cannot be serialized.
Sourcepub fn verify_password_endpoint(
body: &VerifyPasswordRequest,
) -> AuthResult<ServerEndpoint<VerifyPasswordResponse>>
pub fn verify_password_endpoint( body: &VerifyPasswordRequest, ) -> AuthResult<ServerEndpoint<VerifyPasswordResponse>>
Verify the current caller’s password using genuine logical session headers.
§Errors
Returns an error if the logical input cannot be serialized.
Sourcepub fn change_password_endpoint(
body: &ChangePasswordRequest,
) -> AuthResult<ServerEndpoint<ChangePasswordResponse<UserView>>>
pub fn change_password_endpoint( body: &ChangePasswordRequest, ) -> AuthResult<ServerEndpoint<ChangePasswordResponse<UserView>>>
Change the authenticated caller’s password and retain every response cookie/header.
Input is validated after installed before-hook patches. Incoming logical headers authorize the operation; no physical HTTP request is required.
§Errors
Returns an error if the logical input cannot be serialized.
Trait Implementations§
Source§impl<S: AuthSchema> AuthPlugin<S> for PasswordManagementPlugin
impl<S: AuthSchema> AuthPlugin<S> for PasswordManagementPlugin
Source§fn static_openapi_metadata(&self) -> PluginOpenApiMetadata
fn static_openapi_metadata(&self) -> PluginOpenApiMetadata
Source§fn openapi_metadata(&self, ctx: &AuthInitContext<S>) -> PluginOpenApiMetadata
fn openapi_metadata(&self, ctx: &AuthInitContext<S>) -> PluginOpenApiMetadata
Source§fn server_endpoints(&self) -> Vec<EndpointDefinition>
fn server_endpoints(&self) -> Vec<EndpointDefinition>
Source§fn validate_endpoint(
&self,
call: &EndpointCall,
_: &AuthContext<S>,
) -> AuthResult<EndpointInput>
fn validate_endpoint( &self, call: &EndpointCall, _: &AuthContext<S>, ) -> AuthResult<EndpointInput>
Source§fn on_endpoint<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
call: &'life1 EndpointCall,
ctx: &'life2 AuthContext<S>,
) -> Pin<Box<dyn Future<Output = AuthResult<EndpointResponse>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn on_endpoint<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
call: &'life1 EndpointCall,
ctx: &'life2 AuthContext<S>,
) -> Pin<Box<dyn Future<Output = AuthResult<EndpointResponse>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Source§fn on_init<'life0, 'life1, 'async_trait>(
&'life0 self,
ctx: &'life1 mut AuthInitContext<S>,
) -> Pin<Box<dyn Future<Output = AuthResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn on_init<'life0, 'life1, 'async_trait>(
&'life0 self,
ctx: &'life1 mut AuthInitContext<S>,
) -> Pin<Box<dyn Future<Output = AuthResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn on_request<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
req: &'life1 AuthRequest,
ctx: &'life2 AuthContext<S>,
) -> Pin<Box<dyn Future<Output = AuthResult<Option<AuthResponse>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn on_request<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
req: &'life1 AuthRequest,
ctx: &'life2 AuthContext<S>,
) -> Pin<Box<dyn Future<Output = AuthResult<Option<AuthResponse>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Source§fn rate_limits(&self) -> Vec<PluginRateLimit>
fn rate_limits(&self) -> Vec<PluginRateLimit>
Source§fn endpoint_hooks(&self) -> Vec<&dyn EndpointHook<S>>
fn endpoint_hooks(&self) -> Vec<&dyn EndpointHook<S>>
Source§fn allowed_media_types(&self, _route: &AuthRoute) -> Vec<&'static str>
fn allowed_media_types(&self, _route: &AuthRoute) -> Vec<&'static str>
Source§fn session_fields(&self) -> IndexMap<String, FieldConfig>
fn session_fields(&self) -> IndexMap<String, FieldConfig>
fn user_fields(&self) -> IndexMap<String, FieldConfig>
fn account_fields(&self) -> IndexMap<String, FieldConfig>
Source§fn on_http_request<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
_req: &'life1 AuthRequest,
_ctx: &'life2 AuthContext<S>,
) -> Pin<Box<dyn Future<Output = Result<Option<AuthResponse>, AuthError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Self: 'async_trait,
fn on_http_request<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
_req: &'life1 AuthRequest,
_ctx: &'life2 AuthContext<S>,
) -> Pin<Box<dyn Future<Output = Result<Option<AuthResponse>, AuthError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Self: 'async_trait,
Source§fn on_http_request_action<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
req: &'life1 AuthRequest,
ctx: &'life2 AuthContext<S>,
) -> Pin<Box<dyn Future<Output = Result<Option<HttpRequestAction>, AuthError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Self: 'async_trait,
fn on_http_request_action<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
req: &'life1 AuthRequest,
ctx: &'life2 AuthContext<S>,
) -> Pin<Box<dyn Future<Output = Result<Option<HttpRequestAction>, AuthError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Self: 'async_trait,
on_http_request implementations. Request-local configuration has already
been resolved from the incoming request, matching the Source HTTP handler.Source§fn on_http_response<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
_req: &'life1 AuthRequest,
_ctx: &'life2 AuthContext<S>,
_response: &'life3 AuthResponse,
) -> Pin<Box<dyn Future<Output = Result<Option<AuthResponse>, AuthError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
Self: 'async_trait,
fn on_http_response<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
_req: &'life1 AuthRequest,
_ctx: &'life2 AuthContext<S>,
_response: &'life3 AuthResponse,
) -> Pin<Box<dyn Future<Output = Result<Option<AuthResponse>, AuthError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
Self: 'async_trait,
Source§fn before_request<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
_req: &'life1 AuthRequest,
_ctx: &'life2 AuthContext<S>,
) -> Pin<Box<dyn Future<Output = Result<Option<BeforeRequestAction>, AuthError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Self: 'async_trait,
fn before_request<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
_req: &'life1 AuthRequest,
_ctx: &'life2 AuthContext<S>,
) -> Pin<Box<dyn Future<Output = Result<Option<BeforeRequestAction>, AuthError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Self: 'async_trait,
Source§fn on_http_endpoint<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
req: &'life1 AuthRequest,
ctx: &'life2 AuthContext<S>,
) -> Pin<Box<dyn Future<Output = Result<Option<HttpEndpointResponse>, AuthError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Self: 'async_trait,
fn on_http_endpoint<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
req: &'life1 AuthRequest,
ctx: &'life2 AuthContext<S>,
) -> Pin<Box<dyn Future<Output = Result<Option<HttpEndpointResponse>, AuthError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Self: 'async_trait,
on_request; plugins returning a native raw response can
override this method to bypass the endpoint after-hook pipeline.