openauth_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;
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}