shared/settings/
webauthn.rs

1use 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}