Skip to main content

openauth_plugins/anonymous/
mod.rs

1//! Anonymous authentication plugin.
2
3mod cookies;
4mod endpoints;
5mod errors;
6mod fields;
7mod hooks;
8mod model;
9mod options;
10mod response;
11mod schema;
12
13pub use errors::{AnonymousError, ANONYMOUS_ERROR_CODES};
14pub use hooks::AnonymousLinkAccount;
15pub use model::{AnonymousSession, AnonymousUser, LinkedSession};
16pub use options::AnonymousOptions;
17
18use openauth_core::plugin::AuthPlugin;
19use openauth_core::{
20    db::{DbFieldType, DbValue},
21    options::UserAdditionalField,
22    plugin::PluginInitOutput,
23};
24
25pub const UPSTREAM_PLUGIN_ID: &str = "anonymous";
26
27pub fn anonymous(options: AnonymousOptions) -> AuthPlugin {
28    let init_options = options.clone();
29    let mut plugin = AuthPlugin::new(UPSTREAM_PLUGIN_ID)
30        .with_version(env!("CARGO_PKG_VERSION"))
31        .with_schema(schema::user_is_anonymous_schema(
32            options.field_name.as_deref(),
33        ))
34        .with_init(move |_| {
35            Ok(PluginInitOutput::new().user_additional_field(
36                "is_anonymous",
37                UserAdditionalField::new(DbFieldType::Boolean)
38                    .optional()
39                    .generated()
40                    .default_value(DbValue::Boolean(false))
41                    .db_name(init_options.storage_field_name()),
42            ))
43        })
44        .with_endpoint(endpoints::sign_in_anonymous_endpoint(options.clone()))
45        .with_endpoint(endpoints::delete_anonymous_user_endpoint(options.clone()));
46
47    for code in errors::error_codes() {
48        plugin = plugin.with_error_code(code);
49    }
50    hooks::attach_link_hooks(plugin, options)
51}