@@ -30,7 +30,7 @@ use policy_evaluator::{
30
30
wasmtime,
31
31
} ;
32
32
use rayon:: prelude:: * ;
33
- use std:: { net:: SocketAddr , sync:: Arc } ;
33
+ use std:: { fs , net:: SocketAddr , sync:: Arc } ;
34
34
use tokio:: {
35
35
sync:: { oneshot, Semaphore } ,
36
36
time,
@@ -63,28 +63,42 @@ impl PolicyServer {
63
63
let ( callback_handler_shutdown_channel_tx, callback_handler_shutdown_channel_rx) =
64
64
oneshot:: channel ( ) ;
65
65
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
82
96
} ;
83
97
84
98
let mut callback_handler_builder =
85
99
CallbackHandlerBuilder :: new ( callback_handler_shutdown_channel_rx)
86
100
. registry_config ( config. sources . clone ( ) )
87
- . trust_root ( Some ( Arc :: new ( manual_root) ) ) ;
101
+ . trust_root ( manual_root. clone ( ) ) ;
88
102
89
103
let kube_client: Option < kube:: Client > = match kube:: Client :: try_default ( ) . await {
90
104
Ok ( client) => Some ( client) ,
@@ -119,12 +133,7 @@ impl PolicyServer {
119
133
let callback_sender_channel = callback_handler. sender_channel ( ) ;
120
134
121
135
// 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 ?;
128
137
129
138
let fetched_policies = downloader
130
139
. download_policies (
0 commit comments