push_package 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -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)