Skip to content

Commit a47ca54

Browse files
fix: create sigstore cache path and manual trust root only if a verification config was specified
Signed-off-by: Fabrizio Sestito <fabrizio.sestito@suse.com>
1 parent f467e25 commit a47ca54

File tree

1 file changed

+33
-24
lines changed

1 file changed

+33
-24
lines changed

src/lib.rs

+33-24
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ use policy_evaluator::{
3030
wasmtime,
3131
};
3232
use rayon::prelude::*;
33-
use std::{net::SocketAddr, sync::Arc};
33+
use std::{fs, net::SocketAddr, sync::Arc};
3434
use tokio::{
3535
sync::{oneshot, Semaphore},
3636
time,
@@ -63,28 +63,42 @@ impl PolicyServer {
6363
let (callback_handler_shutdown_channel_tx, callback_handler_shutdown_channel_rx) =
6464
oneshot::channel();
6565

66-
let repo = SigstoreTrustRoot::new(Some(config.sigstore_cache_dir.as_path())).await?;
67-
let fulcio_certs: Vec<rustls_pki_types::CertificateDer> = repo
68-
.fulcio_certs()
69-
.expect("Cannot fetch Fulcio certificates from TUF repository")
70-
.into_iter()
71-
.map(|c| c.into_owned())
72-
.collect();
73-
let manual_root = ManualTrustRoot {
74-
fulcio_certs: Some(fulcio_certs),
75-
rekor_keys: Some(
76-
repo.rekor_keys()
77-
.expect("Cannot fetch Rekor keys from TUF repository")
78-
.iter()
79-
.map(|k| k.to_vec())
80-
.collect(),
81-
),
66+
let manual_root = if config.verification_config.is_some() {
67+
if !config.sigstore_cache_dir.exists() {
68+
fs::create_dir_all(&config.sigstore_cache_dir).map_err(|e| {
69+
anyhow!("Cannot create directory to cache sigstore data: {}", e)
70+
})?;
71+
}
72+
73+
let repo = SigstoreTrustRoot::new(Some(config.sigstore_cache_dir.as_path())).await?;
74+
75+
let fulcio_certs: Vec<rustls_pki_types::CertificateDer> = repo
76+
.fulcio_certs()
77+
.expect("Cannot fetch Fulcio certificates from TUF repository")
78+
.into_iter()
79+
.map(|c| c.into_owned())
80+
.collect();
81+
82+
let manual_root = ManualTrustRoot {
83+
fulcio_certs: Some(fulcio_certs),
84+
rekor_keys: Some(
85+
repo.rekor_keys()
86+
.expect("Cannot fetch Rekor keys from TUF repository")
87+
.iter()
88+
.map(|k| k.to_vec())
89+
.collect(),
90+
),
91+
};
92+
93+
Some(Arc::new(manual_root))
94+
} else {
95+
None
8296
};
8397

8498
let mut callback_handler_builder =
8599
CallbackHandlerBuilder::new(callback_handler_shutdown_channel_rx)
86100
.registry_config(config.sources.clone())
87-
.trust_root(Some(Arc::new(manual_root)));
101+
.trust_root(manual_root.clone());
88102

89103
let kube_client: Option<kube::Client> = match kube::Client::try_default().await {
90104
Ok(client) => Some(client),
@@ -119,12 +133,7 @@ impl PolicyServer {
119133
let callback_sender_channel = callback_handler.sender_channel();
120134

121135
// Download policies
122-
let mut downloader = Downloader::new(
123-
config.sources.clone(),
124-
config.verification_config.is_some(),
125-
Some(config.sigstore_cache_dir.clone()),
126-
)
127-
.await?;
136+
let mut downloader = Downloader::new(config.sources.clone(), manual_root.clone()).await?;
128137

129138
let fetched_policies = downloader
130139
.download_policies(

0 commit comments

Comments
 (0)