Skip to main content

uptrakit_web_api_types/
settings.rs

1use crate::registration::RegistrationMode;
2use serde::{Deserialize, Serialize};
3use uptrakit_shared_types::SecretString;
4
5#[derive(Serialize, Deserialize)]
6#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
7pub struct RegistrationSettingsResponse {
8    pub mode: RegistrationMode,
9    /// Whether OIDC users also need a registration token (only relevant in `invite` mode).
10    pub require_token_for_oidc: bool,
11}
12
13#[derive(Serialize, Deserialize)]
14#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
15pub struct UpdateRegistrationSettingsRequest {
16    pub mode: RegistrationMode,
17    /// Required when mode is `invite`. The plaintext token will be hashed before storage.
18    pub token: Option<SecretString>,
19    /// Whether OIDC users also need a registration token (only relevant in `invite` mode).
20    pub require_token_for_oidc: Option<bool>,
21}
22
23#[cfg(test)]
24mod tests {
25    use super::*;
26
27    #[test]
28    fn registration_settings_response_round_trip() {
29        let resp = RegistrationSettingsResponse {
30            mode: RegistrationMode::Invite,
31            require_token_for_oidc: true,
32        };
33        let json = serde_json::to_string(&resp).expect("serialization should succeed");
34        let de: RegistrationSettingsResponse =
35            serde_json::from_str(&json).expect("deserialization should succeed");
36        assert_eq!(de.mode, RegistrationMode::Invite);
37        assert!(de.require_token_for_oidc);
38    }
39
40    #[test]
41    fn update_registration_settings_request_round_trip() {
42        let req = UpdateRegistrationSettingsRequest {
43            mode: RegistrationMode::Open,
44            token: Some(SecretString::new("invite-token")),
45            require_token_for_oidc: Some(false),
46        };
47        let json = serde_json::to_string(&req).expect("serialization should succeed");
48        let de: UpdateRegistrationSettingsRequest =
49            serde_json::from_str(&json).expect("deserialization should succeed");
50        assert_eq!(de.mode, RegistrationMode::Open);
51        assert_eq!(
52            de.token.as_ref().map(|s| s.expose_secret()),
53            Some("invite-token")
54        );
55        assert_eq!(de.require_token_for_oidc, Some(false));
56    }
57}