use super::precondition::PreconditionBlock;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum AuthBlockFamily {
OriginAuthentication,
OriginAuthorization,
ProxyAuthentication,
NetworkAuthentication,
LoginRedirect,
AuthErrorEnvelope,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
pub enum AuthBlockConfidence {
Weak,
Medium,
Strong,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum CredentialBlockKind {
NoCredential,
CredentialRejected,
InsufficientScope,
UnknownAuthFailure,
NotApplicable,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum AuthScheme {
Bearer,
Basic,
Digest,
Other,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct AuthChallenge {
pub scheme: AuthScheme,
pub realm: Option<String>,
pub error: Option<String>,
pub error_description: Option<String>,
pub scope: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct AuthErrorBodySignal {
pub code: String,
pub confidence: AuthBlockConfidence,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct LoginRedirectSignal {
pub location: String,
pub confidence: AuthBlockConfidence,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct AuthBlockSignature {
pub family: AuthBlockFamily,
pub confidence: AuthBlockConfidence,
pub status: u16,
pub credential_state: CredentialBlockKind,
pub challenge: Option<AuthChallenge>,
pub body_signal: Option<AuthErrorBodySignal>,
pub login_redirect: Option<LoginRedirectSignal>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum AuthGateDecision {
Gate(PreconditionBlock),
DoNotGate,
NoAuthInvolvement,
}