namespace Binman { public class BlobStore { public ManifestFile manifest { get; private set; } private ManifestHeader manifest_header; public BlobStore(ManifestFile manifest, ManifestHeader? header = null) throws Error { this.manifest = manifest; this.manifest_header = header ?? manifest.read_header(); } public string get_path_for_discriptor(ManifestFileDescriptor descriptor) { var filename = descriptor.checksum.to_base64().replace("/", "_") + @"-$(descriptor.size)"; return Path.build_filename("/var/binman/", manifest_header.name, "blob", filename); } public File get_file_for_descriptor(ManifestFileDescriptor descriptor) { var file = File.new_for_path(get_path_for_discriptor(descriptor)); return file; } public bool has_descriptor(ManifestFileDescriptor descriptor, bool verify_checksum = false) { var file = get_file_for_descriptor(descriptor); if(!file.query_exists()) { return false; } if(!verify_checksum) { return true; } try { return Applicator.calculate_file_checksum(file.get_path()).equals(descriptor.checksum); } catch (Error e) { warning("Failed to verify file in blob storage: " + e.message); return false; } } } }