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.
-
#common_name ⇒ Object
readonly
Returns the value of attribute common_name.
-
#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.
-
#profile_rules ⇒ Object
readonly
Returns the value of attribute profile_rules.
Instance Method Summary collapse
- #certificate ⇒ Object
- #csr ⇒ Acme::Client::CertificateRequest
- #ensure_authorization ⇒ Object
- #finalize_order ⇒ Object
-
#initialize(acme:, common_name:, identifiers:, private_key:, challenge_responder_rules:, chain_preferences:, profile_rules: [], 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
- #profile ⇒ Object
- #sans ⇒ Array<String>
- #wait_order_for_complete ⇒ Object
Constructor Details
#initialize(acme:, common_name:, identifiers:, private_key:, challenge_responder_rules:, chain_preferences:, profile_rules: [], not_before: nil, not_after: nil) ⇒ OrderingService
Returns a new instance of OrderingService.
17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/acmesmith/ordering_service.rb', line 17 def initialize(acme:, common_name:, identifiers:, private_key:, challenge_responder_rules:, chain_preferences:, profile_rules: [], not_before: nil, not_after: nil) @acme = acme @common_name = common_name @identifiers = identifiers @private_key = private_key @challenge_responder_rules = challenge_responder_rules @chain_preferences = chain_preferences @profile_rules = profile_rules @not_before = not_before @not_after = not_after @order_url = nil # https://github.com/unixcharles/acme-client/pull/263 end |
Instance Attribute Details
#acme ⇒ Object (readonly)
Returns the value of attribute acme.
31 32 33 |
# File 'lib/acmesmith/ordering_service.rb', line 31 def acme @acme end |
#chain_preferences ⇒ Object (readonly)
Returns the value of attribute chain_preferences.
31 32 33 |
# File 'lib/acmesmith/ordering_service.rb', line 31 def chain_preferences @chain_preferences end |
#challenge_responder_rules ⇒ Object (readonly)
Returns the value of attribute challenge_responder_rules.
31 32 33 |
# File 'lib/acmesmith/ordering_service.rb', line 31 def challenge_responder_rules @challenge_responder_rules end |
#common_name ⇒ Object (readonly)
Returns the value of attribute common_name.
31 32 33 |
# File 'lib/acmesmith/ordering_service.rb', line 31 def common_name @common_name end |
#identifiers ⇒ Object (readonly)
Returns the value of attribute identifiers.
31 32 33 |
# File 'lib/acmesmith/ordering_service.rb', line 31 def identifiers @identifiers end |
#not_after ⇒ Object (readonly)
Returns the value of attribute not_after.
31 32 33 |
# File 'lib/acmesmith/ordering_service.rb', line 31 def not_after @not_after end |
#not_before ⇒ Object (readonly)
Returns the value of attribute not_before.
31 32 33 |
# File 'lib/acmesmith/ordering_service.rb', line 31 def not_before @not_before end |
#private_key ⇒ Object (readonly)
Returns the value of attribute private_key.
31 32 33 |
# File 'lib/acmesmith/ordering_service.rb', line 31 def private_key @private_key end |
#profile_rules ⇒ Object (readonly)
Returns the value of attribute profile_rules.
31 32 33 |
# File 'lib/acmesmith/ordering_service.rb', line 31 def profile_rules @profile_rules end |
Instance Method Details
#certificate ⇒ Object
106 107 108 |
# File 'lib/acmesmith/ordering_service.rb', line 106 def certificate @certificate or raise NotCompleted, "not completed yet" end |
#csr ⇒ Acme::Client::CertificateRequest
125 126 127 |
# File 'lib/acmesmith/ordering_service.rb', line 125 def csr @csr ||= Acme::Client::CertificateRequest.new(subject: { common_name: common_name }, names: sans, private_key: private_key) end |
#ensure_authorization ⇒ Object
64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/acmesmith/ordering_service.rb', line 64 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
76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/acmesmith/ordering_service.rb', line 76 def finalize_order puts puts "=> Finalizing the order" puts puts csr.csr.to_pem puts print " * Requesting..." @order_url = order.url if defined?(Acme::Client::Error::OrderNotReloadable) order.finalize(csr: csr) puts" [ ok ]" end |
#order ⇒ Object
Returns Acme::Client::Resources::Order.
111 112 113 |
# File 'lib/acmesmith/ordering_service.rb', line 111 def order @order or raise "BUG: order not yet generated" end |
#pem_chain ⇒ Object
Returns String.
101 102 103 104 |
# File 'lib/acmesmith/ordering_service.rb', line 101 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
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/acmesmith/ordering_service.rb', line 33 def perform! puts "=> Ordering a certificate for the following identifiers:" puts puts " * CN: #{common_name}" sans.each do |san| puts " * SAN: #{san}" end resolved_profile = profile if resolved_profile puts puts " * Profile: #{resolved_profile}" end puts puts "=> Placing an order" @order = acme.new_order(identifiers: identifiers, not_before: not_before, not_after: not_after, profile: resolved_profile) puts " * URL: #{order.url}" () finalize_order() wait_order_for_complete() @certificate = Certificate.by_issuance(pem_chain, csr, name: common_name) puts puts "=> Certificate issued" nil end |
#profile ⇒ Object
120 121 122 |
# File 'lib/acmesmith/ordering_service.rb', line 120 def profile profile_rules.find { |rule| rule.filter.match?(common_name) }&.name end |
#sans ⇒ Array<String>
116 117 118 |
# File 'lib/acmesmith/ordering_service.rb', line 116 def sans identifiers[1..-1] end |
#wait_order_for_complete ⇒ Object
89 90 91 92 93 94 95 96 97 98 |
# File 'lib/acmesmith/ordering_service.rb', line 89 def wait_order_for_complete # Workaround for https://github.com/unixcharles/acme-client/pull/263 while %w(ready processing).include?(order.status) order.instance_variable_set(:@url, @order_url) if @order_url order.reload() puts " * Waiting for complete: status=#{order.status}" sleep 2 end end |