1mod challenge;
23mod cookies;
24mod errors;
25mod openapi;
26mod options;
27mod response;
28mod routes;
29mod schema;
30mod session;
31mod store;
32mod webauthn;
33
34pub use errors::PASSKEY_ERROR_CODES;
35pub use options::{
36 AfterAuthenticationVerificationInput, AfterRegistrationVerificationInput,
37 AuthenticatorAttachment, AuthenticatorSelection, PasskeyAdvancedOptions,
38 PasskeyAuthenticationOptions, PasskeyOptions, PasskeyRegistrationOptions,
39 PasskeyRegistrationUser, RegistrationWebAuthnOptions, ResidentKeyRequirement,
40 ResolveRegistrationUserInput, UserVerificationRequirement,
41};
42pub use store::Passkey;
43pub use webauthn::{
44 PasskeyAuthenticationStart, PasskeyRegistrationStart, PasskeyWebAuthnBackend,
45 VerifiedAuthentication, VerifiedPasskeyCredential, WebAuthnConfig,
46};
47
48use openauth_core::plugin::AuthPlugin;
49
50pub const UPSTREAM_PLUGIN_ID: &str = "passkey";
51
52pub fn passkey(options: PasskeyOptions) -> AuthPlugin {
54 let options = std::sync::Arc::new(options);
55 let mut plugin = AuthPlugin::new(UPSTREAM_PLUGIN_ID).with_version(env!("CARGO_PKG_VERSION"));
56 for contribution in schema::contributions(&options.passkey_table) {
57 plugin = plugin.with_schema(contribution);
58 }
59 for code in errors::plugin_error_codes() {
60 plugin = plugin.with_error_code(code);
61 }
62 for endpoint in routes::endpoints(options) {
63 plugin = plugin.with_endpoint(endpoint);
64 }
65 plugin
66}