junobuild_auth/state/
types.rs

1pub mod state {
2    use crate::delegation::types::Timestamp;
3    use crate::openid::types::provider::{OpenIdCertificate, OpenIdProvider};
4    use crate::state::types::config::AuthenticationConfig;
5    use candid::CandidType;
6    use serde::{Deserialize, Serialize};
7    use std::collections::HashMap;
8
9    pub type Salt = [u8; 32];
10
11    #[derive(Default, CandidType, Serialize, Deserialize, Clone)]
12    pub struct AuthenticationHeapState {
13        pub config: AuthenticationConfig,
14        pub salt: Option<Salt>,
15        pub openid: Option<OpenIdState>,
16    }
17
18    #[derive(Default, CandidType, Serialize, Deserialize, Clone)]
19    pub struct OpenIdState {
20        pub certificates: HashMap<OpenIdProvider, OpenIdCachedCertificate>,
21    }
22
23    #[derive(CandidType, Serialize, Deserialize, Clone)]
24    pub struct OpenIdCachedCertificate {
25        pub certificate: Option<OpenIdCertificate>,
26        pub last_fetch_attempt: OpenIdLastFetchAttempt,
27    }
28
29    #[derive(CandidType, Serialize, Deserialize, Clone)]
30    pub struct OpenIdLastFetchAttempt {
31        pub at: Timestamp,
32        pub streak_count: u8,
33    }
34}
35
36pub(crate) mod runtime_state {
37    use candid::Deserialize;
38    use ic_canister_sig_creation::signature_map::SignatureMap;
39    use serde::Serialize;
40
41    #[derive(Default, Serialize, Deserialize)]
42    pub struct State {
43        // Unstable state: State that resides only on the heap, that’s lost after an upgrade.
44        #[serde(skip, default)]
45        pub runtime: RuntimeState,
46    }
47
48    #[derive(Default)]
49    pub struct RuntimeState {
50        pub sigs: SignatureMap,
51    }
52}
53
54pub mod config {
55    use crate::delegation::types::DelegationTargets;
56    use crate::openid::types::provider::OpenIdProvider;
57    use candid::{CandidType, Deserialize, Principal};
58    use junobuild_shared::types::core::DomainName;
59    use junobuild_shared::types::state::{Timestamp, Version};
60    use serde::Serialize;
61    use std::collections::BTreeMap;
62
63    #[derive(Default, CandidType, Serialize, Deserialize, Clone)]
64    pub struct AuthenticationConfig {
65        pub internet_identity: Option<AuthenticationConfigInternetIdentity>,
66        pub openid: Option<AuthenticationConfigOpenId>,
67        pub rules: Option<AuthenticationRules>,
68        pub version: Option<Version>,
69        pub created_at: Option<Timestamp>,
70        pub updated_at: Option<Timestamp>,
71    }
72
73    #[derive(Default, CandidType, Serialize, Deserialize, Clone)]
74    pub struct AuthenticationConfigOpenId {
75        pub providers: OpenIdProviders,
76        pub observatory_id: Option<Principal>,
77    }
78
79    #[derive(Default, CandidType, Serialize, Deserialize, Clone)]
80    pub struct AuthenticationConfigInternetIdentity {
81        pub derivation_origin: Option<DomainName>,
82        pub external_alternative_origins: Option<Vec<DomainName>>,
83    }
84
85    #[derive(Default, CandidType, Serialize, Deserialize, Clone)]
86    pub struct AuthenticationRules {
87        pub allowed_callers: Vec<Principal>,
88    }
89
90    pub type OpenIdProviders = BTreeMap<OpenIdProvider, OpenIdProviderConfig>;
91
92    pub type OpenIdProviderClientId = String;
93
94    #[derive(Default, CandidType, Serialize, Deserialize, Clone, Debug)]
95    pub struct OpenIdProviderConfig {
96        pub client_id: OpenIdProviderClientId,
97        pub delegation: Option<OpenIdProviderDelegationConfig>,
98    }
99
100    #[derive(Default, CandidType, Serialize, Deserialize, Clone, Debug)]
101    pub struct OpenIdProviderDelegationConfig {
102        pub targets: Option<DelegationTargets>,
103        pub max_time_to_live: Option<u64>,
104    }
105}
106
107pub mod interface {
108    use crate::state::types::config::{
109        AuthenticationConfigInternetIdentity, AuthenticationConfigOpenId, AuthenticationRules,
110    };
111    use candid::{CandidType, Deserialize};
112    use junobuild_shared::types::state::Version;
113    use serde::Serialize;
114
115    #[derive(Default, CandidType, Serialize, Deserialize, Clone)]
116    pub struct SetAuthenticationConfig {
117        pub internet_identity: Option<AuthenticationConfigInternetIdentity>,
118        pub openid: Option<AuthenticationConfigOpenId>,
119        pub rules: Option<AuthenticationRules>,
120        pub version: Option<Version>,
121    }
122}