Skip to main content

rustauth_plugins/bearer/
mod.rs

1//! Bearer token plugin.
2
3mod request;
4mod response;
5
6use rustauth_core::plugin::AuthPlugin;
7use serde_json::json;
8
9pub const UPSTREAM_PLUGIN_ID: &str = "bearer";
10
11/// Options for bearer token authentication.
12#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
13pub struct BearerOptions {
14    /// Require bearer tokens to already be signed session-cookie values.
15    pub require_signature: bool,
16}
17
18impl BearerOptions {
19    #[must_use]
20    pub fn builder() -> BearerOptionsBuilder {
21        BearerOptionsBuilder::default()
22    }
23}
24
25#[derive(Debug, Clone, Copy, Default)]
26pub struct BearerOptionsBuilder {
27    require_signature: Option<bool>,
28}
29
30impl BearerOptionsBuilder {
31    #[must_use]
32    pub fn require_signature(mut self, require_signature: bool) -> Self {
33        self.require_signature = Some(require_signature);
34        self
35    }
36
37    #[must_use]
38    pub fn build(self) -> BearerOptions {
39        let defaults = BearerOptions::default();
40        BearerOptions {
41            require_signature: self.require_signature.unwrap_or(defaults.require_signature),
42        }
43    }
44}
45
46/// Create the bearer plugin.
47#[must_use]
48pub fn bearer(options: BearerOptions) -> AuthPlugin {
49    AuthPlugin::new(UPSTREAM_PLUGIN_ID)
50        .with_version(crate::VERSION)
51        .with_options(json!({
52            "requireSignature": options.require_signature,
53        }))
54        .with_on_request(move |context, request| request::handle(context, request, options))
55        .with_on_response(response::handle)
56}