Class: Acmesmith::OrderingService
- Inherits:
-
Object
- Object
- Acmesmith::OrderingService
- Defined in:
- lib/acmesmith/ordering_service.rb
Defined Under Namespace
Classes: NotCompleted
Instance Attribute Summary collapse
-
#acme ⇒ Object
readonly
Returns the value of attribute acme.
-
#chain_preferences ⇒ Object
readonly
Returns the value of attribute chain_preferences.
-
#challenge_responder_rules ⇒ Object
readonly
Returns the value of attribute challenge_responder_rules.
-
#identifiers ⇒ Object
readonly
Returns the value of attribute identifiers.
-
#not_after ⇒ Object
readonly
Returns the value of attribute not_after.
-
#not_before ⇒ Object
readonly
Returns the value of attribute not_before.
-
#private_key ⇒ Object
readonly
Returns the value of attribute private_key.
Instance Method Summary collapse
- #certificate ⇒ Object
- #common_name ⇒ String
- #csr ⇒ Acme::Client::CertificateRequest
- #ensure_authorization ⇒ Object
- #finalize_order ⇒ Object
-
#initialize(acme:, identifiers:, private_key:, challenge_responder_rules:, chain_preferences:, not_before: nil, not_after: nil) ⇒ OrderingService
constructor
A new instance of OrderingService.
-
#order ⇒ Object
Acme::Client::Resources::Order[].
-
#pem_chain ⇒ Object
String.
- #perform! ⇒ Object
- #sans ⇒ Array<String>
- #wait_order_for_complete ⇒ Object
Constructor Details
#initialize(acme:, identifiers:, private_key:, challenge_responder_rules:, chain_preferences:, not_before: nil, not_after: nil) ⇒ OrderingService
Returns a new instance of OrderingService.
16 17 18 19 20 21 22 23 24 |
# File 'lib/acmesmith/ordering_service.rb', line 16 def initialize(acme:, identifiers:, private_key:, challenge_responder_rules:, chain_preferences:, not_before: nil, not_after: nil) @acme = acme @identifiers = identifiers @private_key = private_key @challenge_responder_rules = challenge_responder_rules @chain_preferences = chain_preferences @not_before = not_before @not_after = not_after end |
Instance Attribute Details
#acme ⇒ Object (readonly)
Returns the value of attribute acme.
26 27 28 |
# File 'lib/acmesmith/ordering_service.rb', line 26 def acme @acme end |
#chain_preferences ⇒ Object (readonly)
Returns the value of attribute chain_preferences.
26 27 28 |
# File 'lib/acmesmith/ordering_service.rb', line 26 def chain_preferences @chain_preferences end |
#challenge_responder_rules ⇒ Object (readonly)
Returns the value of attribute challenge_responder_rules.
26 27 28 |
# File 'lib/acmesmith/ordering_service.rb', line 26 def challenge_responder_rules @challenge_responder_rules end |
#identifiers ⇒ Object (readonly)
Returns the value of attribute identifiers.
26 27 28 |
# File 'lib/acmesmith/ordering_service.rb', line 26 def identifiers @identifiers end |
#not_after ⇒ Object (readonly)
Returns the value of attribute not_after.
26 27 28 |
# File 'lib/acmesmith/ordering_service.rb', line 26 def not_after @not_after end |
#not_before ⇒ Object (readonly)
Returns the value of attribute not_before.
26 27 28 |
# File 'lib/acmesmith/ordering_service.rb', line 26 def not_before @not_before end |
#private_key ⇒ Object (readonly)
Returns the value of attribute private_key.
26 27 28 |
# File 'lib/acmesmith/ordering_service.rb', line 26 def private_key @private_key end |
Instance Method Details
#certificate ⇒ Object
91 92 93 |
# File 'lib/acmesmith/ordering_service.rb', line 91 def certificate @certificate or raise NotCompleted, "not completed yet" end |
#common_name ⇒ String
101 102 103 |
# File 'lib/acmesmith/ordering_service.rb', line 101 def common_name identifiers.first end |
#csr ⇒ Acme::Client::CertificateRequest
111 112 113 |
# File 'lib/acmesmith/ordering_service.rb', line 111 def csr @csr ||= Acme::Client::CertificateRequest.new(subject: { common_name: common_name }, names: sans, private_key: private_key) end |
#ensure_authorization ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/acmesmith/ordering_service.rb', line 53 def return if order..empty? || order.status == 'ready' puts "=> Looking for required domain authorizations" puts order..map(&:domain).each do |domain| puts " * #{domain}" end puts AuthorizationService.new(challenge_responder_rules, order.).perform! end |
#finalize_order ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/acmesmith/ordering_service.rb', line 65 def finalize_order puts puts "=> Finalizing the order" puts puts csr.csr.to_pem puts print " * Requesting..." order.finalize(csr: csr) puts" [ ok ]" end |
#order ⇒ Object
Returns Acme::Client::Resources::Order[].
96 97 98 |
# File 'lib/acmesmith/ordering_service.rb', line 96 def order @order or raise "BUG: order not yet generated" end |
#pem_chain ⇒ Object
Returns String.
86 87 88 89 |
# File 'lib/acmesmith/ordering_service.rb', line 86 def pem_chain url = order.certificate_url or raise NotCompleted, "not completed yet" CertificateRetrievingService.new(acme, common_name, url, chain_preferences: chain_preferences).pem_chain end |
#perform! ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/acmesmith/ordering_service.rb', line 28 def perform! puts "=> Ordering a certificate for the following identifiers:" puts puts " * CN: #{common_name}" sans.each do |san| puts " * SAN: #{san}" end puts puts "=> Placing an order" @order = acme.new_order(identifiers: identifiers, not_before: not_before, not_after: not_after) puts " * URL: #{order.url}" () finalize_order() wait_order_for_complete() @certificate = Certificate.by_issuance(pem_chain, csr) puts puts "=> Certificate issued" nil end |
#sans ⇒ Array<String>
106 107 108 |
# File 'lib/acmesmith/ordering_service.rb', line 106 def sans identifiers[1..-1] end |
#wait_order_for_complete ⇒ Object
77 78 79 80 81 82 83 |
# File 'lib/acmesmith/ordering_service.rb', line 77 def wait_order_for_complete while %w(ready processing).include?(order.status) order.reload() puts " * Waiting for complete: status=#{order.status}" sleep 2 end end |