openauth_plugins/multi_session/
mod.rs1mod 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}