push_package 0.1.3 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 92b42abb04c7954bc8d7839c005adc487cadb7ed
4
- data.tar.gz: 851ae8a649b114587915478ffcefb7178ec51a0a
3
+ metadata.gz: cc872d152c7700bd4e120c861fc8a41ae4799d43
4
+ data.tar.gz: a9d3e1266b6f6a7ec9e4a5cf3ad04e58e84de68e
5
5
  SHA512:
6
- metadata.gz: 5401e2d4e1cf6c591a136bd71b987d10f16c4f8c153a5066c6ce59b44488b1fff8e270af2e696cdfc6999bf6c3be474e99f6d1131e6e04ca3d6ea173503b6cec
7
- data.tar.gz: 69c9e4011e20e41ba83255fd2304614a9426493c402c6725c2fbaadfaba876075fc997443fd03518581ee8dd514b3b1aa28ebcbe9c04827f89006e59e3f01957
6
+ metadata.gz: e527193e4a22d908ba95ece1deb457501dd3c720642d498d6dfe45d98ab98fb3bc55c1bdf5bae0e0b448837a7c6f048217e403e5f35a36fab2c7ed85f5d6d86b
7
+ data.tar.gz: 57c8e51d968c9de7728722c14b4a602e34d2037aea375c47ee1f8c1f449246cbc4352676a9a810aa7435d09ab8ae829039acafd60dc00f1d6c104aaf02a6d7fb
data/.travis.yml CHANGED
@@ -7,6 +7,7 @@ rvm:
7
7
  - 2.1.5
8
8
  - 2.2.3
9
9
  - jruby-19mode
10
+ sudo: false
10
11
  notifications:
11
12
  email:
12
13
  - adam.v.duke@gmail.com
data/README.md CHANGED
@@ -21,6 +21,9 @@ This gem provides a Ruby library and command line tool for creating a push packa
21
21
 
22
22
  You must obtain a Website Push certificate from apple which requires a iOS developer license or a Mac developer license
23
23
 
