pushofy 0.0.11
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 +7 -0
- data/.gitignore +17 -0
- data/.rspec +2 -0
- data/CertificateName.pem +136 -0
- data/Gemfile +5 -0
- data/LICENSE.txt +22 -0
- data/ProductionCertificate.pem +136 -0
- data/README.md +29 -0
- data/Rakefile +3 -0
- data/bin/pushofy.rb +86 -0
- data/lib/pushofy/androidpush.rb +24 -0
- data/lib/pushofy/applepayload.rb +18 -0
- data/lib/pushofy/applepush.rb +44 -0
- data/lib/pushofy/payload.rb +4 -0
- data/lib/pushofy/push.rb +65 -0
- data/lib/pushofy/ssl_helper.rb +18 -0
- data/lib/pushofy/sslconnection.rb +9 -0
- data/lib/pushofy/version.rb +3 -0
- data/lib/pushofy.rb +0 -0
- data/pushofy.gemspec +27 -0
- data/spec/pushofy/androidpush_spec.rb +0 -0
- data/spec/pushofy/applepush_spec.rb +0 -0
- data/spec/pushofy/push_spec.rb +37 -0
- metadata +127 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: 31e2583d4e6894ab78f7043e616d12be73650d7c
|
|
4
|
+
data.tar.gz: e8458df5575bab3bc8668d5364615053e56f98c2
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 51ed5208424477b1a666ae43580493d69ac6078c76ec82cd0f65b6c690e82efa1a8d06e63826d92db4c3b7f821f2389aed226e02c8162358b908a14e56abab8a
|
|
7
|
+
data.tar.gz: 6a3d5797685c5561dd3933ecd1b14b8073240dc27f433d40578fd44836deed50ace5c6f54c186dd993428df610d1e436f32622068bbae5f4e72758f3068a5af1
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/CertificateName.pem
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
Bag Attributes
|
|
2
|
+
friendlyName: Apple Development IOS Push Services: com.idlecampus
|
|
3
|
+
localKeyID: B0 35 E9 14 CD E2 59 3A 53 F3 6E B8 5C 4E AF FB A3 05 E1 DA
|
|
4
|
+
subject=/UID=com.idlecampus/CN=Apple Development IOS Push Services: com.idlecampus/OU=72S3A27359/C=SG
|
|
5
|
+
issuer=/C=US/O=Apple Inc./OU=Apple Worldwide Developer Relations/CN=Apple Worldwide Developer Relations Certification Authority
|
|
6
|
+
-----BEGIN CERTIFICATE-----
|
|
7
|
+
MIIFgTCCBGmgAwIBAgIIVF99Iwg1rscwDQYJKoZIhvcNAQEFBQAwgZYxCzAJBgNV
|
|
8
|
+
BAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBsZSBXb3Js
|
|
9
|
+
ZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3
|
|
10
|
+
aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkw
|
|
11
|
+
HhcNMTMxMTA5MjA0NzA0WhcNMTQxMTA5MjA0NzA0WjCBgDEeMBwGCgmSJomT8ixk
|
|
12
|
+
AQEMDmNvbS5pZGxlY2FtcHVzMTwwOgYDVQQDDDNBcHBsZSBEZXZlbG9wbWVudCBJ
|
|
13
|
+
T1MgUHVzaCBTZXJ2aWNlczogY29tLmlkbGVjYW1wdXMxEzARBgNVBAsMCjcyUzNB
|
|
14
|
+
MjczNTkxCzAJBgNVBAYTAlNHMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
|
|
15
|
+
AQEAzEUmLcKA7+NSPXLz8+dz25rubpL0Mmn5rLJMuZIZHeixnf50Is/NK+xc+t25
|
|
16
|
+
OHwMb2F5zF0T4WChtat6S/Efleztee1DRr+50cyUG91MLRrKKUXYtRtvfTEbrTtX
|
|
17
|
+
bL1phmYPLtAIvzesz+jCxVW3BPzp1OSqSk/8Ln/Y3/2Q0aYbTUqIb2Mv+/V60/6K
|
|
18
|
+
TnmkfxVbXyF2KqaxHt4VaXn1fVxVtQvKlnBhyVgqAE6MTU81XSMdrciPlarDtq4f
|
|
19
|
+
eRWw7I70UH0MqpMJalJzN4KwsxZtfwSNugeZzd/R99xD0j+ZIqTqtjcOk1mj+Q/F
|
|
20
|
+
uk7SdK//+q27oiB67hYRw7PgYwIDAQABo4IB5TCCAeEwHQYDVR0OBBYEFLA16RTN
|
|
21
|
+
4lk6U/NuuFxOr/ujBeHaMAkGA1UdEwQCMAAwHwYDVR0jBBgwFoAUiCcXCam2GGCL
|
|
22
|
+
7Ou69kdZxVJUo7cwggEPBgNVHSAEggEGMIIBAjCB/wYJKoZIhvdjZAUBMIHxMIHD
|
|
23
|
+
BggrBgEFBQcCAjCBtgyBs1JlbGlhbmNlIG9uIHRoaXMgY2VydGlmaWNhdGUgYnkg
|
|
24
|
+
YW55IHBhcnR5IGFzc3VtZXMgYWNjZXB0YW5jZSBvZiB0aGUgdGhlbiBhcHBsaWNh
|
|
25
|
+
YmxlIHN0YW5kYXJkIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSwgY2VydGlm
|
|
26
|
+
aWNhdGUgcG9saWN5IGFuZCBjZXJ0aWZpY2F0aW9uIHByYWN0aWNlIHN0YXRlbWVu
|
|
27
|
+
dHMuMCkGCCsGAQUFBwIBFh1odHRwOi8vd3d3LmFwcGxlLmNvbS9hcHBsZWNhLzBN
|
|
28
|
+
BgNVHR8ERjBEMEKgQKA+hjxodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9jZXJ0
|
|
29
|
+
aWZpY2F0aW9uYXV0aG9yaXR5L3d3ZHJjYS5jcmwwCwYDVR0PBAQDAgeAMBMGA1Ud
|
|
30
|
+
JQQMMAoGCCsGAQUFBwMCMBAGCiqGSIb3Y2QGAwEEAgUAMA0GCSqGSIb3DQEBBQUA
|
|
31
|
+
A4IBAQBZuglr6RL6t8Jan+wHzS/GLyd46qRLec7blGM1zVuiasPYKzfDDX4eSbx3
|
|
32
|
+
Uqg8BaJ+kJnCHJio4bv1Jq3uuzTCcfiYl+MtyfxLtckJ935KwHn6dpMtbUzzyEb7
|
|
33
|
+
ihmCYRjvrVMzFxIlkVvkhQDsiyEp9YOn1RRuLhlTSZsWcmZZqzinVLQ18Cm04WpY
|
|
34
|
+
EN7bSjD2vsPoDeBBC5Q4kEejgIvFDOzmfoBwgnIXHr5gDe0iKdTLSTJPh4GHOJkM
|
|
35
|
+
ajKj8RebLAZFkmkO+G4YJz7j0wPwI0EL77ac/BblGjgX24uV0zpK0Jkp72dG09yy
|
|
36
|
+
DiFt/a8jDtjR8SpTX5pWu3p0hLLE
|
|
37
|
+
-----END CERTIFICATE-----
|
|
38
|
+
Bag Attributes
|
|
39
|
+
friendlyName: iPhone Developer: Ankur Kothari (99DZ37BYTG)
|
|
40
|
+
localKeyID: B0 35 E9 14 CD E2 59 3A 53 F3 6E B8 5C 4E AF FB A3 05 E1 DA
|
|
41
|
+
subject=/UID=X579TUAS83/CN=iPhone Developer: Ankur Kothari (99DZ37BYTG)/OU=72S3A27359/O=Ankur Kothari/C=SG
|
|
42
|
+
issuer=/C=US/O=Apple Inc./OU=Apple Worldwide Developer Relations/CN=Apple Worldwide Developer Relations Certification Authority
|
|
43
|
+
-----BEGIN CERTIFICATE-----
|
|
44
|
+
MIIFmjCCBIKgAwIBAgIIPTDc6YHsctAwDQYJKoZIhvcNAQEFBQAwgZYxCzAJBgNV
|
|
45
|
+
BAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBsZSBXb3Js
|
|
46
|
+
ZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3
|
|
47
|
+
aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkw
|
|
48
|
+
HhcNMTMxMTA1MDM0NzMwWhcNMTQxMTA1MDM0NzMwWjCBjTEaMBgGCgmSJomT8ixk
|
|
49
|
+
AQEMClg1NzlUVUFTODMxNTAzBgNVBAMMLGlQaG9uZSBEZXZlbG9wZXI6IEFua3Vy
|
|
50
|
+
IEtvdGhhcmkgKDk5RFozN0JZVEcpMRMwEQYDVQQLDAo3MlMzQTI3MzU5MRYwFAYD
|
|
51
|
+
VQQKDA1Bbmt1ciBLb3RoYXJpMQswCQYDVQQGEwJTRzCCASIwDQYJKoZIhvcNAQEB
|
|
52
|
+
BQADggEPADCCAQoCggEBAMxFJi3CgO/jUj1y8/Pnc9ua7m6S9DJp+ayyTLmSGR3o
|
|
53
|
+
sZ3+dCLPzSvsXPrduTh8DG9hecxdE+FgobWrekvxH5Xs7XntQ0a/udHMlBvdTC0a
|
|
54
|
+
yilF2LUbb30xG607V2y9aYZmDy7QCL83rM/owsVVtwT86dTkqkpP/C5/2N/9kNGm
|
|
55
|
+
G01KiG9jL/v1etP+ik55pH8VW18hdiqmsR7eFWl59X1cVbULypZwYclYKgBOjE1P
|
|
56
|
+
NV0jHa3Ij5Wqw7auH3kVsOyO9FB9DKqTCWpSczeCsLMWbX8EjboHmc3f0ffcQ9I/
|
|
57
|
+
mSKk6rY3DpNZo/kPxbpO0nSv//qtu6Igeu4WEcOz4GMCAwEAAaOCAfEwggHtMB0G
|
|
58
|
+
A1UdDgQWBBSwNekUzeJZOlPzbrhcTq/7owXh2jAMBgNVHRMBAf8EAjAAMB8GA1Ud
|
|
59
|
+
IwQYMBaAFIgnFwmpthhgi+zruvZHWcVSVKO3MIIBDwYDVR0gBIIBBjCCAQIwgf8G
|
|
60
|
+
CSqGSIb3Y2QFATCB8TCBwwYIKwYBBQUHAgIwgbYMgbNSZWxpYW5jZSBvbiB0aGlz
|
|
61
|
+
IGNlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2Yg
|
|
62
|
+
dGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9u
|
|
63
|
+
cyBvZiB1c2UsIGNlcnRpZmljYXRlIHBvbGljeSBhbmQgY2VydGlmaWNhdGlvbiBw
|
|
64
|
+
cmFjdGljZSBzdGF0ZW1lbnRzLjApBggrBgEFBQcCARYdaHR0cDovL3d3dy5hcHBs
|
|
65
|
+
ZS5jb20vYXBwbGVjYS8wTQYDVR0fBEYwRDBCoECgPoY8aHR0cDovL2RldmVsb3Bl
|
|
66
|
+
ci5hcHBsZS5jb20vY2VydGlmaWNhdGlvbmF1dGhvcml0eS93d2RyY2EuY3JsMA4G
|
|
67
|
+
A1UdDwEB/wQEAwIHgDAWBgNVHSUBAf8EDDAKBggrBgEFBQcDAzATBgoqhkiG92Nk
|
|
68
|
+
BgECAQH/BAIFADANBgkqhkiG9w0BAQUFAAOCAQEAnAOUm9SNm5UIil8RKLTjCeVd
|
|
69
|
+
J/L77i+0AbY8zFFW3CohDAfXuyB/c+RSajSqTre3QzCE514k7LwTYPf+5KH8GqEI
|
|
70
|
+
X6cau7DLeD9hRxSh0ujDsknug4GGWgAqZRdPhHIseDsO5qn893lIy8+NQacjwP+R
|
|
71
|
+
qHDH+RJf1dqP27chZyI5OX242CCLmcWlBLUJiOtc8toY3E6RMEiAFgYk8ruWlKNI
|
|
72
|
+
yWrreJKwZGnEvqUIXON7Poa9+6zceMmzUQ+AnyrwxPcVATPOaH9Q1ZMxl8xEQlgI
|
|
73
|
+
7aBCw/02wZdAR8x6n9VN7FjPGutBHA2zfx4HCGNqiLBI0Ed4BtDIku2QtDhYNA==
|
|
74
|
+
-----END CERTIFICATE-----
|
|
75
|
+
Bag Attributes
|
|
76
|
+
friendlyName: iOS Developer: Ankur Kothari (Ankur Kothari)
|
|
77
|
+
localKeyID: B0 35 E9 14 CD E2 59 3A 53 F3 6E B8 5C 4E AF FB A3 05 E1 DA
|
|
78
|
+
Key Attributes: <No Attributes>
|
|
79
|
+
-----BEGIN RSA PRIVATE KEY-----
|
|
80
|
+
MIIEowIBAAKCAQEAzEUmLcKA7+NSPXLz8+dz25rubpL0Mmn5rLJMuZIZHeixnf50
|
|
81
|
+
Is/NK+xc+t25OHwMb2F5zF0T4WChtat6S/Efleztee1DRr+50cyUG91MLRrKKUXY
|
|
82
|
+
tRtvfTEbrTtXbL1phmYPLtAIvzesz+jCxVW3BPzp1OSqSk/8Ln/Y3/2Q0aYbTUqI
|
|
83
|
+
b2Mv+/V60/6KTnmkfxVbXyF2KqaxHt4VaXn1fVxVtQvKlnBhyVgqAE6MTU81XSMd
|
|
84
|
+
rciPlarDtq4feRWw7I70UH0MqpMJalJzN4KwsxZtfwSNugeZzd/R99xD0j+ZIqTq
|
|
85
|
+
tjcOk1mj+Q/Fuk7SdK//+q27oiB67hYRw7PgYwIDAQABAoIBAFn35t3muiVuKO25
|
|
86
|
+
sKrveT7zGSsIfJerx3UBvvtI1tkugPSGex5OCh7bZwRzHb48HLn948hYAoaUqgS6
|
|
87
|
+
9w11sSS2is3V63jAvxYhleZD7OY802ekRNNXtx4bwAXnihTxxAWW8/75T7Dw06Nq
|
|
88
|
+
8EY7/3Up8895u2spmXfdhWb6Zot/ZI3nsHhvFcJ2+T1FwWR73eZ7PpPuAUeFaVaU
|
|
89
|
+
z6B9CJQUN8ow5lxgbPHHg26Dx7gtXUqL3VPomwdNjW19xvHXjSMVCdDxZi2OKcZ7
|
|
90
|
+
/K4qAzwa91bahX0jgmBdVzn01gR5T2y51mxaZOC/u6nPVTAw7NBIEMVZxbuj1f9a
|
|
91
|
+
/Lju5aECgYEA+EnVMv+TlXuHrw9R5p52w0sWnndvzbxV9Pdvjqi7lqXRypaOVxZy
|
|
92
|
+
z6fbKG0yANxqBgsdXdRvtEiSDbMzTfB5kYDZkqShs0gVDCMGcRM3paExYwfl61RS
|
|
93
|
+
c1ufTId2LnxSTtSKJAdezTedBsl0DgTdGB/5sniuZee2u4WBo8/bDXMCgYEA0p1S
|
|
94
|
+
flR9afmmqCzf8uSwpymAfS4/4tz+JjeJSnEhesKahHa88okFWtcne1OHV3F0CBgb
|
|
95
|
+
erEJ5cs5d1P4ycAJMTuRFQbU8dvZzAhkYOnHbzvgznXKYsryIMMxHqDiY8Klw4G8
|
|
96
|
+
obdBCfrWw8B7ONpGkmbC56v1yEijXPQWWVMBJVECgYAi8vmgsRsMGpRRzv0/UiTz
|
|
97
|
+
fnlTmwpQ0mbjEYVRdmzZWsP6GVE17wIAOud9fElil6QQ77WVhJaosOJmLUhWezgR
|
|
98
|
+
hCqcGrJsMwRLbg61EfhuRw9VmkIB6x+j/0ygEB1Rk8xeLkq3oZX1mxNuZiMA6ixY
|
|
99
|
+
/f8+4P/jdkdhg/xom5SBAwKBgQCl+F3yuagfJCIF818DrN3czSK5AwJLR7Vr7mXd
|
|
100
|
+
aOtmLwbPDjb1ta6nmFc/o2JLMVerrTuyYuMW2CBP/bdXXWKhDnzVIg4bDhJC6/YW
|
|
101
|
+
PQPxjzEn4cD8O0u1L7x8k3H0BYbVW16H3b5+G9K0bfFsqu3kHuDG6kcEbuF1tdAK
|
|
102
|
+
0hNcEQKBgAeO8oRYYS4MYR92d7ocVwxkO0h5ehJX/xfT8XHmqzO7SpCl1AXQbkkB
|
|
103
|
+
YJqlziGZ/XVdKtvEhRM3ATTTLOX+Ry48O2xmsbp2Nr39ZGeH5Eg99sQSurtYWYwU
|
|
104
|
+
/zXXsixLOIkik0GlJRbRO5rFW61Co9/hMzMfhamYz9OlMMCuJw/W
|
|
105
|
+
-----END RSA PRIVATE KEY-----
|
|
106
|
+
Bag Attributes
|
|
107
|
+
friendlyName: iOS Developer: Ankur Kothari (Ankur Kothari)
|
|
108
|
+
localKeyID: B0 35 E9 14 CD E2 59 3A 53 F3 6E B8 5C 4E AF FB A3 05 E1 DA
|
|
109
|
+
Key Attributes: <No Attributes>
|
|
110
|
+
-----BEGIN RSA PRIVATE KEY-----
|
|
111
|
+
MIIEowIBAAKCAQEAzEUmLcKA7+NSPXLz8+dz25rubpL0Mmn5rLJMuZIZHeixnf50
|
|
112
|
+
Is/NK+xc+t25OHwMb2F5zF0T4WChtat6S/Efleztee1DRr+50cyUG91MLRrKKUXY
|
|
113
|
+
tRtvfTEbrTtXbL1phmYPLtAIvzesz+jCxVW3BPzp1OSqSk/8Ln/Y3/2Q0aYbTUqI
|
|
114
|
+
b2Mv+/V60/6KTnmkfxVbXyF2KqaxHt4VaXn1fVxVtQvKlnBhyVgqAE6MTU81XSMd
|
|
115
|
+
rciPlarDtq4feRWw7I70UH0MqpMJalJzN4KwsxZtfwSNugeZzd/R99xD0j+ZIqTq
|
|
116
|
+
tjcOk1mj+Q/Fuk7SdK//+q27oiB67hYRw7PgYwIDAQABAoIBAFn35t3muiVuKO25
|
|
117
|
+
sKrveT7zGSsIfJerx3UBvvtI1tkugPSGex5OCh7bZwRzHb48HLn948hYAoaUqgS6
|
|
118
|
+
9w11sSS2is3V63jAvxYhleZD7OY802ekRNNXtx4bwAXnihTxxAWW8/75T7Dw06Nq
|
|
119
|
+
8EY7/3Up8895u2spmXfdhWb6Zot/ZI3nsHhvFcJ2+T1FwWR73eZ7PpPuAUeFaVaU
|
|
120
|
+
z6B9CJQUN8ow5lxgbPHHg26Dx7gtXUqL3VPomwdNjW19xvHXjSMVCdDxZi2OKcZ7
|
|
121
|
+
/K4qAzwa91bahX0jgmBdVzn01gR5T2y51mxaZOC/u6nPVTAw7NBIEMVZxbuj1f9a
|
|
122
|
+
/Lju5aECgYEA+EnVMv+TlXuHrw9R5p52w0sWnndvzbxV9Pdvjqi7lqXRypaOVxZy
|
|
123
|
+
z6fbKG0yANxqBgsdXdRvtEiSDbMzTfB5kYDZkqShs0gVDCMGcRM3paExYwfl61RS
|
|
124
|
+
c1ufTId2LnxSTtSKJAdezTedBsl0DgTdGB/5sniuZee2u4WBo8/bDXMCgYEA0p1S
|
|
125
|
+
flR9afmmqCzf8uSwpymAfS4/4tz+JjeJSnEhesKahHa88okFWtcne1OHV3F0CBgb
|
|
126
|
+
erEJ5cs5d1P4ycAJMTuRFQbU8dvZzAhkYOnHbzvgznXKYsryIMMxHqDiY8Klw4G8
|
|
127
|
+
obdBCfrWw8B7ONpGkmbC56v1yEijXPQWWVMBJVECgYAi8vmgsRsMGpRRzv0/UiTz
|
|
128
|
+
fnlTmwpQ0mbjEYVRdmzZWsP6GVE17wIAOud9fElil6QQ77WVhJaosOJmLUhWezgR
|
|
129
|
+
hCqcGrJsMwRLbg61EfhuRw9VmkIB6x+j/0ygEB1Rk8xeLkq3oZX1mxNuZiMA6ixY
|
|
130
|
+
/f8+4P/jdkdhg/xom5SBAwKBgQCl+F3yuagfJCIF818DrN3czSK5AwJLR7Vr7mXd
|
|
131
|
+
aOtmLwbPDjb1ta6nmFc/o2JLMVerrTuyYuMW2CBP/bdXXWKhDnzVIg4bDhJC6/YW
|
|
132
|
+
PQPxjzEn4cD8O0u1L7x8k3H0BYbVW16H3b5+G9K0bfFsqu3kHuDG6kcEbuF1tdAK
|
|
133
|
+
0hNcEQKBgAeO8oRYYS4MYR92d7ocVwxkO0h5ehJX/xfT8XHmqzO7SpCl1AXQbkkB
|
|
134
|
+
YJqlziGZ/XVdKtvEhRM3ATTTLOX+Ry48O2xmsbp2Nr39ZGeH5Eg99sQSurtYWYwU
|
|
135
|
+
/zXXsixLOIkik0GlJRbRO5rFW61Co9/hMzMfhamYz9OlMMCuJw/W
|
|
136
|
+
-----END RSA PRIVATE KEY-----
|
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
Copyright (c) 2013 TODO: Write your name
|
|
2
|
+
|
|
3
|
+
MIT License
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
6
|
+
a copy of this software and associated documentation files (the
|
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
11
|
+
the following conditions:
|
|
12
|
+
|
|
13
|
+
The above copyright notice and this permission notice shall be
|
|
14
|
+
included in all copies or substantial portions of the Software.
|
|
15
|
+
|
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
Bag Attributes
|
|
2
|
+
friendlyName: Apple Development IOS Push Services: com.idlecampus.IdleCampus
|
|
3
|
+
localKeyID: B0 35 E9 14 CD E2 59 3A 53 F3 6E B8 5C 4E AF FB A3 05 E1 DA
|
|
4
|
+
subject=/UID=com.idlecampus.IdleCampus/CN=Apple Development IOS Push Services: com.idlecampus.IdleCampus/OU=72S3A27359/C=SG
|
|
5
|
+
issuer=/C=US/O=Apple Inc./OU=Apple Worldwide Developer Relations/CN=Apple Worldwide Developer Relations Certification Authority
|
|
6
|
+
-----BEGIN CERTIFICATE-----
|
|
7
|
+
MIIFlzCCBH+gAwIBAgIIYF2mZ14zXnQwDQYJKoZIhvcNAQEFBQAwgZYxCzAJBgNV
|
|
8
|
+
BAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBsZSBXb3Js
|
|
9
|
+
ZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3
|
|
10
|
+
aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkw
|
|
11
|
+
HhcNMTMxMTExMTUxNjMwWhcNMTQxMTExMTUxNjMwWjCBljEpMCcGCgmSJomT8ixk
|
|
12
|
+
AQEMGWNvbS5pZGxlY2FtcHVzLklkbGVDYW1wdXMxRzBFBgNVBAMMPkFwcGxlIERl
|
|
13
|
+
dmVsb3BtZW50IElPUyBQdXNoIFNlcnZpY2VzOiBjb20uaWRsZWNhbXB1cy5JZGxl
|
|
14
|
+
Q2FtcHVzMRMwEQYDVQQLDAo3MlMzQTI3MzU5MQswCQYDVQQGEwJTRzCCASIwDQYJ
|
|
15
|
+
KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMxFJi3CgO/jUj1y8/Pnc9ua7m6S9DJp
|
|
16
|
+
+ayyTLmSGR3osZ3+dCLPzSvsXPrduTh8DG9hecxdE+FgobWrekvxH5Xs7XntQ0a/
|
|
17
|
+
udHMlBvdTC0ayilF2LUbb30xG607V2y9aYZmDy7QCL83rM/owsVVtwT86dTkqkpP
|
|
18
|
+
/C5/2N/9kNGmG01KiG9jL/v1etP+ik55pH8VW18hdiqmsR7eFWl59X1cVbULypZw
|
|
19
|
+
YclYKgBOjE1PNV0jHa3Ij5Wqw7auH3kVsOyO9FB9DKqTCWpSczeCsLMWbX8EjboH
|
|
20
|
+
mc3f0ffcQ9I/mSKk6rY3DpNZo/kPxbpO0nSv//qtu6Igeu4WEcOz4GMCAwEAAaOC
|
|
21
|
+
AeUwggHhMB0GA1UdDgQWBBSwNekUzeJZOlPzbrhcTq/7owXh2jAJBgNVHRMEAjAA
|
|
22
|
+
MB8GA1UdIwQYMBaAFIgnFwmpthhgi+zruvZHWcVSVKO3MIIBDwYDVR0gBIIBBjCC
|
|
23
|
+
AQIwgf8GCSqGSIb3Y2QFATCB8TCBwwYIKwYBBQUHAgIwgbYMgbNSZWxpYW5jZSBv
|
|
24
|
+
biB0aGlzIGNlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFu
|
|
25
|
+
Y2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29u
|
|
26
|
+
ZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRlIHBvbGljeSBhbmQgY2VydGlmaWNh
|
|
27
|
+
dGlvbiBwcmFjdGljZSBzdGF0ZW1lbnRzLjApBggrBgEFBQcCARYdaHR0cDovL3d3
|
|
28
|
+
dy5hcHBsZS5jb20vYXBwbGVjYS8wTQYDVR0fBEYwRDBCoECgPoY8aHR0cDovL2Rl
|
|
29
|
+
dmVsb3Blci5hcHBsZS5jb20vY2VydGlmaWNhdGlvbmF1dGhvcml0eS93d2RyY2Eu
|
|
30
|
+
Y3JsMAsGA1UdDwQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAjAQBgoqhkiG92Nk
|
|
31
|
+
BgMBBAIFADANBgkqhkiG9w0BAQUFAAOCAQEAQ5PqQAUG9i9ZRqDJA8ZcI/fB0DLH
|
|
32
|
+
lMb1wFZB54f9ep8hO40EpKLTkciC2XrCddp2Mro3xTPkyl69D122Dv+VoEmxEx0m
|
|
33
|
+
ov0cmZb4hqNvExlXFyw8q04WXOppd864IaaCSFCg92vH17EnuxQCNskTWf4ikEcM
|
|
34
|
+
1jGbJbA0rZ2/EFdfZdW1UZiuAWICrC/wkMlCxXLCW3xFI4k9IbE47j/JVfxkB5tM
|
|
35
|
+
DHBvM8mwm0FIRcn/KMjLXkwdpw1FtKgN2k/EZMQHhq1ie4fgpdqifjRFVIO32CTr
|
|
36
|
+
8kZHSiHbIMn2G81fufmb6mif4cdqzqczjlUZ0hJbD+k20zA6QVXf8D5Yng==
|
|
37
|
+
-----END CERTIFICATE-----
|
|
38
|
+
Bag Attributes
|
|
39
|
+
friendlyName: iPhone Developer: Ankur Kothari (99DZ37BYTG)
|
|
40
|
+
localKeyID: B0 35 E9 14 CD E2 59 3A 53 F3 6E B8 5C 4E AF FB A3 05 E1 DA
|
|
41
|
+
subject=/UID=X579TUAS83/CN=iPhone Developer: Ankur Kothari (99DZ37BYTG)/OU=72S3A27359/O=Ankur Kothari/C=SG
|
|
42
|
+
issuer=/C=US/O=Apple Inc./OU=Apple Worldwide Developer Relations/CN=Apple Worldwide Developer Relations Certification Authority
|
|
43
|
+
-----BEGIN CERTIFICATE-----
|
|
44
|
+
MIIFmjCCBIKgAwIBAgIIPTDc6YHsctAwDQYJKoZIhvcNAQEFBQAwgZYxCzAJBgNV
|
|
45
|
+
BAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBsZSBXb3Js
|
|
46
|
+
ZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3
|
|
47
|
+
aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkw
|
|
48
|
+
HhcNMTMxMTA1MDM0NzMwWhcNMTQxMTA1MDM0NzMwWjCBjTEaMBgGCgmSJomT8ixk
|
|
49
|
+
AQEMClg1NzlUVUFTODMxNTAzBgNVBAMMLGlQaG9uZSBEZXZlbG9wZXI6IEFua3Vy
|
|
50
|
+
IEtvdGhhcmkgKDk5RFozN0JZVEcpMRMwEQYDVQQLDAo3MlMzQTI3MzU5MRYwFAYD
|
|
51
|
+
VQQKDA1Bbmt1ciBLb3RoYXJpMQswCQYDVQQGEwJTRzCCASIwDQYJKoZIhvcNAQEB
|
|
52
|
+
BQADggEPADCCAQoCggEBAMxFJi3CgO/jUj1y8/Pnc9ua7m6S9DJp+ayyTLmSGR3o
|
|
53
|
+
sZ3+dCLPzSvsXPrduTh8DG9hecxdE+FgobWrekvxH5Xs7XntQ0a/udHMlBvdTC0a
|
|
54
|
+
yilF2LUbb30xG607V2y9aYZmDy7QCL83rM/owsVVtwT86dTkqkpP/C5/2N/9kNGm
|
|
55
|
+
G01KiG9jL/v1etP+ik55pH8VW18hdiqmsR7eFWl59X1cVbULypZwYclYKgBOjE1P
|
|
56
|
+
NV0jHa3Ij5Wqw7auH3kVsOyO9FB9DKqTCWpSczeCsLMWbX8EjboHmc3f0ffcQ9I/
|
|
57
|
+
mSKk6rY3DpNZo/kPxbpO0nSv//qtu6Igeu4WEcOz4GMCAwEAAaOCAfEwggHtMB0G
|
|
58
|
+
A1UdDgQWBBSwNekUzeJZOlPzbrhcTq/7owXh2jAMBgNVHRMBAf8EAjAAMB8GA1Ud
|
|
59
|
+
IwQYMBaAFIgnFwmpthhgi+zruvZHWcVSVKO3MIIBDwYDVR0gBIIBBjCCAQIwgf8G
|
|
60
|
+
CSqGSIb3Y2QFATCB8TCBwwYIKwYBBQUHAgIwgbYMgbNSZWxpYW5jZSBvbiB0aGlz
|
|
61
|
+
IGNlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2Yg
|
|
62
|
+
dGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9u
|
|
63
|
+
cyBvZiB1c2UsIGNlcnRpZmljYXRlIHBvbGljeSBhbmQgY2VydGlmaWNhdGlvbiBw
|
|
64
|
+
cmFjdGljZSBzdGF0ZW1lbnRzLjApBggrBgEFBQcCARYdaHR0cDovL3d3dy5hcHBs
|
|
65
|
+
ZS5jb20vYXBwbGVjYS8wTQYDVR0fBEYwRDBCoECgPoY8aHR0cDovL2RldmVsb3Bl
|
|
66
|
+
ci5hcHBsZS5jb20vY2VydGlmaWNhdGlvbmF1dGhvcml0eS93d2RyY2EuY3JsMA4G
|
|
67
|
+
A1UdDwEB/wQEAwIHgDAWBgNVHSUBAf8EDDAKBggrBgEFBQcDAzATBgoqhkiG92Nk
|
|
68
|
+
BgECAQH/BAIFADANBgkqhkiG9w0BAQUFAAOCAQEAnAOUm9SNm5UIil8RKLTjCeVd
|
|
69
|
+
J/L77i+0AbY8zFFW3CohDAfXuyB/c+RSajSqTre3QzCE514k7LwTYPf+5KH8GqEI
|
|
70
|
+
X6cau7DLeD9hRxSh0ujDsknug4GGWgAqZRdPhHIseDsO5qn893lIy8+NQacjwP+R
|
|
71
|
+
qHDH+RJf1dqP27chZyI5OX242CCLmcWlBLUJiOtc8toY3E6RMEiAFgYk8ruWlKNI
|
|
72
|
+
yWrreJKwZGnEvqUIXON7Poa9+6zceMmzUQ+AnyrwxPcVATPOaH9Q1ZMxl8xEQlgI
|
|
73
|
+
7aBCw/02wZdAR8x6n9VN7FjPGutBHA2zfx4HCGNqiLBI0Ed4BtDIku2QtDhYNA==
|
|
74
|
+
-----END CERTIFICATE-----
|
|
75
|
+
Bag Attributes
|
|
76
|
+
friendlyName: iOS Developer: Ankur Kothari (Ankur Kothari)
|
|
77
|
+
localKeyID: B0 35 E9 14 CD E2 59 3A 53 F3 6E B8 5C 4E AF FB A3 05 E1 DA
|
|
78
|
+
Key Attributes: <No Attributes>
|
|
79
|
+
-----BEGIN RSA PRIVATE KEY-----
|
|
80
|
+
MIIEowIBAAKCAQEAzEUmLcKA7+NSPXLz8+dz25rubpL0Mmn5rLJMuZIZHeixnf50
|
|
81
|
+
Is/NK+xc+t25OHwMb2F5zF0T4WChtat6S/Efleztee1DRr+50cyUG91MLRrKKUXY
|
|
82
|
+
tRtvfTEbrTtXbL1phmYPLtAIvzesz+jCxVW3BPzp1OSqSk/8Ln/Y3/2Q0aYbTUqI
|
|
83
|
+
b2Mv+/V60/6KTnmkfxVbXyF2KqaxHt4VaXn1fVxVtQvKlnBhyVgqAE6MTU81XSMd
|
|
84
|
+
rciPlarDtq4feRWw7I70UH0MqpMJalJzN4KwsxZtfwSNugeZzd/R99xD0j+ZIqTq
|
|
85
|
+
tjcOk1mj+Q/Fuk7SdK//+q27oiB67hYRw7PgYwIDAQABAoIBAFn35t3muiVuKO25
|
|
86
|
+
sKrveT7zGSsIfJerx3UBvvtI1tkugPSGex5OCh7bZwRzHb48HLn948hYAoaUqgS6
|
|
87
|
+
9w11sSS2is3V63jAvxYhleZD7OY802ekRNNXtx4bwAXnihTxxAWW8/75T7Dw06Nq
|
|
88
|
+
8EY7/3Up8895u2spmXfdhWb6Zot/ZI3nsHhvFcJ2+T1FwWR73eZ7PpPuAUeFaVaU
|
|
89
|
+
z6B9CJQUN8ow5lxgbPHHg26Dx7gtXUqL3VPomwdNjW19xvHXjSMVCdDxZi2OKcZ7
|
|
90
|
+
/K4qAzwa91bahX0jgmBdVzn01gR5T2y51mxaZOC/u6nPVTAw7NBIEMVZxbuj1f9a
|
|
91
|
+
/Lju5aECgYEA+EnVMv+TlXuHrw9R5p52w0sWnndvzbxV9Pdvjqi7lqXRypaOVxZy
|
|
92
|
+
z6fbKG0yANxqBgsdXdRvtEiSDbMzTfB5kYDZkqShs0gVDCMGcRM3paExYwfl61RS
|
|
93
|
+
c1ufTId2LnxSTtSKJAdezTedBsl0DgTdGB/5sniuZee2u4WBo8/bDXMCgYEA0p1S
|
|
94
|
+
flR9afmmqCzf8uSwpymAfS4/4tz+JjeJSnEhesKahHa88okFWtcne1OHV3F0CBgb
|
|
95
|
+
erEJ5cs5d1P4ycAJMTuRFQbU8dvZzAhkYOnHbzvgznXKYsryIMMxHqDiY8Klw4G8
|
|
96
|
+
obdBCfrWw8B7ONpGkmbC56v1yEijXPQWWVMBJVECgYAi8vmgsRsMGpRRzv0/UiTz
|
|
97
|
+
fnlTmwpQ0mbjEYVRdmzZWsP6GVE17wIAOud9fElil6QQ77WVhJaosOJmLUhWezgR
|
|
98
|
+
hCqcGrJsMwRLbg61EfhuRw9VmkIB6x+j/0ygEB1Rk8xeLkq3oZX1mxNuZiMA6ixY
|
|
99
|
+
/f8+4P/jdkdhg/xom5SBAwKBgQCl+F3yuagfJCIF818DrN3czSK5AwJLR7Vr7mXd
|
|
100
|
+
aOtmLwbPDjb1ta6nmFc/o2JLMVerrTuyYuMW2CBP/bdXXWKhDnzVIg4bDhJC6/YW
|
|
101
|
+
PQPxjzEn4cD8O0u1L7x8k3H0BYbVW16H3b5+G9K0bfFsqu3kHuDG6kcEbuF1tdAK
|
|
102
|
+
0hNcEQKBgAeO8oRYYS4MYR92d7ocVwxkO0h5ehJX/xfT8XHmqzO7SpCl1AXQbkkB
|
|
103
|
+
YJqlziGZ/XVdKtvEhRM3ATTTLOX+Ry48O2xmsbp2Nr39ZGeH5Eg99sQSurtYWYwU
|
|
104
|
+
/zXXsixLOIkik0GlJRbRO5rFW61Co9/hMzMfhamYz9OlMMCuJw/W
|
|
105
|
+
-----END RSA PRIVATE KEY-----
|
|
106
|
+
Bag Attributes
|
|
107
|
+
friendlyName: iOS Developer: Ankur Kothari (Ankur Kothari)
|
|
108
|
+
localKeyID: B0 35 E9 14 CD E2 59 3A 53 F3 6E B8 5C 4E AF FB A3 05 E1 DA
|
|
109
|
+
Key Attributes: <No Attributes>
|
|
110
|
+
-----BEGIN RSA PRIVATE KEY-----
|
|
111
|
+
MIIEowIBAAKCAQEAzEUmLcKA7+NSPXLz8+dz25rubpL0Mmn5rLJMuZIZHeixnf50
|
|
112
|
+
Is/NK+xc+t25OHwMb2F5zF0T4WChtat6S/Efleztee1DRr+50cyUG91MLRrKKUXY
|
|
113
|
+
tRtvfTEbrTtXbL1phmYPLtAIvzesz+jCxVW3BPzp1OSqSk/8Ln/Y3/2Q0aYbTUqI
|
|
114
|
+
b2Mv+/V60/6KTnmkfxVbXyF2KqaxHt4VaXn1fVxVtQvKlnBhyVgqAE6MTU81XSMd
|
|
115
|
+
rciPlarDtq4feRWw7I70UH0MqpMJalJzN4KwsxZtfwSNugeZzd/R99xD0j+ZIqTq
|
|
116
|
+
tjcOk1mj+Q/Fuk7SdK//+q27oiB67hYRw7PgYwIDAQABAoIBAFn35t3muiVuKO25
|
|
117
|
+
sKrveT7zGSsIfJerx3UBvvtI1tkugPSGex5OCh7bZwRzHb48HLn948hYAoaUqgS6
|
|
118
|
+
9w11sSS2is3V63jAvxYhleZD7OY802ekRNNXtx4bwAXnihTxxAWW8/75T7Dw06Nq
|
|
119
|
+
8EY7/3Up8895u2spmXfdhWb6Zot/ZI3nsHhvFcJ2+T1FwWR73eZ7PpPuAUeFaVaU
|
|
120
|
+
z6B9CJQUN8ow5lxgbPHHg26Dx7gtXUqL3VPomwdNjW19xvHXjSMVCdDxZi2OKcZ7
|
|
121
|
+
/K4qAzwa91bahX0jgmBdVzn01gR5T2y51mxaZOC/u6nPVTAw7NBIEMVZxbuj1f9a
|
|
122
|
+
/Lju5aECgYEA+EnVMv+TlXuHrw9R5p52w0sWnndvzbxV9Pdvjqi7lqXRypaOVxZy
|
|
123
|
+
z6fbKG0yANxqBgsdXdRvtEiSDbMzTfB5kYDZkqShs0gVDCMGcRM3paExYwfl61RS
|
|
124
|
+
c1ufTId2LnxSTtSKJAdezTedBsl0DgTdGB/5sniuZee2u4WBo8/bDXMCgYEA0p1S
|
|
125
|
+
flR9afmmqCzf8uSwpymAfS4/4tz+JjeJSnEhesKahHa88okFWtcne1OHV3F0CBgb
|
|
126
|
+
erEJ5cs5d1P4ycAJMTuRFQbU8dvZzAhkYOnHbzvgznXKYsryIMMxHqDiY8Klw4G8
|
|
127
|
+
obdBCfrWw8B7ONpGkmbC56v1yEijXPQWWVMBJVECgYAi8vmgsRsMGpRRzv0/UiTz
|
|
128
|
+
fnlTmwpQ0mbjEYVRdmzZWsP6GVE17wIAOud9fElil6QQ77WVhJaosOJmLUhWezgR
|
|
129
|
+
hCqcGrJsMwRLbg61EfhuRw9VmkIB6x+j/0ygEB1Rk8xeLkq3oZX1mxNuZiMA6ixY
|
|
130
|
+
/f8+4P/jdkdhg/xom5SBAwKBgQCl+F3yuagfJCIF818DrN3czSK5AwJLR7Vr7mXd
|
|
131
|
+
aOtmLwbPDjb1ta6nmFc/o2JLMVerrTuyYuMW2CBP/bdXXWKhDnzVIg4bDhJC6/YW
|
|
132
|
+
PQPxjzEn4cD8O0u1L7x8k3H0BYbVW16H3b5+G9K0bfFsqu3kHuDG6kcEbuF1tdAK
|
|
133
|
+
0hNcEQKBgAeO8oRYYS4MYR92d7ocVwxkO0h5ehJX/xfT8XHmqzO7SpCl1AXQbkkB
|
|
134
|
+
YJqlziGZ/XVdKtvEhRM3ATTTLOX+Ry48O2xmsbp2Nr39ZGeH5Eg99sQSurtYWYwU
|
|
135
|
+
/zXXsixLOIkik0GlJRbRO5rFW61Co9/hMzMfhamYz9OlMMCuJw/W
|
|
136
|
+
-----END RSA PRIVATE KEY-----
|
data/README.md
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Pushify
|
|
2
|
+
|
|
3
|
+
TODO: Write a gem description
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
Add this line to your application's Gemfile:
|
|
8
|
+
|
|
9
|
+
gem 'pushify'
|
|
10
|
+
|
|
11
|
+
And then execute:
|
|
12
|
+
|
|
13
|
+
$ bundle
|
|
14
|
+
|
|
15
|
+
Or install it yourself as:
|
|
16
|
+
|
|
17
|
+
$ gem install pushify
|
|
18
|
+
|
|
19
|
+
## Usage
|
|
20
|
+
|
|
21
|
+
TODO: Write usage instructions here
|
|
22
|
+
|
|
23
|
+
## Contributing
|
|
24
|
+
|
|
25
|
+
1. Fork it ( http://github.com/<my-github-username>/pushify/fork )
|
|
26
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
|
27
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
|
28
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
|
29
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
data/bin/pushofy.rb
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
require_relative "../lib/pushofy/applepush"
|
|
2
|
+
require_relative "../lib/pushofy/androidpush"
|
|
3
|
+
require_relative "../lib/pushofy/push"
|
|
4
|
+
require "active_support/core_ext"
|
|
5
|
+
|
|
6
|
+
# puts "Enter the message you want to send >"
|
|
7
|
+
# message = gets.chomp
|
|
8
|
+
# puts "Select the device you want to push to: "
|
|
9
|
+
# puts "iOS (1)"
|
|
10
|
+
# puts "Android(2)"
|
|
11
|
+
# choice = gets.to_i
|
|
12
|
+
|
|
13
|
+
# if choice == 1
|
|
14
|
+
# puts "Enter the device token of the iOS device:"
|
|
15
|
+
# device_token = gets.chomp
|
|
16
|
+
# puts "Enter the certificate name >"
|
|
17
|
+
# cert_name = gets.chomp
|
|
18
|
+
|
|
19
|
+
# payload_hash = {}
|
|
20
|
+
# payload_hash['aps'] = {}
|
|
21
|
+
# payload_hash['aps']['alert'] = {}
|
|
22
|
+
# payload_hash['aps']['alert']['body'] = message
|
|
23
|
+
# payload_hash['aps']['sound'] = 'default'
|
|
24
|
+
# payload_hash['aps']['badge'] = 1
|
|
25
|
+
# payload_hash['app'] = "dsfsdf"
|
|
26
|
+
# payload_hash['url'] = "dsfdfdsf"
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
# Pushofy::ApplePush.new(payload_hash, device_token,"/#{cert_name}").push
|
|
30
|
+
# elsif choice == 2
|
|
31
|
+
# puts "Enter the device registration id of the Android device:"
|
|
32
|
+
# device_registration = gets.chomp
|
|
33
|
+
# puts "Enter the api-key >"
|
|
34
|
+
# api_key = gets.chomp
|
|
35
|
+
|
|
36
|
+
# body = {}
|
|
37
|
+
# arr = []
|
|
38
|
+
# arr << device_registration
|
|
39
|
+
# body['registration_ids'] = arr
|
|
40
|
+
# app = "asdasd"
|
|
41
|
+
# from = "SAdasd"
|
|
42
|
+
# url = "asdas"
|
|
43
|
+
# android_payload = { 'message' => message }
|
|
44
|
+
# android_payload['app'] = app
|
|
45
|
+
# android_payload['url'] = url
|
|
46
|
+
# body['data'] = android_payload
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
# a = Pushofy::AndroidPush.new(body,api_key).push
|
|
50
|
+
# end
|
|
51
|
+
|
|
52
|
+
# Things needed
|
|
53
|
+
# 1. Certificate CertificateName
|
|
54
|
+
# 2. device_token_hex
|
|
55
|
+
# 3. message
|
|
56
|
+
payload_hash = {}
|
|
57
|
+
payload_hash['aps'] = {}
|
|
58
|
+
payload_hash['aps']['alert'] = {}
|
|
59
|
+
payload_hash['aps']['alert']['body'] = "You have a new asdsada"
|
|
60
|
+
payload_hash['aps']['sound'] = 'default'
|
|
61
|
+
payload_hash['aps']['badge'] = 1
|
|
62
|
+
payload_hash['app'] = "dsfsdf"
|
|
63
|
+
payload_hash['url'] = "dsfdfdsf"
|
|
64
|
+
|
|
65
|
+
device_token_hex = "a078f1658f68521a278d0f5c41b9c4b0613e4a6ddc157fd8ed1567cda5634da4"
|
|
66
|
+
# puts payload_hash
|
|
67
|
+
Pushofy::ApplePush.new(payload_hash, device_token_hex,'/Users/apple/Documents/workspace/pushofy/CertificateName.pem').push
|
|
68
|
+
|
|
69
|
+
# # Things needed
|
|
70
|
+
# # 1. key
|
|
71
|
+
# # 2. device_token_hex
|
|
72
|
+
# # 3. message
|
|
73
|
+
body = {}
|
|
74
|
+
arr = []
|
|
75
|
+
arr << "APA91bFrtSnrO-ySKb8wn4Jevou1qpsOVXzqVSxzMcKEkgvcDsnqt1-3VPEYoMQZeQyPajffJo3s7ra5KrfBUhpdRJkXVe43mOWeIKc8y2H9SMqvgrbtOTBvS69sNhUmLX0FQK5s1h8q"
|
|
76
|
+
body['registration_ids'] = arr
|
|
77
|
+
app = "asdasd"
|
|
78
|
+
from = "SAdasd"
|
|
79
|
+
url = "asdas"
|
|
80
|
+
android_payload = { 'message' => "You have a new #{app} from #{from}" }
|
|
81
|
+
android_payload['app'] = app
|
|
82
|
+
android_payload['url'] = url
|
|
83
|
+
body['data'] = android_payload
|
|
84
|
+
p body
|
|
85
|
+
a = Pushofy::AndroidPush.new(body,"AIzaSyCoTPiIlC9OKuLh6i66focOp3zygWWOKXs")
|
|
86
|
+
a.push
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
require 'net/http'
|
|
3
|
+
require 'net/https'
|
|
4
|
+
require 'uri'
|
|
5
|
+
#
|
|
6
|
+
module Pushofy
|
|
7
|
+
class AndroidPush
|
|
8
|
+
def initialize(body,api_key)
|
|
9
|
+
@api_key = api_key
|
|
10
|
+
@body = body
|
|
11
|
+
end
|
|
12
|
+
def push
|
|
13
|
+
uri = URI('https://android.googleapis.com/gcm/send')
|
|
14
|
+
auth_key = "key=#{@api_key}"
|
|
15
|
+
p auth_key
|
|
16
|
+
headers = { 'Content-Type' => 'application/json',
|
|
17
|
+
'Authorization' => auth_key }
|
|
18
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
|
19
|
+
http.use_ssl = true
|
|
20
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
|
21
|
+
http.post(uri.path, @body.to_json, headers)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
require_relative 'payload'
|
|
2
|
+
#
|
|
3
|
+
module Pushofy
|
|
4
|
+
class ApplePayload < Payload
|
|
5
|
+
attr_accessor :message
|
|
6
|
+
attr_accessor :sound_name
|
|
7
|
+
attr_accessor :badge_number
|
|
8
|
+
attr_accessor :action_key_caption
|
|
9
|
+
attr_accessor :dict
|
|
10
|
+
def initialize(message, sound_name, badge_number, action_key_caption, dict)
|
|
11
|
+
@message = message
|
|
12
|
+
@sound_name = sound_name
|
|
13
|
+
@badge_number = badge_number
|
|
14
|
+
@action_key_caption = action_key_caption
|
|
15
|
+
@dict = dict
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
require 'socket'
|
|
3
|
+
require_relative 'applepayload'
|
|
4
|
+
require_relative 'ssl_helper'
|
|
5
|
+
require 'openssl'
|
|
6
|
+
#
|
|
7
|
+
module Pushofy
|
|
8
|
+
class ApplePush
|
|
9
|
+
def initialize(payload_hash, deviceTokenHex,cert_name)
|
|
10
|
+
@payload_hash = payload_hash
|
|
11
|
+
@deviceTokenHex = deviceTokenHex
|
|
12
|
+
@cert_name = cert_name
|
|
13
|
+
end
|
|
14
|
+
def push
|
|
15
|
+
host = 'gateway.push.apple.com'
|
|
16
|
+
# path = Dir.pwd + '/app/controllers/ProductionCertificate.pem'
|
|
17
|
+
path = @cert_name
|
|
18
|
+
puts path
|
|
19
|
+
ssl_client = Pushofy::ConnectionToAppleServer::ssl_connect("gateway.push.apple.com", 2195, path)
|
|
20
|
+
ssl_client.connect
|
|
21
|
+
device = [@deviceTokenHex]
|
|
22
|
+
device_token_binary = device.pack('H*')
|
|
23
|
+
pt = device_token_binary
|
|
24
|
+
pm = @payload_hash.to_json
|
|
25
|
+
message = [0, 0, 32, pt, 0, pm.size, pm].pack('ccca*cca*')
|
|
26
|
+
ssl_client.write(message)
|
|
27
|
+
ssl_client.flush
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def feedback
|
|
31
|
+
host = 'feedback.sandbox.push.apple.com'
|
|
32
|
+
path = Dir.pwd + '/app/controllers/CertificateName.pem'
|
|
33
|
+
ssl_client = Pushofy::ConnectionToAppleServer::ssl_connect(host, 2196, path)
|
|
34
|
+
ssl_client.connect
|
|
35
|
+
apns_feedback = []
|
|
36
|
+
while message = ssl_client.gets
|
|
37
|
+
timestamp, _token_size, token = message.unpack('N1n1H*')
|
|
38
|
+
apns_feedback << [Time.at(timestamp), token]
|
|
39
|
+
end
|
|
40
|
+
ssl.close
|
|
41
|
+
sock.close
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
data/lib/pushofy/push.rb
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
require "pushofy/version"
|
|
2
|
+
require 'rubygems'
|
|
3
|
+
require 'socket'
|
|
4
|
+
require_relative 'applepayload'
|
|
5
|
+
require_relative 'ssl_helper'
|
|
6
|
+
require 'openssl'
|
|
7
|
+
module Pushofy
|
|
8
|
+
#
|
|
9
|
+
class Push
|
|
10
|
+
|
|
11
|
+
def initialize(args = {})
|
|
12
|
+
@id = args[:id]
|
|
13
|
+
@message = args[:message]
|
|
14
|
+
@app = args[:app]
|
|
15
|
+
@from = args[:from]
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def send_push
|
|
21
|
+
device = Device.find(@id)
|
|
22
|
+
device_type = device.device_type
|
|
23
|
+
if device_type == 'IOS' && !device_type.nil?
|
|
24
|
+
send_to_ios(device)
|
|
25
|
+
elsif device_type == 'Android' && !device_type.nil?
|
|
26
|
+
send_to_android(device)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def send_to_ios(device)
|
|
31
|
+
|
|
32
|
+
payload_hash = {}
|
|
33
|
+
payload_hash['aps'] = {}
|
|
34
|
+
payload_hash['aps']['alert'] = {}
|
|
35
|
+
payload_hash['aps']['alert']['body'] = "You have a new #{@app} from #{@from}"
|
|
36
|
+
payload_hash['aps']['sound'] = 'default'
|
|
37
|
+
payload_hash['aps']['badge'] = 1
|
|
38
|
+
payload_hash['app'] = @app
|
|
39
|
+
payload_hash['url'] = @message
|
|
40
|
+
device_token_hex = device.registration_id
|
|
41
|
+
puts "AAAAAA"
|
|
42
|
+
puts payload_hash
|
|
43
|
+
ApplePush.new(payload_hash, device_token_hex).push
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def send_to_android(device)
|
|
47
|
+
body = {}
|
|
48
|
+
arr = []
|
|
49
|
+
arr << device.registration_id
|
|
50
|
+
body['registration_ids'] = arr
|
|
51
|
+
# body['collapse_key'] = 'Updates Available'
|
|
52
|
+
# body['registration_ids'] = registration_ids
|
|
53
|
+
# body['data'] = 'Hi this is my first push message'
|
|
54
|
+
# body['delay_while_idle'] = # true or false
|
|
55
|
+
# body['time_to_live'] = # number in seconds
|
|
56
|
+
android_payload = { 'message' => "You have a new #{app} from #{from}" }
|
|
57
|
+
android_payload['app'] = @app
|
|
58
|
+
android_payload['url'] = @message
|
|
59
|
+
body['data'] = android_payload
|
|
60
|
+
a = AndroidPush.new
|
|
61
|
+
a.push(body)
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
require 'openssl'
|
|
2
|
+
require 'socket'
|
|
3
|
+
require_relative 'sslconnection'
|
|
4
|
+
|
|
5
|
+
module Pushofy
|
|
6
|
+
module ConnectionToAppleServer
|
|
7
|
+
def self.ssl_connect(host, port, cerfile)
|
|
8
|
+
ssl_connect = SSLConnection.new
|
|
9
|
+
ssl_connect.context = OpenSSL::SSL::SSLContext.new
|
|
10
|
+
key4_pem = File.read(cerfile)
|
|
11
|
+
ssl_connect.context.key = OpenSSL::PKey::RSA.new(key4_pem, 'akk322')
|
|
12
|
+
ssl_connect.context.cert = OpenSSL::X509::Certificate.new(key4_pem)
|
|
13
|
+
host = 'gateway.push.apple.com'
|
|
14
|
+
ssl_connect.tcp_client = TCPSocket.new host, 2195
|
|
15
|
+
OpenSSL::SSL::SSLSocket.new(ssl_connect.tcp_client, ssl_connect.context)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
data/lib/pushofy.rb
ADDED
|
File without changes
|
data/pushofy.gemspec
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
|
+
require 'pushofy/version'
|
|
5
|
+
|
|
6
|
+
Gem::Specification.new do |spec|
|
|
7
|
+
spec.name = "pushofy"
|
|
8
|
+
spec.version = Pushofy::VERSION
|
|
9
|
+
spec.authors = ["Ankur Kothari"]
|
|
10
|
+
spec.email = ["ankothari@gmail.com"]
|
|
11
|
+
spec.summary = "Sending push notifications to Android and iOS devices."
|
|
12
|
+
spec.description = "Send push notifications to Android and iOS devices by maping the device unique id with their device token or registration id."
|
|
13
|
+
spec.homepage = "http://developer.idlecampus.com"
|
|
14
|
+
spec.license = "MIT"
|
|
15
|
+
|
|
16
|
+
spec.files = `git ls-files`.split($/)
|
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
|
19
|
+
spec.require_paths = ["lib"]
|
|
20
|
+
|
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.5"
|
|
22
|
+
spec.add_development_dependency "rake"
|
|
23
|
+
|
|
24
|
+
spec.add_development_dependency "rspec"
|
|
25
|
+
spec.add_development_dependency 'dotenv'
|
|
26
|
+
|
|
27
|
+
end
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
require_relative '../../lib/pushofy/push'
|
|
2
|
+
describe Pushofy::Push do
|
|
3
|
+
|
|
4
|
+
before do
|
|
5
|
+
|
|
6
|
+
args = {}
|
|
7
|
+
args['id'] = "sadsda"
|
|
8
|
+
args['message'] = "message"
|
|
9
|
+
args['app'] = "app"
|
|
10
|
+
args['from'] = "from"
|
|
11
|
+
|
|
12
|
+
@push = Pushofy::Push.new(args)
|
|
13
|
+
end
|
|
14
|
+
subject {@push}
|
|
15
|
+
it{should respond_to(:send_push)}
|
|
16
|
+
it{should respond_to(:send_to_android)}
|
|
17
|
+
it{should respond_to(:send_to_ios)}
|
|
18
|
+
|
|
19
|
+
# context "#send_push" do
|
|
20
|
+
# it "sends a push to the device depending on the device type" do
|
|
21
|
+
# @push.send_push
|
|
22
|
+
|
|
23
|
+
# end
|
|
24
|
+
# end
|
|
25
|
+
|
|
26
|
+
context "#send_to_android" do
|
|
27
|
+
it "sends a push to the android device" do
|
|
28
|
+
@push.send_to_android
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
context "#send_to_ios" do
|
|
33
|
+
it "sends a push to the ios device" do
|
|
34
|
+
@push.send_to_ios
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: pushofy
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.11
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Ankur Kothari
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2014-01-01 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: bundler
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - ~>
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '1.5'
|
|
20
|
+
type: :development
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - ~>
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '1.5'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: rake
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - '>='
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '0'
|
|
34
|
+
type: :development
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - '>='
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '0'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: rspec
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - '>='
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '0'
|
|
48
|
+
type: :development
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - '>='
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '0'
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: dotenv
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
58
|
+
requirements:
|
|
59
|
+
- - '>='
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '0'
|
|
62
|
+
type: :development
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - '>='
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: '0'
|
|
69
|
+
description: Send push notifications to Android and iOS devices by maping the device
|
|
70
|
+
unique id with their device token or registration id.
|
|
71
|
+
email:
|
|
72
|
+
- ankothari@gmail.com
|
|
73
|
+
executables:
|
|
74
|
+
- pushofy.rb
|
|
75
|
+
extensions: []
|
|
76
|
+
extra_rdoc_files: []
|
|
77
|
+
files:
|
|
78
|
+
- .gitignore
|
|
79
|
+
- .rspec
|
|
80
|
+
- CertificateName.pem
|
|
81
|
+
- Gemfile
|
|
82
|
+
- LICENSE.txt
|
|
83
|
+
- ProductionCertificate.pem
|
|
84
|
+
- README.md
|
|
85
|
+
- Rakefile
|
|
86
|
+
- bin/pushofy.rb
|
|
87
|
+
- lib/pushofy.rb
|
|
88
|
+
- lib/pushofy/androidpush.rb
|
|
89
|
+
- lib/pushofy/applepayload.rb
|
|
90
|
+
- lib/pushofy/applepush.rb
|
|
91
|
+
- lib/pushofy/payload.rb
|
|
92
|
+
- lib/pushofy/push.rb
|
|
93
|
+
- lib/pushofy/ssl_helper.rb
|
|
94
|
+
- lib/pushofy/sslconnection.rb
|
|
95
|
+
- lib/pushofy/version.rb
|
|
96
|
+
- pushofy.gemspec
|
|
97
|
+
- spec/pushofy/androidpush_spec.rb
|
|
98
|
+
- spec/pushofy/applepush_spec.rb
|
|
99
|
+
- spec/pushofy/push_spec.rb
|
|
100
|
+
homepage: http://developer.idlecampus.com
|
|
101
|
+
licenses:
|
|
102
|
+
- MIT
|
|
103
|
+
metadata: {}
|
|
104
|
+
post_install_message:
|
|
105
|
+
rdoc_options: []
|
|
106
|
+
require_paths:
|
|
107
|
+
- lib
|
|
108
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
109
|
+
requirements:
|
|
110
|
+
- - '>='
|
|
111
|
+
- !ruby/object:Gem::Version
|
|
112
|
+
version: '0'
|
|
113
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
114
|
+
requirements:
|
|
115
|
+
- - '>='
|
|
116
|
+
- !ruby/object:Gem::Version
|
|
117
|
+
version: '0'
|
|
118
|
+
requirements: []
|
|
119
|
+
rubyforge_project:
|
|
120
|
+
rubygems_version: 2.1.10
|
|
121
|
+
signing_key:
|
|
122
|
+
specification_version: 4
|
|
123
|
+
summary: Sending push notifications to Android and iOS devices.
|
|
124
|
+
test_files:
|
|
125
|
+
- spec/pushofy/androidpush_spec.rb
|
|
126
|
+
- spec/pushofy/applepush_spec.rb
|
|
127
|
+
- spec/pushofy/push_spec.rb
|