shared/settings/
webauthn.rs1use super::{
2 ExtensionSettings, SettingsDeserializeExt, SettingsDeserializer, SettingsSerializeExt,
3 SettingsSerializer,
4};
5use serde::{Deserialize, Serialize};
6use utoipa::ToSchema;
7
8#[derive(Clone, ToSchema, Serialize, Deserialize)]
9pub struct AppSettingsWebauthn {
10 pub rp_id: compact_str::CompactString,
11 pub rp_origin: compact_str::CompactString,
12}
13
14#[async_trait::async_trait]
15impl SettingsSerializeExt for AppSettingsWebauthn {
16 async fn serialize(
17 &self,
18 serializer: SettingsSerializer,
19 ) -> Result<SettingsSerializer, anyhow::Error> {
20 Ok(serializer
21 .write_raw_setting("rp_id", &*self.rp_id)
22 .write_raw_setting("rp_origin", &*self.rp_origin))
23 }
24}
25
26pub struct AppSettingsWebauthnDeserializer;
27
28#[async_trait::async_trait]
29impl SettingsDeserializeExt for AppSettingsWebauthnDeserializer {
30 async fn deserialize_boxed(
31 &self,
32 mut deserializer: SettingsDeserializer<'_>,
33 ) -> Result<ExtensionSettings, anyhow::Error> {
34 Ok(Box::new(AppSettingsWebauthn {
35 rp_id: deserializer
36 .take_raw_setting("rp_id")
37 .unwrap_or_else(|| "localhost".into()),
38 rp_origin: deserializer
39 .take_raw_setting("rp_origin")
40 .unwrap_or_else(|| "http://localhost".into()),
41 }))
42 }
43}