rustauth_plugins/anonymous/
mod.rs1mod 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, AnonymousOptionsBuilder};
17
18use rustauth_core::plugin::AuthPlugin;
19use rustauth_core::{
20 db::{DbFieldType, DbValue},
21 options::UserAdditionalField,
22 plugin::PluginInitOutput,
23};
24
25pub const UPSTREAM_PLUGIN_ID: &str = "anonymous";
26
27#[must_use]
28pub fn anonymous(options: AnonymousOptions) -> AuthPlugin {
29 let init_options = options.clone();
30 let mut plugin = AuthPlugin::new(UPSTREAM_PLUGIN_ID)
31 .with_version(env!("CARGO_PKG_VERSION"))
32 .with_schema(schema::user_is_anonymous_schema(
33 options.field_name.as_deref(),
34 ))
35 .with_init(move |_| {
36 Ok(PluginInitOutput::new().user_additional_field(
37 "is_anonymous",
38 UserAdditionalField::new(DbFieldType::Boolean)
39 .optional()
40 .generated()
41 .default_value(DbValue::Boolean(false))
42 .db_name(init_options.storage_field_name()),
43 ))
44 })
45 .with_endpoint(endpoints::sign_in_anonymous_endpoint(options.clone()))
46 .with_endpoint(endpoints::delete_anonymous_user_endpoint(options.clone()));
47
48 for code in errors::error_codes() {
49 plugin = plugin.with_error_code(code);
50 }
51 hooks::attach_link_hooks(plugin, options)
52}