Class: Puppet::FileServing::HttpMetadata

Inherits:
Metadata show all
Defined in:
lib/puppet/file_serving/http_metadata.rb

Overview

Simplified metadata representation, suitable for the information that is available from HTTP headers.

Constant Summary

Constants inherited from Metadata

Metadata::PARAM_ORDER

Constants included from Indirector

Indirector::BadNameRegexp

Constants included from Util::Checksums

Util::Checksums::KNOWN_CHECKSUMS

Instance Attribute Summary

Attributes inherited from Metadata

#checksum, #checksum_type, #content_uri, #destination, #ftype, #group, #mode, #owner, #path, #source_permissions

Attributes inherited from Base

#links, #path, #relative_path, #source

Instance Method Summary collapse

Methods inherited from Metadata

#collect_stat, from_data_hash, #to_data_hash

Methods included from Indirector

configure_routes, #indirects

Methods included from Util::Checksums

checksum?, checksum_file, checksum_stream, ctime, ctime?, ctime_file, ctime_stream, known_checksum_types, md5, md5?, md5_file, md5_hex_length, md5_stream, md5lite, md5lite?, md5lite_file, md5lite_hex_length, md5lite_stream, mtime, mtime?, mtime_file, mtime_stream, none, none?, none_file, none_stream, sha1, sha1?, sha1_file, sha1_hex_length, sha1_stream, sha1lite, sha1lite?, sha1lite_file, sha1lite_hex_length, sha1lite_stream, sha224, sha224?, sha224_file, sha224_hex_length, sha224_stream, sha256, sha256?, sha256_file, sha256_hex_length, sha256_stream, sha256lite, sha256lite?, sha256lite_file, sha256lite_hex_length, sha256lite_stream, sha384, sha384?, sha384_file, sha384_hex_length, sha384_stream, sha512, sha512?, sha512_file, sha512_hex_length, sha512_stream, sumdata, sumtype, valid_checksum?

Methods inherited from Base

absolute?, #exist?, #full_path, #stat, #to_data_hash

Constructor Details

#initialize(http_response, path = '/dev/null') ⇒ HttpMetadata

Returns a new instance of HttpMetadata.


7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/puppet/file_serving/http_metadata.rb', line 7

def initialize(http_response, path = '/dev/null')
  super(path)

  # ignore options that do not apply to HTTP metadata
  @owner = @group = @mode = nil

  # hash available checksums for eventual collection
  @checksums = {}
  # use a default mtime in case there is no usable HTTP header
  @checksums[:mtime] = "{mtime}#{Time.now}"

  # RFC-1864, deprecated in HTTP/1.1 due to partial responses
  checksum = http_response['content-md5']
  if checksum
    # convert base64 digest to hex
    checksum = checksum.unpack("m").first.unpack("H*").first
    @checksums[:md5] = "{md5}#{checksum}"
  end

  {
    md5: 'X-Checksum-Md5',
    sha1: 'X-Checksum-Sha1',
    sha256: 'X-Checksum-Sha256'
  }.each_pair do |checksum_type, header|
    checksum = http_response[header]
    if checksum
      @checksums[checksum_type] = "{#{checksum_type}}#{checksum}"
    end
  end

  last_modified = http_response['last-modified']
  if last_modified
    mtime = DateTime.httpdate(last_modified).to_time
    @checksums[:mtime] = "{mtime}#{mtime.utc}"
  end

  @ftype = 'file'

  self
end

Instance Method Details

#collectObject

Override of the parent class method. Does not call super! We can only return metadata that was extracted from the HTTP headers during #initialize.


51
52
53
54
55
56
57
58
59
# File 'lib/puppet/file_serving/http_metadata.rb', line 51

def collect
  # Prefer the checksum_type from the indirector request options
  # but fall back to the alternative otherwise
  [ @checksum_type, :md5, :sha256, :sha1, :mtime ].each do |type|
    @checksum_type = type
    @checksum = @checksums[type]
    break if @checksum
  end
end