r402_extensions/siwx/
mod.rs1pub mod advertise;
8pub mod client;
9pub mod origin;
10pub mod paid;
11pub mod proof;
12
13pub use advertise::{SiwxChain, SiwxExtension};
14pub use client::{SiwxClientExtension, SiwxSigner};
15pub use origin::{SiwxOrigin, SiwxOriginError};
16pub use paid::{InMemoryPaidAddressStore, PaidAddressStore};
17pub use proof::{SiwxProof, SiwxProofError};
18pub use siwx_evm::EvmVerifier;
19
20pub const SIWX_KEY: &str = "sign-in-with-x";
22
23pub const SIWX_HTTP_HEADER: &str = "SIGN-IN-WITH-X";
25
26pub const DEFAULT_MAX_ISSUED_AGE: time::Duration = time::Duration::minutes(5);
28
29pub const DEFAULT_CHALLENGE_TTL: time::Duration = time::Duration::minutes(5);
31
32pub const DEFAULT_STATEMENT: &str = "Sign in to access this resource";
34
35#[derive(Debug, Clone, Copy, PartialEq, Eq, thiserror::Error)]
37#[non_exhaustive]
38pub enum SiwxError {
39 #[error("invalid_siwx_domain_mismatch")]
41 DomainMismatch,
42 #[error("invalid_siwx_uri_mismatch")]
44 UriMismatch,
45 #[error("invalid_siwx_issued_at")]
47 IssuedAt,
48 #[error("invalid_siwx_issued_at_too_old")]
50 IssuedAtTooOld,
51 #[error("invalid_siwx_issued_at_in_future")]
53 IssuedAtInFuture,
54 #[error("invalid_siwx_expiration_time")]
56 ExpirationTime,
57 #[error("invalid_siwx_expired")]
59 Expired,
60 #[error("invalid_siwx_not_before")]
62 NotBefore,
63 #[error("invalid_siwx_not_yet_valid")]
65 NotYetValid,
66 #[error("invalid_siwx_nonce")]
68 Nonce,
69 #[error("invalid_siwx_signature")]
71 Signature,
72 #[error("invalid_siwx_chain_id")]
74 ChainId,
75 #[error("invalid_siwx_unsupported_chain")]
77 UnsupportedChain,
78 #[error("invalid_siwx_malformed_signature")]
80 MalformedSignature,
81 #[error("invalid_siwx_verifier_error")]
83 VerifierError,
84}
85
86impl SiwxError {
87 #[must_use]
89 pub const fn as_str(self) -> &'static str {
90 match self {
91 Self::DomainMismatch => "invalid_siwx_domain_mismatch",
92 Self::UriMismatch => "invalid_siwx_uri_mismatch",
93 Self::IssuedAt => "invalid_siwx_issued_at",
94 Self::IssuedAtTooOld => "invalid_siwx_issued_at_too_old",
95 Self::IssuedAtInFuture => "invalid_siwx_issued_at_in_future",
96 Self::ExpirationTime => "invalid_siwx_expiration_time",
97 Self::Expired => "invalid_siwx_expired",
98 Self::NotBefore => "invalid_siwx_not_before",
99 Self::NotYetValid => "invalid_siwx_not_yet_valid",
100 Self::Nonce => "invalid_siwx_nonce",
101 Self::Signature => "invalid_siwx_signature",
102 Self::ChainId => "invalid_siwx_chain_id",
103 Self::UnsupportedChain => "invalid_siwx_unsupported_chain",
104 Self::MalformedSignature => "invalid_siwx_malformed_signature",
105 Self::VerifierError => "invalid_siwx_verifier_error",
106 }
107 }
108}