From 4fcf8608c994fa721cee388fd4c0607b6791df26 Mon Sep 17 00:00:00 2001 From: Stefan Natchev Date: Tue, 23 Jun 2015 11:13:35 -0400 Subject: [PATCH] fixes issue #45 - passing a CSR from a file as a String --- lib/spaceship/certificate.rb | 3 +++ spec/certificate_spec.rb | 19 +++++++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/lib/spaceship/certificate.rb b/lib/spaceship/certificate.rb index 1aacec1..c93ae66 100644 --- a/lib/spaceship/certificate.rb +++ b/lib/spaceship/certificate.rb @@ -235,6 +235,9 @@ def create!(csr: nil, bundle_id: nil) app_id = app.app_id end + # ensure csr is a OpenSSL::X509::Request + csr = OpenSSL::X509::Request.new(csr) if csr.is_a?(String) + # if this succeeds, we need to save the .cer and the private key in keychain access or wherever they go in linux response = client.create_certificate!(type, csr.to_pem, app_id) # munge the response to make it work for the factory diff --git a/spec/certificate_spec.rb b/spec/certificate_spec.rb index 72e9dca..1d567be 100644 --- a/spec/certificate_spec.rb +++ b/spec/certificate_spec.rb @@ -77,13 +77,28 @@ expect(client).to receive(:create_certificate!).with('3BQKVH9I2X', /BEGIN CERTIFICATE REQUEST/, 'B7JBD8LHAA') { JSON.parse(read_fixture_file('certificateCreate.certRequest.json')) } - certificate = Spaceship::Certificate::ProductionPush.create!(csr: Spaceship::Certificate.create_certificate_signing_request.first, bundle_id: 'net.sunapps.151') + csr, pkey = Spaceship::Certificate.create_certificate_signing_request + certificate = Spaceship::Certificate::ProductionPush.create!(csr: csr, bundle_id: 'net.sunapps.151') expect(certificate).to be_instance_of(Spaceship::Certificate::ProductionPush) end + it 'should create a new certificate using a CSR from a file' do + expect(client).to receive(:create_certificate!).with('3BQKVH9I2X', /BEGIN CERTIFICATE REQUEST/, 'B7JBD8LHAA') { + JSON.parse(read_fixture_file('certificateCreate.certRequest.json')) + } + csr, pkey = Spaceship::Certificate.create_certificate_signing_request + Tempfile.open('csr') do |f| + f.write(csr.to_pem) + f.rewind + pem = f.read + Spaceship::Certificate::ProductionPush.create!(csr: pem, bundle_id: 'net.sunapps.151') + end + end + it 'raises an error if the user wants to create a certificate for a non-existing app' do expect { - Spaceship::Certificate::ProductionPush.create!(csr: Spaceship::Certificate.create_certificate_signing_request.first, bundle_id: 'notExisting') + csr, pkey = Spaceship::Certificate.create_certificate_signing_request + Spaceship::Certificate::ProductionPush.create!(csr: csr, bundle_id: 'notExisting') }.to raise_error "Could not find app with bundle id 'notExisting'" end end