1pub mod state {
2 use crate::delegation::types::Timestamp;
3 use crate::openid::types::provider::{OpenIdCertificate, OpenIdProvider};
4 use crate::state::types::automation::AutomationConfig;
5 use crate::state::types::config::AuthenticationConfig;
6 use candid::CandidType;
7 use serde::{Deserialize, Serialize};
8 use std::collections::HashMap;
9
10 pub type Salt = [u8; 32];
11
12 #[derive(Default, CandidType, Serialize, Deserialize, Clone)]
13 pub struct AuthenticationHeapState {
14 pub config: AuthenticationConfig,
17 pub automation: Option<AutomationConfig>,
19 pub salt: Option<Salt>,
20 pub openid: Option<OpenIdState>,
21 }
22
23 #[derive(Default, CandidType, Serialize, Deserialize, Clone)]
24 pub struct OpenIdState {
25 pub certificates: HashMap<OpenIdProvider, OpenIdCachedCertificate>,
26 }
27
28 #[derive(CandidType, Serialize, Deserialize, Clone)]
29 pub struct OpenIdCachedCertificate {
30 pub certificate: Option<OpenIdCertificate>,
31 pub last_fetch_attempt: OpenIdLastFetchAttempt,
32 }
33
34 #[derive(CandidType, Serialize, Deserialize, Clone)]
35 pub struct OpenIdLastFetchAttempt {
36 pub at: Timestamp,
37 pub streak_count: u8,
38 }
39}
40
41pub(crate) mod runtime_state {
42 use candid::Deserialize;
43 use ic_canister_sig_creation::signature_map::SignatureMap;
44 use serde::Serialize;
45
46 #[derive(Default, Serialize, Deserialize)]
47 pub struct State {
48 #[serde(skip, default)]
50 pub runtime: RuntimeState,
51 }
52
53 #[derive(Default)]
54 pub struct RuntimeState {
55 pub sigs: SignatureMap,
56 }
57}
58
59pub mod config {
60 use crate::delegation::types::DelegationTargets;
61 use crate::openid::types::provider::OpenIdDelegationProvider;
62 use candid::{CandidType, Deserialize, Principal};
63 use junobuild_shared::types::core::DomainName;
64 use junobuild_shared::types::state::{Timestamp, Version};
65 use serde::Serialize;
66 use std::collections::BTreeMap;
67
68 #[derive(Default, CandidType, Serialize, Deserialize, Clone)]
69 pub struct AuthenticationConfig {
70 pub internet_identity: Option<AuthenticationConfigInternetIdentity>,
71 pub openid: Option<AuthenticationConfigOpenId>,
72 pub rules: Option<AuthenticationRules>,
73 pub version: Option<Version>,
74 pub created_at: Option<Timestamp>,
75 pub updated_at: Option<Timestamp>,
76 }
77
78 #[derive(Default, CandidType, Serialize, Deserialize, Clone)]
79 pub struct AuthenticationConfigOpenId {
80 pub providers: OpenIdAuthProviders,
81 pub observatory_id: Option<Principal>,
82 }
83
84 #[derive(Default, CandidType, Serialize, Deserialize, Clone)]
85 pub struct AuthenticationConfigInternetIdentity {
86 pub derivation_origin: Option<DomainName>,
87 pub external_alternative_origins: Option<Vec<DomainName>>,
88 }
89
90 #[derive(Default, CandidType, Serialize, Deserialize, Clone)]
91 pub struct AuthenticationRules {
92 pub allowed_callers: Vec<Principal>,
93 }
94
95 pub type OpenIdAuthProviders = BTreeMap<OpenIdDelegationProvider, OpenIdAuthProviderConfig>;
96
97 pub type OpenIdAuthProviderClientId = String;
98
99 #[derive(Default, CandidType, Serialize, Deserialize, Clone, Debug)]
100 pub struct OpenIdAuthProviderConfig {
101 pub client_id: OpenIdAuthProviderClientId,
102 pub delegation: Option<OpenIdAuthProviderDelegationConfig>,
103 }
104
105 #[derive(Default, CandidType, Serialize, Deserialize, Clone, Debug)]
106 pub struct OpenIdAuthProviderDelegationConfig {
107 pub targets: Option<DelegationTargets>,
108 pub max_time_to_live: Option<u64>,
109 }
110}
111
112pub mod automation {
113 use crate::automation::types::AutomationScope;
114 use crate::openid::types::provider::OpenIdAutomationProvider;
115 use candid::{CandidType, Deserialize, Principal};
116 use junobuild_shared::types::state::{Timestamp, Version};
117 use serde::Serialize;
118 use std::collections::{BTreeMap, HashMap};
119
120 #[derive(Default, CandidType, Serialize, Deserialize, Clone)]
121 pub struct AutomationConfig {
122 pub openid: Option<AutomationConfigOpenId>,
123 pub version: Option<Version>,
124 pub created_at: Option<Timestamp>,
125 pub updated_at: Option<Timestamp>,
126 }
127
128 #[derive(Default, CandidType, Serialize, Deserialize, Clone)]
129 pub struct AutomationConfigOpenId {
130 pub providers: OpenIdAutomationProviders,
131 pub observatory_id: Option<Principal>,
132 }
133
134 pub type OpenIdAutomationProviders =
135 BTreeMap<OpenIdAutomationProvider, OpenIdAutomationProviderConfig>;
136
137 #[derive(CandidType, Serialize, Deserialize, Clone, Debug, Hash, Eq, PartialEq)]
141 pub struct RepositoryKey {
142 pub owner: String,
144 pub name: String,
146 }
147
148 pub type OpenIdAutomationRepositories =
149 HashMap<RepositoryKey, OpenIdAutomationRepositoryConfig>;
150
151 #[derive(Default, CandidType, Serialize, Deserialize, Clone, Debug)]
152 pub struct OpenIdAutomationProviderConfig {
153 pub repositories: OpenIdAutomationRepositories,
154 pub controller: Option<OpenIdAutomationProviderControllerConfig>,
155 }
156
157 #[derive(CandidType, Serialize, Deserialize, Clone, Debug)]
158 pub struct OpenIdAutomationRepositoryConfig {
159 pub refs: Option<Vec<String>>,
161 }
162
163 #[derive(CandidType, Serialize, Deserialize, Clone, Debug)]
164 pub struct OpenIdAutomationProviderControllerConfig {
165 pub scope: Option<AutomationScope>,
166 pub max_time_to_live: Option<u64>,
167 }
168}
169
170pub mod interface {
171 use crate::state::types::automation::AutomationConfigOpenId;
172 use crate::state::types::config::{
173 AuthenticationConfigInternetIdentity, AuthenticationConfigOpenId, AuthenticationRules,
174 };
175 use candid::{CandidType, Deserialize};
176 use junobuild_shared::types::state::Version;
177 use serde::Serialize;
178
179 #[derive(Default, CandidType, Serialize, Deserialize, Clone)]
180 pub struct SetAuthenticationConfig {
181 pub internet_identity: Option<AuthenticationConfigInternetIdentity>,
182 pub openid: Option<AuthenticationConfigOpenId>,
183 pub rules: Option<AuthenticationRules>,
184 pub version: Option<Version>,
185 }
186
187 #[derive(Default, CandidType, Serialize, Deserialize, Clone)]
188 pub struct SetAutomationConfig {
189 pub openid: Option<AutomationConfigOpenId>,
190 pub version: Option<Version>,
191 }
192}