24
+ [Starting February 2016](https://developer.apple.com/support/certificates/expiration/), you will also need a copy of the
25
+ Apple intermediate cert ([WWDR Certificate, expiring 02/07/23](https://developer.apple.com/certificationauthority/AppleWWDRCA.cer))
26
+
24
27
  ```ruby
25
28
  require 'push_package'
26
29
 
@@ -35,7 +38,8 @@ website_params = {
35
38
 
36
39
  iconset_path = 'path/to/iconset'
37
40
  certificate = 'path/to/certificate.p12' # or certificate_string
38
- package = PushPackage.new(website_params, iconset_path, certificate, 'optional cert password')
41
+ intermediate_cert = 'path/to/AppleWWDRCA.cer'
42
+ package = PushPackage.new(website_params, iconset_path, certificate, 'optional cert password', intermediate_cert)
39
43
  package.save('path/to/save')
40
44
 
41
45
  ```
data/lib/push_package.rb CHANGED
@@ -15,7 +15,7 @@ class PushPackage
15
15
 
16
16
  attr_reader :p12
17
17
 
18
- def initialize(website_params, iconset_path, certificate, password = nil)
18
+ def initialize(website_params, iconset_path, certificate, password = nil, intermediate_cert = nil)
19
19
  raise InvalidParameterError unless valid_website_params?(website_params)
20
20
  raise InvalidIconsetError unless valid_iconset?(iconset_path)
21
21
  raise ArgumentError unless certificate
@@ -35,6 +35,11 @@ class PushPackage
35
35
  cert_data.force_encoding(Encoding::ASCII_8BIT)
36
36
  end
37
37
  @p12 = OpenSSL::PKCS12.new(cert_data, password)
38
+
39
+ if intermediate_cert
40
+ intermediate_cert_data = File.read(intermediate_cert)
41
+ @extra_certs = [OpenSSL::X509::Certificate.new(intermediate_cert_data)]
42
+ end
38
43
  end
39
44
 
40
45
  def save(output_path = nil)
@@ -87,7 +92,7 @@ class PushPackage
87
92
 
88
93
  def signature
89
94
  #use the certificate to create a pkcs7 detached signature
90
- OpenSSL::PKCS7::sign(@p12.certificate, @p12.key, manifest_data, [], OpenSSL::PKCS7::BINARY | OpenSSL::PKCS7::DETACHED)
95
+ OpenSSL::PKCS7::sign(@p12.certificate, @p12.key, manifest_data, @extra_certs, OpenSSL::PKCS7::BINARY | OpenSSL::PKCS7::DETACHED)
91
96
  end
92
97
 
93
98
  def manifest_data
@@ -1,3 +1,3 @@
1
1
  class PushPackage
2
- VERSION = '0.1.3'.freeze
2
+ VERSION = '0.2.0'.freeze
3
3
  end
Binary file
@@ -73,6 +73,12 @@ describe PushPackage do
73
73
  PushPackage.new(website_params, iconset_path, '/some/file.p12')
74
74
  end.must_raise(Errno::ENOENT)
75
75
  end
76
+
77
+ it 'should support intermediate_cert path' do
78
+ lambda do
79
+ PushPackage.new(website_params, iconset_path, certificate, 'testing', '/some/file.crt')
80
+ end.must_raise(Errno::ENOENT)
81
+ end
76
82
  end
77
83
 
78
84
  describe 'website params with string keys' do
@@ -93,6 +99,12 @@ describe PushPackage do
93
99
  PushPackage.new(website_params_symbol_keys, iconset_path, '/some/file.p12')
94
100
  end.must_raise(Errno::ENOENT)
95
101
  end
102
+
103
+ it 'should support intermediate_cert path' do
104
+ lambda do
105
+ PushPackage.new(website_params_symbol_keys, iconset_path, certificate, 'testing', '/some/file.crt')
106
+ end.must_raise(Errno::ENOENT)
107
+ end
96
108
  end
97
109
  end
98
110
 
@@ -173,5 +185,24 @@ describe PushPackage do
173
185
  OpenSSL::PKCS7::DETACHED
174
186
  ).must_equal true
175
187
  end
188
+
189
+ it 'should have no extra certs in signature' do
190
+ extracted_package.must_include('signature')
191
+ signature = File.read(tmp_path + '/signature')
192
+ p7 = OpenSSL::PKCS7.new(signature)
193
+ p7.certificates().size.must_equal 1
194
+ end
195
+
196
+ describe 'when intermediate_cert given' do
197
+ let(:intermediate_cert) { File.open(fixture_path('intermediate.crt')) }
198
+ let(:push_package) { PushPackage.new(website_params, iconset_path, certificate, 'testing', intermediate_cert) }
199
+
200
+ it 'should have one extra cert in signature' do
201
+ extracted_package.must_include('signature')
202
+ signature = File.read(tmp_path + '/signature')
203
+ p7 = OpenSSL::PKCS7.new(signature)
204
+ p7.certificates().size.must_equal 2
205
+ end
206
+ end
176
207
  end
177
208
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: push_package
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefan Natchev
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-12-11 00:00:00.000000000 Z
12
+ date: 2016-01-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rubyzip
@@ -92,6 +92,7 @@ files:
92
92
  - spec/fixtures/iconset/icon_16x16@2x.png
93
93
  - spec/fixtures/iconset/icon_32x32.png
94
94
  - spec/fixtures/iconset/icon_32x32@2x.png
95
+ - spec/fixtures/intermediate.crt
95
96
  - spec/fixtures/localhost.crt
96
97
  - spec/fixtures/localhost.csr
97
98
  - spec/fixtures/localhost.key
@@ -120,7 +121,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
120
121
  version: '0'
121
122
  requirements: []
122
123
  rubyforge_project:
123
- rubygems_version: 2.0.14
124
+ rubygems_version: 2.5.1
124
125
  signing_key:
125
126
  specification_version: 4
126
127
  summary: A gem for creating Safari push notification push packages.
@@ -131,6 +132,7 @@ test_files:
131
132
  - spec/fixtures/iconset/icon_16x16@2x.png
132
133
  - spec/fixtures/iconset/icon_32x32.png
133
134
  - spec/fixtures/iconset/icon_32x32@2x.png
135
+ - spec/fixtures/intermediate.crt
134
136
  - spec/fixtures/localhost.crt
135
137
  - spec/fixtures/localhost.csr
136
138
  - spec/fixtures/localhost.key