Class: HTTP::Security::Headers::PublicKeyPins

Inherits:
Object
  • Object
show all
Defined in:
lib/http/security/headers/public_key_pins.rb

Direct Known Subclasses

PublicKeyPinsReportOnly

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ PublicKeyPins

Returns a new instance of PublicKeyPins.



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/http/security/headers/public_key_pins.rb', line 15

def initialize(options={})
  @pin = {}

  options.each do |key,value|
    if (key.kind_of?(Symbol) && key =~ /^pin_/)
      @pin[key[4..-1].to_sym] = Array(value)
    elsif (key.kind_of?(String) && key.start_with?('pin-'))
      @pin[key[4..-1]] = Array(value)
    end
  end

  @max_age             = options[:max_age]
  @include_sub_domains = options[:includesubdomains]
  @report_uri          = options[:report_uri]
  @strict              = options[:strict]
end

Instance Attribute Details

#max_ageInteger (readonly)

Returns:

  • (Integer)


10
11
12
# File 'lib/http/security/headers/public_key_pins.rb', line 10

def max_age
  @max_age
end

#pinHash{Symbol,String => Array<String>} (readonly)

Returns:

  • (Hash{Symbol,String => Array<String>})


7
8
9
# File 'lib/http/security/headers/public_key_pins.rb', line 7

def pin
  @pin
end

#report_uriURI::HTTP (readonly)

Returns:

  • (URI::HTTP)


13
14
15
# File 'lib/http/security/headers/public_key_pins.rb', line 13

def report_uri
  @report_uri
end

Instance Method Details

#include_sub_domains?Boolean

Returns:

  • (Boolean)


32
33
34
# File 'lib/http/security/headers/public_key_pins.rb', line 32

def include_sub_domains?
  !!@include_sub_domains
end

#strict?Boolean

Returns:

  • (Boolean)


36
37
38
# File 'lib/http/security/headers/public_key_pins.rb', line 36

def strict?
  !!@strict
end

#to_sObject



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/http/security/headers/public_key_pins.rb', line 40

def to_s
  directives = []

  @pin.each do |algorithm,fingerprints|
    Array(fingerprints).each do |fingerprint|
      directives << "pin-#{algorithm}=#{fingerprint.dump}"
    end
  end

  directives << "max-age=#{@max_age}"           if @max_age
  directives << "includeSubdomains"             if @include_sub_domains
  directives << "report-uri=\"#{@report_uri}\"" if @report_uri
  directives << "strict"                        if @strict

  return directives.join('; ')
end