summaryrefslogtreecommitdiff
path: root/vendor/acme-client/lib/acme/client/resources/authorization.rb
blob: 9ca2e76936de4b8638c8203083c19677de38c589 (plain)
1
2
3
4
5
6
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
class Acme::Client::Resources::Authorization
  HTTP01 = Acme::Client::Resources::Challenges::HTTP01
  DNS01 = Acme::Client::Resources::Challenges::DNS01
  TLSSNI01 = Acme::Client::Resources::Challenges::TLSSNI01

  attr_reader :client, :uri, :domain, :status, :expires, :http01, :dns01, :tls_sni01

  def initialize(client, uri, response)
    @client = client
    @uri = uri
    assign_attributes(response.body)
  end

  def verify_status
    response = @client.connection.get(@uri)

    assign_attributes(response.body)
    status
  end

  private

  def assign_attributes(body)
    @expires = Time.iso8601(body['expires']) if body.key? 'expires'
    @domain = body['identifier']['value']
    @status = body['status']
    assign_challenges(body['challenges'])
  end

  def assign_challenges(challenges)
    challenges.each do |attributes|
      challenge = case attributes.fetch('type')
                  when 'http-01'
                    @http01 ||= HTTP01.new(self)
                  when 'dns-01'
                    @dns01 ||= DNS01.new(self)
                  when 'tls-sni-01'
                    @tls_sni01 ||= TLSSNI01.new(self)
      end

      challenge.assign_attributes(attributes) if challenge
    end
  end
end