BlobStorage.vala 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. namespace Binman {
  2. public class BlobStore {
  3. public ManifestFile manifest { get; private set; }
  4. private ManifestHeader manifest_header;
  5. public BlobStore(ManifestFile manifest, ManifestHeader? header = null) throws Error {
  6. this.manifest = manifest;
  7. this.manifest_header = header ?? manifest.read_header();
  8. }
  9. public string get_path_for_discriptor(ManifestFileDescriptor descriptor) {
  10. var filename = descriptor.checksum.to_base64().replace("/", "_") + @"-$(descriptor.size)";
  11. return Path.build_filename("/var/binman/", manifest_header.name, "blob", filename);
  12. }
  13. public File get_file_for_descriptor(ManifestFileDescriptor descriptor) {
  14. var file = File.new_for_path(get_path_for_discriptor(descriptor));
  15. return file;
  16. }
  17. public bool has_descriptor(ManifestFileDescriptor descriptor, bool verify_checksum = false) {
  18. var file = get_file_for_descriptor(descriptor);
  19. if(!file.query_exists()) {
  20. return false;
  21. }
  22. if(!verify_checksum) {
  23. return true;
  24. }
  25. try {
  26. return Applicator.calculate_file_checksum(file.get_path()).equals(descriptor.checksum);
  27. }
  28. catch (Error e) {
  29. warning("Failed to verify file in blob storage: " + e.message);
  30. return false;
  31. }
  32. }
  33. }
  34. }