Skip to main content

upstream_rs/models/upstream/
app_config.rs

1use crate::models::common::enums::CompressionLevel;
2use crate::services::trust::{CosignPublicKey, MinisignPublicKey, TrustedSignatureKeys};
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Serialize, Deserialize, Default)]
6#[serde(default)]
7pub struct ProviderConfig {
8    pub api_token: Option<String>,
9}
10
11#[derive(Debug, Clone, Serialize, Deserialize, Default)]
12#[serde(default)]
13pub struct MinisignKeyConfig {
14    pub id: Option<String>,
15    pub key: String,
16}
17
18#[derive(Debug, Clone, Serialize, Deserialize, Default)]
19#[serde(default)]
20pub struct TrustConfig {
21    pub minisign_public_keys: Vec<MinisignKeyConfig>,
22    pub cosign_public_keys: Vec<CosignKeyConfig>,
23}
24
25#[derive(Debug, Clone, Serialize, Deserialize, Default)]
26#[serde(default)]
27pub struct CosignKeyConfig {
28    pub id: Option<String>,
29    pub key: String,
30}
31
32#[derive(Debug, Clone, Serialize, Deserialize)]
33#[serde(default)]
34pub struct RollbackConfig {
35    pub compression_level: CompressionLevel,
36    pub stored_artifacts: u32,
37}
38
39impl Default for RollbackConfig {
40    fn default() -> Self {
41        Self {
42            compression_level: CompressionLevel::None,
43            stored_artifacts: 1,
44        }
45    }
46}
47
48#[derive(Debug, Clone, Serialize, Deserialize, Default)]
49#[serde(default)]
50pub struct AppConfig {
51    pub github: ProviderConfig,
52    pub gitlab: ProviderConfig,
53    pub gitea: ProviderConfig,
54    pub trust: TrustConfig,
55    pub rollback: RollbackConfig,
56}
57
58impl AppConfig {
59    pub fn trusted_signature_keys(&self) -> TrustedSignatureKeys {
60        let minisign_public_keys = self
61            .trust
62            .minisign_public_keys
63            .iter()
64            .map(|k| MinisignPublicKey {
65                id: k.id.clone(),
66                key: k.key.clone(),
67            })
68            .collect();
69
70        let cosign_public_keys = self
71            .trust
72            .cosign_public_keys
73            .iter()
74            .map(|k| CosignPublicKey {
75                id: k.id.clone(),
76                key: k.key.clone(),
77            })
78            .collect();
79
80        TrustedSignatureKeys {
81            minisign_public_keys,
82            cosign_public_keys,
83        }
84    }
85}