push_package 0.1.3 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -0
- data/README.md +5 -1
- data/lib/push_package.rb +7 -2
- data/lib/push_package/version.rb +1 -1
- data/spec/fixtures/intermediate.crt +0 -0
- data/spec/push_package_spec.rb +31 -0
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cc872d152c7700bd4e120c861fc8a41ae4799d43
|
4
|
+
data.tar.gz: a9d3e1266b6f6a7ec9e4a5cf3ad04e58e84de68e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e527193e4a22d908ba95ece1deb457501dd3c720642d498d6dfe45d98ab98fb3bc55c1bdf5bae0e0b448837a7c6f048217e403e5f35a36fab2c7ed85f5d6d86b
|
7
|
+
data.tar.gz: 57c8e51d968c9de7728722c14b4a602e34d2037aea375c47ee1f8c1f449246cbc4352676a9a810aa7435d09ab8ae829039acafd60dc00f1d6c104aaf02a6d7fb
|
data/.travis.yml
CHANGED
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
|
-
|
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,
|
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
|
data/lib/push_package/version.rb
CHANGED
Binary file
|
data/spec/push_package_spec.rb
CHANGED
@@ -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.
|
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:
|
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.
|
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
|