push_package 0.1.2 → 0.1.3

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 92b42abb04c7954bc8d7839c005adc487cadb7ed
4
+ data.tar.gz: 851ae8a649b114587915478ffcefb7178ec51a0a
5
+ SHA512:
6
+ metadata.gz: 5401e2d4e1cf6c591a136bd71b987d10f16c4f8c153a5066c6ce59b44488b1fff8e270af2e696cdfc6999bf6c3be474e99f6d1131e6e04ca3d6ea173503b6cec
7
+ data.tar.gz: 69c9e4011e20e41ba83255fd2304614a9426493c402c6725c2fbaadfaba876075fc997443fd03518581ee8dd514b3b1aa28ebcbe9c04827f89006e59e3f01957
@@ -1,10 +1,12 @@
1
1
  ---
2
2
  language: ruby
3
3
  rvm:
4
+ - 1.9.2
4
5
  - 1.9.3
5
- - jruby-19mode
6
- - rbx-19mode
7
6
  - 2.0.0
7
+ - 2.1.5
8
+ - 2.2.3
9
+ - jruby-19mode
8
10
  notifications:
9
11
  email:
10
12
  - adam.v.duke@gmail.com
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # Push Package
2
2
 
3
+ Build Status: [![Build Status](https://travis-ci.org/SymmetricInfinity/push_package.png?branch=master)](https://travis-ci.org/SymmetricInfinity/push_package)
4
+
3
5
  ## Purpose
4
6
 
5
7
  This gem provides a Ruby library and command line tool for creating a push package to be used for [Safari Push Notifications](https://developer.apple.com/library/mac/documentation/NetworkingInternet/Conceptual/NotificationProgrammingGuideForWebsites/PushNotifications/PushNotifications.html#//apple_ref/doc/uid/TP40013225-CH3-SW24).
@@ -17,8 +19,6 @@ This gem provides a Ruby library and command line tool for creating a push packa
17
19
 
18
20
  ## Notes:
19
21
 
20
- This gem depends on `zip` being in your shell's `PATH`
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
24
  ```ruby
@@ -45,6 +45,36 @@ $> push_package --website-json=./website.json --iconset-path=~/project/iconset -
45
45
  wrote: ./pushPackage.zip
46
46
  ```
47
47
 
48
+ ## Development/Test Certificates
49
+
50
+ ```shell
51
+ # verify the localhost.crt
52
+ openssl verify spec/fixtures/localhost.crt
53
+
54
+ # verify the localhost.csr
55
+ openssl req -text -noout -verify -in spec/fixtures/localhost.csr
56
+
57
+ # verify the localhost.key
58
+ openssl rsa -in spec/fixtures/localhost.key -check -noout
59
+
60
+ # print information about the certificate to STDOUT
61
+ openssl x509 -in spec/fixtures/localhost.crt -text -noout
62
+
63
+ # generate a new rsa key
64
+ openssl genrsa -out spec/fixtures/localhost.key 2048
65
+
66
+ # generate a new csr from using an existing key
67
+ openssl req -new -sha256 -key spec/fixtures/localhost.key -out spec/fixtures/localhost.csr
68
+
69
+ # generate a new certificate using an existing csr and private key
70
+ openssl x509 -req -days 3650 -in spec/fixtures/localhost.csr -signkey spec/fixtures/localhost.key -out spec/fixtures/localhost.crt
71
+
72
+ # export the certificate as a p12
73
+ # make sure to set the passphrase to 'testing' because the specs depend on it
74
+ openssl pkcs12 -export -out spec/fixtures/self-signed.p12 -inkey spec/fixtures/localhost.key -in spec/fixtures/localhost.crt
75
+
76
+ ```
77
+
48
78
  ## Contributing
49
79
 
50
80
  1. Fork it
@@ -98,8 +98,8 @@ class PushPackage
98
98
  end
99
99
 
100
100
  def valid_website_params?(params)
101
- REQUIRED_WEBSITE_PARAMS.all? do |param|
102
- params.keys.include?(param)
101
+ REQUIRED_WEBSITE_PARAMS.all? do |required_param|
102
+ params.keys.map(&:to_s).include?(required_param)
103
103
  end
104
104
  end
105
105
 
@@ -1,3 +1,3 @@
1
1
  class PushPackage
2
- VERSION = '0.1.2'.freeze
2
+ VERSION = '0.1.3'.freeze
3
3
  end
@@ -0,0 +1,19 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDJDCCAgwCCQD1K/B5O4YXDzANBgkqhkiG9w0BAQUFADBUMQswCQYDVQQGEwJV
3
+ UzELMAkGA1UECBMCTUExEjAQBgNVBAcTCUNhbWJyaWRnZTEQMA4GA1UEChMHVHdp
4
+ dHRlcjESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTE1MTIxMTE2MDUzNVoXDTI1MTIw
5
+ ODE2MDUzNVowVDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAk1BMRIwEAYDVQQHEwlD
6
+ YW1icmlkZ2UxEDAOBgNVBAoTB1R3aXR0ZXIxEjAQBgNVBAMTCWxvY2FsaG9zdDCC
7
+ ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOEGnmjMEgF9ZH9NVXE+IH9u
8
+ BaL9eafkLQkEcBR/9KNof5XexB23p3+x8L5nvf66cGTZwHMrQgvpOKaiAG3umMn+
9
+ hyLxO8BqiGO/VMuoHJnN+EX5BNt4lP+UPIQ426enm4bc15tvCTyENG4dE/+Adfjf
10
+ U4XWKysk1Zdx1tpboP/6bh6p0dCnbOo8J/F0KLFeKfnbShoVsSMqm547BVxMCbaV
11
+ N4tusSG9/YbtplaRxVhS9v+GoIxu7hlKM4I0c6iddyx6oLE0RepyIncJtB4fO/6J
12
+ HUsAlQDNAlP6vNnqsPWd7rcgtJGjuMbLB+yL9b68I20yc5ZnBpPCoP6cCzBmpuEC
13
+ AwEAATANBgkqhkiG9w0BAQUFAAOCAQEAkJYdqe18eotSa0Z/YfHFH4KTJDK0LDu5
14
+ 1ZD5yrr7LfFRt4OA51mG7ALcDpDKpdPlHVEJkZHHPXL0ykRnE3i8/t8RNE7E7SDV
15
+ 1sEJNPFZ/j2HR+eoUjYbT0oMt9+atj+M8Xqdj0EhBUuutf9aLFbyEPiN0ThFxoHx
16
+ /UeFPKwmAcL7qhKGCAOL399AAm7SO7g5S0TNGdRCvi+Nt+3xi35T6r3xaEjFcG3v
17
+ J3w4uXLNsG4A4888WkxdfPqDNVoYB1ddapLIiYSKqJQ68z2epuwI1H5fOeEnq3o8
18
+ WbXpGdELZuViIjFTgN2p23uR7vdHkPvBQgEpoLlZd5O/2IRHnjQpKQ==
19
+ -----END CERTIFICATE-----
@@ -0,0 +1,16 @@
1
+ -----BEGIN CERTIFICATE REQUEST-----
2
+ MIICmTCCAYECAQAwVDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAk1BMRIwEAYDVQQH
3
+ EwlDYW1icmlkZ2UxEDAOBgNVBAoTB1R3aXR0ZXIxEjAQBgNVBAMTCWxvY2FsaG9z
4
+ dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOEGnmjMEgF9ZH9NVXE+
5
+ IH9uBaL9eafkLQkEcBR/9KNof5XexB23p3+x8L5nvf66cGTZwHMrQgvpOKaiAG3u
6
+ mMn+hyLxO8BqiGO/VMuoHJnN+EX5BNt4lP+UPIQ426enm4bc15tvCTyENG4dE/+A
7
+ dfjfU4XWKysk1Zdx1tpboP/6bh6p0dCnbOo8J/F0KLFeKfnbShoVsSMqm547BVxM
8
+ CbaVN4tusSG9/YbtplaRxVhS9v+GoIxu7hlKM4I0c6iddyx6oLE0RepyIncJtB4f
9
+ O/6JHUsAlQDNAlP6vNnqsPWd7rcgtJGjuMbLB+yL9b68I20yc5ZnBpPCoP6cCzBm
10
+ puECAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4IBAQBF8S5/uUn3DnwaHJkkkUYIffKv
11
+ 7LuIebyesIWRu03ed80wT2Sy12kIQK/Y9vvRUtdSLI0pi2SCR15oeDwDvdVD/+kQ
12
+ 5sXuECfvby4bDgMSiHhE0IAwNYxIo4SOyBbkIV3ohcVaeVBlmwU/jkmm9fRJcWQe
13
+ ns52HdWvsKKaP5+KibnEW8cQGbxsSqpl2oPPf1N9SRMGOctj++JlomYPsM8AfZ8b
14
+ dlTik8W5NMroTDjDixpztybE0VPywp1iadc3ivZu93zi2pBrSou0e1Xt7TOuJpjr
15
+ MwKZ1+SJOxIxP8dBDJtXE/LpKFoyBLm6oIFkAXWBL1d9ajrVqjm7jV9ODx//
16
+ -----END CERTIFICATE REQUEST-----
@@ -0,0 +1,27 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIIEpQIBAAKCAQEA4QaeaMwSAX1kf01VcT4gf24Fov15p+QtCQRwFH/0o2h/ld7E
3
+ Hbenf7Hwvme9/rpwZNnAcytCC+k4pqIAbe6Yyf6HIvE7wGqIY79Uy6gcmc34RfkE
4
+ 23iU/5Q8hDjbp6ebhtzXm28JPIQ0bh0T/4B1+N9ThdYrKyTVl3HW2lug//puHqnR
5
+ 0Kds6jwn8XQosV4p+dtKGhWxIyqbnjsFXEwJtpU3i26xIb39hu2mVpHFWFL2/4ag
6
+ jG7uGUozgjRzqJ13LHqgsTRF6nIidwm0Hh87/okdSwCVAM0CU/q82eqw9Z3utyC0
7
+ kaO4xssH7Iv1vrwjbTJzlmcGk8Kg/pwLMGam4QIDAQABAoIBAQCxyy38NUkAvlda
8
+ MfsRZ3n71S1E86tcmO9wUX5Q5Cyhs94ixwkDRelk/m3ts0At9Jb7SAVDuekMSjBF
9
+ kHhwY3V7G80gMaP5SvMKhND1vJUkfNXuS2uoEKUBLtmFyvrag5ZhvznniJquovJe
10
+ EkGLva74fVObynT/OLI+X2bXzk/uDy/BiMrYyXWebAO/FLkSja5YECAFOr47B44+
11
+ jhhy1v5WdCisD+AfRkYhIQaXgY/Ni+sDImF9WwZQzkZ+/vztpYmzfELCe+9sy95B
12
+ TjeiuzJDZtROM//WfGx+9XpBl5BSQx0eyLunYmryP8jewRUWubOOddjSsxcl0HZF
13
+ RCHF1t/xAoGBAPm2iodooCCJ0QPpYoISbq1OJuW6qWa4DMyKImHPzd9w3zDb1bzg
14
+ gzevHC8rAxbZOGVrP0lSDd8x/dhIWWPu1W6LBTxhyzoZ8FhWSJ/fFUC0zgdkFHBg
15
+ QtDy5Xy7zOFC6hIBqzn9qrNrKTXQqnOd/x8JnqvCjA/c8I15ceCBXM51AoGBAOaw
16
+ 9oGtILuSCEgfGu4HderDQUw3ES/s2a+Bl48AlVEHvygo8+BepNFEMpW3QuKcDn9z
17
+ HjWYk9+L93pfCAvcg9Dq9GoJV4uSMpVG3UjJCfJve2FDAEO4ydDlrG3J/fGBWvqV
18
+ 1qTfW2DOjy6AtP1BsgaE3M95GwXHVxETBJuVLwE9AoGAK6GchNpgGC9caP2Pa8DC
19
+ u99K5pr93GfOPLLqHQMNKrxzEvtmVjE4XDNpjkhKquRbeUUK8sm2iMgYXYEOtWpW
20
+ upDp4koIE2fS2eyBlgWJlhvBYAM5mwUGx7GZLXk27Ckf8vN9so1DFURlF/UUw0zY
21
+ 9dhddA9zH5ZwJZgRsLOJvr0CgYEAgDaKSrg2IQmgoLTo+rIaz0eF2x4f50r0EZ8s
22
+ 5MWmN0re6ysXn/P6FnSYyKz594hUZnFMsO0EApKAEPsQNcdxW4O6I9TdWyz+AAlK
23
+ o1FYve1H3V6nnvvs7rU3iC1jff4u2ma8zRV2a+9hlK7j6H3Cu+zL7GOaqTOJKGwx
24
+ e2cGoOECgYEA2nG7rX7Xq8xa5WjeN1nnFVzmlj0iPqBEJNAXNQ+o9tsBPFm1rGlg
25
+ VszYIRfrtPFVtacCXOxBqGgIpFYKJr3MF+AEhU3e2ilJgO98HGBLRcX6AM73wfOq
26
+ SnyuQs9m2EyJyxoT17rm5TiSRRfnLxKeSSv/lpPV4kqkxLY3nreI0uY=
27
+ -----END RSA PRIVATE KEY-----
@@ -7,12 +7,23 @@ describe PushPackage do
7
7
 
8
8
  let(:website_params) do
9
9
  {
10
- 'websiteName' => 'Push Package Test',
11
- 'websitePushID' => 'web.com.symmetricinfinity.push_package',
12
- 'allowedDomains' => ['http://symmetricinfinity.com/push_package/', 'http://lvh.me'],
13
- 'urlFormatString' => 'http://symmetricinfinity.com/push_package/?%@=%@',
14
- 'authenticationToken' => 'nr2o1spn515949r5q54so22o8rq95575',
15
- 'webServiceURL' => 'https://api.zeropush.com/safari'
10
+ 'websiteName' => 'Push Package Test',
11
+ 'websitePushID' => 'web.com.symmetricinfinity.push_package',
12
+ 'allowedDomains' => ['http://symmetricinfinity.com/push_package/', 'http://lvh.me'],
13
+ 'urlFormatString' => 'http://symmetricinfinity.com/push_package/?%@=%@',
14
+ 'authenticationToken' => 'nr2o1spn515949r5q54so22o8rq95575',
15
+ 'webServiceURL' => 'https://api.zeropush.com/safari'
16
+ }
17
+ end
18
+
19
+ let(:website_params_symbol_keys) do
20
+ {
21
+ websiteName: 'Push Package Test',
22
+ websitePushID: 'web.com.symmetricinfinity.push_package',
23
+ allowedDomains: ['http://symmetricinfinity.com/push_package/', 'http://lvh.me'],
24
+ urlFormatString: 'http://symmetricinfinity.com/push_package/?%@=%@',
25
+ authenticationToken: 'nr2o1spn515949r5q54so22o8rq95575',
26
+ webServiceURL: 'https://api.zeropush.com/safari'
16
27
  }
17
28
  end
18
29
 
@@ -43,22 +54,45 @@ describe PushPackage do
43
54
  end.must_raise(PushPackage::InvalidParameterError)
44
55
  end
45
56
 
46
- it 'must have a valid iconset' do
47
- lambda do
48
- PushPackage.new(website_params, '/tmp', certificate, 'testing')
49
- end.must_raise(PushPackage::InvalidIconsetError)
50
- end
57
+ describe 'website params with string keys' do
51
58
 
52
- it 'should support a certificate path' do
53
- lambda do
54
- PushPackage.new(website_params, iconset_path, nil)
55
- end.must_raise(ArgumentError)
59
+ it 'must have a valid iconset' do
60
+ lambda do
61
+ PushPackage.new(website_params, '/tmp', certificate, 'testing')
62
+ end.must_raise(PushPackage::InvalidIconsetError)
63
+ end
64
+
65
+ it 'should support a certificate path' do
66
+ lambda do
67
+ PushPackage.new(website_params, iconset_path, nil)
68
+ end.must_raise(ArgumentError)
69
+ end
70
+
71
+ it 'should support certificate path' do
72
+ lambda do
73
+ PushPackage.new(website_params, iconset_path, '/some/file.p12')
74
+ end.must_raise(Errno::ENOENT)
75
+ end
56
76
  end
57
77
 
58
- it 'should support certificate path' do
59
- lambda do
60
- PushPackage.new(website_params, iconset_path, '/some/file.p12')
61
- end.must_raise(Errno::ENOENT)
78
+ describe 'website params with string keys' do
79
+ it 'must have a valid iconset' do
80
+ lambda do
81
+ PushPackage.new(website_params_symbol_keys, '/tmp', certificate, 'testing')
82
+ end.must_raise(PushPackage::InvalidIconsetError)
83
+ end
84
+
85
+ it 'should support a certificate path' do
86
+ lambda do
87
+ PushPackage.new(website_params_symbol_keys, iconset_path, nil)
88
+ end.must_raise(ArgumentError)
89
+ end
90
+
91
+ it 'should support certificate path' do
92
+ lambda do
93
+ PushPackage.new(website_params_symbol_keys, iconset_path, '/some/file.p12')
94
+ end.must_raise(Errno::ENOENT)
95
+ end
62
96
  end
63
97
  end
64
98
 
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: push_package
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
5
- prerelease:
4
+ version: 0.1.3
6
5
  platform: ruby
7
6
  authors:
8
7
  - Stefan Natchev
@@ -10,12 +9,11 @@ authors:
10
9
  autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
- date: 2013-12-20 00:00:00.000000000 Z
12
+ date: 2015-12-11 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: rubyzip
17
16
  requirement: !ruby/object:Gem::Requirement
18
- none: false
19
17
  requirements:
20
18
  - - ~>
21
19
  - !ruby/object:Gem::Version
@@ -23,7 +21,6 @@ dependencies:
23
21
  type: :runtime
24
22
  prerelease: false
25
23
  version_requirements: !ruby/object:Gem::Requirement
26
- none: false
27
24
  requirements:
28
25
  - - ~>
29
26
  - !ruby/object:Gem::Version
@@ -31,7 +28,6 @@ dependencies:
31
28
  - !ruby/object:Gem::Dependency
32
29
  name: minitest
33
30
  requirement: !ruby/object:Gem::Requirement
34
- none: false
35
31
  requirements:
36
32
  - - ~>
37
33
  - !ruby/object:Gem::Version
@@ -39,7 +35,6 @@ dependencies:
39
35
  type: :development
40
36
  prerelease: false
41
37
  version_requirements: !ruby/object:Gem::Requirement
42
- none: false
43
38
  requirements:
44
39
  - - ~>
45
40
  - !ruby/object:Gem::Version
@@ -47,7 +42,6 @@ dependencies:
47
42
  - !ruby/object:Gem::Dependency
48
43
  name: rake
49
44
  requirement: !ruby/object:Gem::Requirement
50
- none: false
51
45
  requirements:
52
46
  - - ~>
53
47
  - !ruby/object:Gem::Version
@@ -55,7 +49,6 @@ dependencies:
55
49
  type: :development
56
50
  prerelease: false
57
51
  version_requirements: !ruby/object:Gem::Requirement
58
- none: false
59
52
  requirements:
60
53
  - - ~>
61
54
  - !ruby/object:Gem::Version
@@ -63,17 +56,15 @@ dependencies:
63
56
  - !ruby/object:Gem::Dependency
64
57
  name: pry
65
58
  requirement: !ruby/object:Gem::Requirement
66
- none: false
67
59
  requirements:
68
- - - ! '>='
60
+ - - '>='
69
61
  - !ruby/object:Gem::Version
70
62
  version: '0'
71
63
  type: :development
72
64
  prerelease: false
73
65
  version_requirements: !ruby/object:Gem::Requirement
74
- none: false
75
66
  requirements:
76
- - - ! '>='
67
+ - - '>='
77
68
  - !ruby/object:Gem::Version
78
69
  version: '0'
79
70
  description: As of OSX 10.9 Safari can receive push notifications when it is closed.
@@ -88,7 +79,6 @@ files:
88
79
  - .gitignore
89
80
  - .travis.yml
90
81
  - Gemfile
91
- - Gemfile.lock
92
82
  - LICENSE.txt
93
83
  - README.md
94
84
  - Rakefile
@@ -102,6 +92,9 @@ files:
102
92
  - spec/fixtures/iconset/icon_16x16@2x.png
103
93
  - spec/fixtures/iconset/icon_32x32.png
104
94
  - spec/fixtures/iconset/icon_32x32@2x.png
95
+ - spec/fixtures/localhost.crt
96
+ - spec/fixtures/localhost.csr
97
+ - spec/fixtures/localhost.key
105
98
  - spec/fixtures/manifest.json
106
99
  - spec/fixtures/self-signed.p12
107
100
  - spec/fixtures/signature
@@ -110,27 +103,26 @@ files:
110
103
  homepage: https://github.com/symmetricinfinity/push_package
111
104
  licenses:
112
105
  - MIT
106
+ metadata: {}
113
107
  post_install_message:
114
108
  rdoc_options: []
115
109
  require_paths:
116
110
  - lib
117
111
  required_ruby_version: !ruby/object:Gem::Requirement
118
- none: false
119
112
  requirements:
120
- - - ! '>='
113
+ - - '>='
121
114
  - !ruby/object:Gem::Version
122
115
  version: '1.9'
123
116
  required_rubygems_version: !ruby/object:Gem::Requirement
124
- none: false
125
117
  requirements:
126
- - - ! '>='
118
+ - - '>='
127
119
  - !ruby/object:Gem::Version
128
120
  version: '0'
129
121
  requirements: []
130
122
  rubyforge_project:
131
- rubygems_version: 1.8.23
123
+ rubygems_version: 2.0.14
132
124
  signing_key:
133
- specification_version: 3
125
+ specification_version: 4
134
126
  summary: A gem for creating Safari push notification push packages.
135
127
  test_files:
136
128
  - spec/fixtures/iconset/icon_128x128.png
@@ -139,6 +131,9 @@ test_files:
139
131
  - spec/fixtures/iconset/icon_16x16@2x.png
140
132
  - spec/fixtures/iconset/icon_32x32.png
141
133
  - spec/fixtures/iconset/icon_32x32@2x.png
134
+ - spec/fixtures/localhost.crt
135
+ - spec/fixtures/localhost.csr
136
+ - spec/fixtures/localhost.key
142
137
  - spec/fixtures/manifest.json
143
138
  - spec/fixtures/self-signed.p12
144
139
  - spec/fixtures/signature
@@ -1,37 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- push_package (0.1.2)
5
- rubyzip (~> 1.1.0)
6
-
7
- GEM
8
- remote: https://rubygems.org/
9
- specs:
10
- coderay (1.0.9)
11
- ffi (1.9.3-java)
12
- method_source (0.8.2)
13
- minitest (4.7.0)
14
- pry (0.9.12.2)
15
- coderay (~> 1.0.5)
16
- method_source (~> 0.8)
17
- slop (~> 3.4)
18
- pry (0.9.12.2-java)
19
- coderay (~> 1.0.5)
20
- method_source (~> 0.8)
21
- slop (~> 3.4)
22
- spoon (~> 0.0)
23
- rake (10.0.3)
24
- rubyzip (1.1.0)
25
- slop (3.4.6)
26
- spoon (0.0.4)
27
- ffi
28
-
29
- PLATFORMS
30
- java
31
- ruby
32
-
33
- DEPENDENCIES
34
- minitest (~> 4.7.0)
35
- pry
36
- push_package!
37
- rake (~> 10.0.3)