@@ -14,12 +14,13 @@ from pathlib import Path
14
14
from urllib import request
15
15
16
16
from tuf .api .exceptions import DownloadError , RepositoryError
17
- from tuf .ngclient import Updater
17
+ from tuf .ngclient import Updater , UpdaterConfig
18
18
19
19
# constants
20
20
DOWNLOAD_DIR = "./downloads"
21
21
CLIENT_EXAMPLE_DIR = os .path .dirname (os .path .abspath (__file__ ))
22
22
23
+
23
24
def build_metadata_dir (base_url : str ) -> str :
24
25
"""build a unique and reproducible directory name for the repository url"""
25
26
name = sha256 (base_url .encode ()).hexdigest ()[:8 ]
@@ -46,7 +47,7 @@ def init_tofu(base_url: str) -> bool:
46
47
return True
47
48
48
49
49
- def download (base_url : str , target : str ) -> bool :
50
+ def download (base_url : str , target : str , use_dsse : bool ) -> bool :
50
51
"""
51
52
Download the target file using ``ngclient`` Updater.
52
53
@@ -72,12 +73,16 @@ def download(base_url: str, target: str) -> bool:
72
73
if not os .path .isdir (DOWNLOAD_DIR ):
73
74
os .mkdir (DOWNLOAD_DIR )
74
75
76
+ config = UpdaterConfig ()
77
+ config .use_dsse = use_dsse
78
+
75
79
try :
76
80
updater = Updater (
77
81
metadata_dir = metadata_dir ,
78
82
metadata_base_url = f"{ base_url } /metadata/" ,
79
83
target_base_url = f"{ base_url } /targets/" ,
80
84
target_dir = DOWNLOAD_DIR ,
85
+ config = config ,
81
86
)
82
87
updater .refresh ()
83
88
@@ -146,6 +151,13 @@ def main() -> None:
146
151
help = "Target file" ,
147
152
)
148
153
154
+ download_parser .add_argument (
155
+ "--use-dsse" ,
156
+ help = "Parse TUF metadata as DSSE" ,
157
+ default = False ,
158
+ action = "store_true" ,
159
+ )
160
+
149
161
command_args = client_args .parse_args ()
150
162
151
163
if command_args .verbose == 0 :
@@ -164,7 +176,9 @@ def main() -> None:
164
176
if not init_tofu (command_args .url ):
165
177
return "Failed to initialize local repository"
166
178
elif command_args .sub_command == "download" :
167
- if not download (command_args .url , command_args .target ):
179
+ if not download (
180
+ command_args .url , command_args .target , command_args .use_dsse
181
+ ):
168
182
return f"Failed to download { command_args .target } "
169
183
else :
170
184
client_args .print_help ()
0 commit comments