Skip to main content

openauth_plugins/multi_session/
mod.rs

1//! Multi-session plugin.
2
3mod cookies;
4mod endpoints;
5mod errors;
6mod hooks;
7mod options;
8
9pub use errors::{INVALID_SESSION_TOKEN, MULTI_SESSION_ERROR_CODES};
10pub use options::MultiSessionConfig;
11
12use openauth_core::plugin::{AuthPlugin, PluginErrorCode};
13
14pub const UPSTREAM_PLUGIN_ID: &str = "multi-session";
15
16pub fn multi_session() -> AuthPlugin {
17    multi_session_with_config(MultiSessionConfig::default())
18}
19
20pub fn multi_session_with_config(config: MultiSessionConfig) -> AuthPlugin {
21    AuthPlugin::new(UPSTREAM_PLUGIN_ID)
22        .with_version(crate::VERSION)
23        .with_options(serde_json::json!({
24            "maximumSessions": config.maximum_sessions,
25        }))
26        .with_error_code(PluginErrorCode::new(
27            INVALID_SESSION_TOKEN,
28            "Invalid session token",
29        ))
30        .with_endpoint(endpoints::list_device_sessions_endpoint())
31        .with_endpoint(endpoints::set_active_session_endpoint())
32        .with_endpoint(endpoints::revoke_device_session_endpoint())
33        .with_async_after_hook("*", hooks::store_multi_session_cookie(config))
34        .with_async_after_hook("/sign-out", hooks::revoke_multi_session_cookies())
35}