Class: MDQT::Client::MetadataFile

Inherits:
Object
  • Object
show all
Defined in:
lib/mdqt/client/metadata_file.rb

Instance Method Summary collapse

Constructor Details

#initialize(filename, options = {}) ⇒ MetadataFile

Returns a new instance of MetadataFile.



8
9
10
11
12
13
14
15
# File 'lib/mdqt/client/metadata_file.rb', line 8

def initialize(filename, options = {})
  @filename = File.absolute_path(filename)
  @data = nil
  @expires = nil
  @etag = nil
  @last_modified = nil
  @explanation = {}
end

Instance Method Details

#aggregate?Boolean

Returns:

  • (Boolean)


56
57
58
# File 'lib/mdqt/client/metadata_file.rb', line 56

def aggregate?
  type == :aggregate
end

#basenameObject



21
22
23
# File 'lib/mdqt/client/metadata_file.rb', line 21

def basename
  File.basename(filename)
end

#canonical_filenameObject



95
96
97
98
99
100
101
102
103
# File 'lib/mdqt/client/metadata_file.rb', line 95

def canonical_filename
  if identifier.empty?
    @filename = "aggregate-#{Digest::SHA1.hexdigest(@service)}.xml"
  else
    @filename ||= identifier.start_with?("{sha1}") ?
                    "#{@identifier.gsub("{sha1}", "")}.xml" :
                    "#{Digest::SHA1.hexdigest(@identifier)}.xml"
  end
end

#dataObject



38
39
40
# File 'lib/mdqt/client/metadata_file.rb', line 38

def data
  @data ||= File.read(filename)
end

#entity_idObject



29
30
31
32
# File 'lib/mdqt/client/metadata_file.rb', line 29

def entity_id
  raise "Incorrect metadata file type - aggregate" if aggregate?
  @entity_id ||= extract_entity_id
end

#entity_idsObject



34
35
36
# File 'lib/mdqt/client/metadata_file.rb', line 34

def entity_ids
  @entity_ids ||= extract_entity_ids
end

#etagObject



64
65
66
# File 'lib/mdqt/client/metadata_file.rb', line 64

def etag
  @etag
end

#expiresObject



60
61
62
# File 'lib/mdqt/client/metadata_file.rb', line 60

def expires
  @expires
end

#filenameObject



17
18
19
# File 'lib/mdqt/client/metadata_file.rb', line 17

def filename
  @filename
end

#identifierObject



25
26
27
# File 'lib/mdqt/client/metadata_file.rb', line 25

def identifier
  entity_id
end

#last_modifiedObject



68
69
70
# File 'lib/mdqt/client/metadata_file.rb', line 68

def last_modified
  @last_modified
end

#linknameObject



105
106
107
108
109
110
111
# File 'lib/mdqt/client/metadata_file.rb', line 105

def linkname
  if aggregate?
    raise "Not supported for aggregates"
  else
    "#{Digest::SHA1.hexdigest(entity_id)}.xml"
  end
end

#ok?Boolean

Returns:

  • (Boolean)


72
73
74
# File 'lib/mdqt/client/metadata_file.rb', line 72

def ok?
  @ok
end

#readable?Boolean

Returns:

  • (Boolean)


42
43
44
# File 'lib/mdqt/client/metadata_file.rb', line 42

def readable?
  File.readable?(filename)
end

#signed?Boolean

Returns:

  • (Boolean)


76
77
78
# File 'lib/mdqt/client/metadata_file.rb', line 76

def signed?
  @data.include? "Signature" # This is... not great
end

#symlink?Boolean

Returns:

  • (Boolean)


113
114
115
# File 'lib/mdqt/client/metadata_file.rb', line 113

def symlink?
  File.symlink?(filename)
end

#turd?Boolean

Returns:

  • (Boolean)


46
47
48
49
50
# File 'lib/mdqt/client/metadata_file.rb', line 46

def turd?
  return true if basename.end_with?("~")
  return true if basename.end_with?(".bak")
  false
end

#typeObject



52
53
54
# File 'lib/mdqt/client/metadata_file.rb', line 52

def type
  @type ||= calculate_type
end

#valid?Boolean

Returns:

  • (Boolean)


85
86
87
88
# File 'lib/mdqt/client/metadata_file.rb', line 85

def valid?
  validator = MetadataValidator.new
  validator.valid?(self)
end

#validation_errorObject



90
91
92
93
# File 'lib/mdqt/client/metadata_file.rb', line 90

def validation_error
  validator = MetadataValidator.new
  validator.validation_error(self)
end

#verified_signature?(certs = [], _ = {}) ⇒ Boolean

Returns:

  • (Boolean)


80
81
82
83
# File 'lib/mdqt/client/metadata_file.rb', line 80

def verified_signature?(certs = [], _ = {})
  validator = MetadataValidator.new(certs: [certs].flatten)
  validator.verified_signature?(self)
end