|
19 | 19 | from securesystemslib.formats import encode_canonical
|
20 | 20 | from securesystemslib.keys import create_signature, verify_signature
|
21 | 21 | from securesystemslib.util import load_json_file
|
| 22 | +import tuf.formats |
22 | 23 | from tuf.repository_lib import (
|
23 | 24 | _get_written_metadata,
|
24 | 25 | _strip_version_number,
|
@@ -140,15 +141,28 @@ def update(self, rolename: str, version: int, length: int, hashes: JsonDict):
|
140 | 141 |
|
141 | 142 | class Snapshot(Metadata):
|
142 | 143 | def __init__(self, consistent_snapshot: bool = True, expiration: relativedelta = relativedelta(days=1), keyring: Keyring = None, version: int = 1):
|
143 |
| - super().__init__(consistent_snapshot, expiration, relativedelta, keyring, version) |
| 144 | + super().__init__(consistent_snapshot, expiration, keyring, version) |
| 145 | + self.targets_fileinfo = {} |
| 146 | + |
| 147 | + def read_from_json(self, filename: str) -> None: |
| 148 | + super().read_from_json(filename) |
| 149 | + meta = self.signed['meta'] |
| 150 | + for target_role in meta: |
| 151 | + version = meta[target_role]['version'] |
| 152 | + length = meta[target_role].get('length') |
| 153 | + hashes = meta[target_role].get('hashes') |
| 154 | + self.targets_fileinfo[target_role] = tuf.formats.make_metadata_fileinfo(version, length, hashes) |
144 | 155 |
|
145 |
| - # FIXME |
146 | 156 | def signable(self):
|
147 |
| - return generate_snapshot_metadata() |
| 157 | + # TODO: probably want to generalise this, a @property.getter in Metadata? |
| 158 | + expires = self.expiration.replace(tzinfo=None).isoformat()+'Z' |
| 159 | + return tuf.formats.build_dict_conforming_to_schema( |
| 160 | + tuf.formats.SNAPSHOT_SCHEMA, version=self.version, |
| 161 | + expires=expires, meta=self.targets_fileinfo) |
148 | 162 |
|
149 | 163 | # Add or update metadata about the targets metadata.
|
150 | 164 | def update(self, rolename: str, version: int, length: Optional[int] = None, hashes: Optional[JsonDict] = None):
|
151 |
| - raise NotImplementedError() |
| 165 | + self.targets_fileinfo[f'{rolename}.json'] = tuf.formats.make_metadata_fileinfo(version, length, hashes) |
152 | 166 |
|
153 | 167 | class Targets(Metadata):
|
154 | 168 | def __init__(self, consistent_snapshot: bool = True, expiration: relativedelta = relativedelta(days=1), keyring: Keyring = None, version: int = 1):
|
|
0 commit comments