Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 51 additions & 6 deletions spec/APNS.spec.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
const Parse = require('parse/node');
const APNS = require('../src/APNS').default;
const MockAPNProvider = require('./MockAPNProvider');
const path = require('path');

describe('APNS', () => {

Expand Down Expand Up @@ -104,7 +105,7 @@ describe('APNS', () => {

var prodApnsConnection = apns.providers[0];
expect(prodApnsConnection.index).toBe(0);

// TODO: Remove this checking onec we inject APNS
var prodApnsOptions = prodApnsConnection.client.config;
expect(prodApnsOptions.cert).toBe(args[1].cert);
Expand Down Expand Up @@ -190,7 +191,7 @@ describe('APNS', () => {
expect(notification.collapseId).toEqual(collapseId);
done();
});

it('can generate APNS notification from raw data', (done) => {
//Mock request data
let data = {
Expand All @@ -208,15 +209,15 @@ describe('APNS', () => {
};
let expirationTime = 1454571491354;
let collapseId = "collapseIdentifier";

let notification = APNS._generateNotification(data, { expirationTime: expirationTime, collapseId: collapseId });

expect(notification.expiry).toEqual(Math.round(expirationTime / 1000));
expect(notification.collapseId).toEqual(collapseId);

let stringifiedJSON = notification.compile();
let jsonObject = JSON.parse(stringifiedJSON);

expect(jsonObject.aps.alert).toEqual({ "loc-key" : "GAME_PLAY_REQUEST_FORMAT", "loc-args" : [ "Jenna", "Frank"] });
expect(jsonObject.aps.badge).toEqual(100);
expect(jsonObject.aps.sound).toEqual('test');
Expand Down Expand Up @@ -461,4 +462,48 @@ describe('APNS', () => {
done();
})
});

it('can handle expired certs', (done) => {
const args = {
cert: path.resolve(__dirname, './support/expired-cert.pem'),
key: path.resolve(__dirname, './support/expired-key.pem'),
production: false,
topic: 'topic',
};
const apns = new APNS(args);
expect(apns.providers.length).toBe(0);
done();
});

it('can handle multiple certs one expired', (done) => {
const args = [{
cert: path.resolve(__dirname, './support/expired-cert.pem'),
key: path.resolve(__dirname, './support/expired-key.pem'),
production: false,
topic: 'topic',
}, {
cert: '-----BEGIN CERTIFICATE-----fPEYJtQrEMXLC9JtFUJ6emXAWv2QdKu93QE+6o5htM+Eu/2oNFIEj2A71WUBu7kA-----END CERTIFICATE-----',
key: new Buffer('testKey'),
production: true,
topic: 'topicAgain',
}];
const apns = new APNS(args);
expect(apns.providers.length).toBe(1);
done();
});

it('can throw error for invalid certs', (done) => {
const args = {
cert: path.resolve(__dirname, './support/invalid-cert.pem'),
key: path.resolve(__dirname, './support/invalid-key.pem'),
production: false,
topic: 'topic',
};
try {
const apns = new APNS(args);
} catch (e) {
expect(e.message).toBe('certificate does not support configured environment, production: false');
}
done();
});
});
37 changes: 37 additions & 0 deletions spec/support/expired-cert.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
Bag Attributes
friendlyName: Apple Development IOS Push Services: com.parse.community
localKeyID: 5C E8 2E 04 A7 2E F5 8C 91 A3 DD 66 9C E5 C2 CC 0B 15 B2 42
subject=/UID=com.parse.community/CN=Apple Development IOS Push Services: com.parse.community/OU=5K554UVSU8/C=US
issuer=/C=US/O=Apple Inc./OU=Apple Worldwide Developer Relations/CN=Apple Worldwide Developer Relations Certification Authority
-----BEGIN CERTIFICATE-----
MIIFkzCCBHugAwIBAgIIXeC8XRH+qM4wDQYJKoZIhvcNAQEFBQAwgZYxCzAJBgNV
BAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBsZSBXb3Js
ZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3
aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkw
HhcNMTcwNzE4MjI0NzA1WhcNMTgwNzE4MjI0NzA1WjCBkjEnMCUGCgmSJomT8ixk
AQEMF2NvbS5kb2NsYXVuY2guZG9jbGF1bmNoMUUwQwYDVQQDDDxBcHBsZSBEZXZl
bG9wbWVudCBJT1MgUHVzaCBTZXJ2aWNlczogY29tLmRvY2xhdW5jaC5kb2NsYXVu
Y2gxEzARBgNVBAsMCjVLNTU0VVZTVTgxCzAJBgNVBAYTAlVTMIIBIjANBgkqhkiG
9w0BAQEFAAOCAQ8AMIIBCgKCAQEArPV1Z/54qZ4mYIn0o4/YSZRJiQzxBx5/1CmD
6ZNNlBfrJXPcSTS2j8E3U075JDpC9nWVRy1NX/+B1HbnWQmMUHvJhW15GaZ4SFYb
a58C6H3giFlbrKzfUaYLeyYFtZ1nSCyFyBFp/p8DZAVGiqkZO+ZcolsQ5YsaWQhK
QsYevtlkDr4LkthaupKJVela/hh9NYFiGtn6ThPT6T5F/mVzCcbSWpxm0ZxkAxSM
9xW5KyOKAU3mZa3dhU/IcU1UB7fdXCGN7ydTCJ+8LAakY2EuwRX4cmCsNsoSfOpN
qWaCc48l7iuOo/uKX6eEM4L9i0+Cg8NQZaSR8txwOGS/Me0a7QIDAQABo4IB5TCC
AeEwHQYDVR0OBBYEFFzoLgSnLvWMkaPdZpzlwswLFbJCMAkGA1UdEwQCMAAwHwYD
VR0jBBgwFoAUiCcXCam2GGCL7Ou69kdZxVJUo7cwggEPBgNVHSAEggEGMIIBAjCB
/wYJKoZIhvdjZAUBMIHxMIHDBggrBgEFBQcCAjCBtgyBs1JlbGlhbmNlIG9uIHRo
aXMgY2VydGlmaWNhdGUgYnkgYW55IHBhcnR5IGFzc3VtZXMgYWNjZXB0YW5jZSBv
ZiB0aGUgdGhlbiBhcHBsaWNhYmxlIHN0YW5kYXJkIHRlcm1zIGFuZCBjb25kaXRp
b25zIG9mIHVzZSwgY2VydGlmaWNhdGUgcG9saWN5IGFuZCBjZXJ0aWZpY2F0aW9u
IHByYWN0aWNlIHN0YXRlbWVudHMuMCkGCCsGAQUFBwIBFh1odHRwOi8vd3d3LmFw
cGxlLmNvbS9hcHBsZWNhLzBNBgNVHR8ERjBEMEKgQKA+hjxodHRwOi8vZGV2ZWxv
cGVyLmFwcGxlLmNvbS9jZXJ0aWZpY2F0aW9uYXV0aG9yaXR5L3d3ZHJjYS5jcmww
CwYDVR0PBAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMCMBAGCiqGSIb3Y2QGAwEE
AgUAMA0GCSqGSIb3DQEBBQUAA4IBAQBkUV5JOP/TMJxw154ou0q0sdMkU+3r553v
rvOaJSkhe165duA4BGAicq4ql0iOc0TCaHDQ98Z8KV3jdLtAWg8txEmc9GHmBo7k
3JcvwdayhHpRlDp0dYYjQSg8TOET+/+vh7RRIwBrVnaowph9aAved5T4gKd5VQ8t
Gfa4TSahC5HI0qXrym6v7StYfMDXEvkmtP2kGR9zGsvLDAryZENnUEkFm1CebGF1
311urD31WZHqsBIXqzWoVDtScHWo3ytujAsRRrbX8OkXotZdjs++K+4RCn6bAQTQ
IM3MquopVISU5LQGBoej/ijMdKuIRc7JP0WU+vQkMtplpues3jGI
-----END CERTIFICATE-----
32 changes: 32 additions & 0 deletions spec/support/expired-key.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
Bag Attributes
friendlyName: Diamond Lewis
localKeyID: 5C E8 2E 04 A7 2E F5 8C 91 A3 DD 66 9C E5 C2 CC 0B 15 B2 42
Key Attributes: <No Attributes>
-----BEGIN PRIVATE KEY-----
MIIEwAIBADANBgkqhkiG9w0BAQEFAASCBKowggSmAgEAAoIBAQCs9XVn/nipniZg
ifSjj9hJlEmJDPEHHn/UKYPpk02UF+slc9xJNLaPwTdTTvkkOkL2dZVHLU1f/4HU
dudZCYxQe8mFbXkZpnhIVhtrnwLofeCIWVusrN9Rpgt7JgW1nWdILIXIEWn+nwNk
BUaKqRk75lyiWxDlixpZCEpCxh6+2WQOvguS2Fq6kolV6Vr+GH01gWIa2fpOE9Pp
PkX+ZXMJxtJanGbRnGQDFIz3FbkrI4oBTeZlrd2FT8hxTVQHt91cIY3vJ1MIn7ws
BqRjYS7BFfhyYKw2yhJ86k2pZoJzjyXuK46j+4pfp4Qzgv2LT4KDw1BlpJHy3HA4
ZL8x7RrtAgMBAAECggEBAJ4Po7/p+nNoKEJJUNy49Dwp3Bn3Tb3nzYIifn7TMy6H
vUl43HO6TKyLMvhbT6wf4lpBkq59ZBy67/cuwrXH2AclWUEqjmU2kO3qYxyzMIEv
qCZzIyhmw59mU0+zq7wRoPWAWrI/19Htl7esao8Fgh4Po9Br0ME1olqDDPqA/FAD
8qBz34mfgfPFIkp4DdDyjNVhhfZrL8Fblce79fZTLc8STt4OPR9lq6XHn56T2UHo
H2nx/O4srnBxf7RhjFCs0sKr8kqKFhdp9f6v4/XvzdQI37WiEGN87Nh3MYHVRT1G
b9AfLDr+rGmz8IakmEYn8Go9KliYXmRw99AstTPa0IECgYEA1N4CEl4SmYAYN/XB
CdvehB4xNRB1mqnaD2AmbzRcJTdhE9jFhMvQSE6HT2bWg/Sk6vu9kQ86r9glPlSh
Os33eU+r0YCeO0ajp2OauCCxlCbY7WJOlvB8RObtDRCkEDknhOWjUpwaCv4pYFdE
ZN1JdC8F2GHOQeVVUGFJjk2DnmUCgYEA0AFLl45mvwJD7A7Qn3hLHTffrXWw0vYg
Do2iM4zW9/LqkN9f8IOoH0fvTjCbKJrD5PViNZHobhhDyrK2zG51RF6IfOMWUKJw
j15ozMJags21EX9vkDLXZuAoZdj/933oKbdovU/35dO8gIR2Ii7ImMbb2TTYCztv
7AwWxiImnekCgYEA03N5YV97YGnjJOuFh1KWlm0belfQSwPAbheX9k1v3zRExZ9G
jeScEMeZF+HS45+IlzfclhUnufee/2y4AB8LXsEqr2DxTXadKLEDxzYK0F1KjXxj
DwLynss53QmTv93WiOhINc6E/Dh/R4lIkl1TEwuG5ew6JDE4bzFFDQuo3BUCgYEA
r//4k0OFwqdLC4k5k0W44P8u/1mvBcIGO+oxzcak+mYLfgvT5PGxps46OYG9N61E
hg3vTH6qGcXkTrXLIM1x4ijO+kU304CvF1B+AouNBFLEnAqlPnEWe9C9vffQFfzu
HaY4NL9edZQkUuZCAwhs6YCR84bYKyDewe80se+hl0kCgYEAhn3NG2/shtJDciaz
fq1NuUImlFz9lMvshrdZUr9dLLJOILN0rDUvoh5xpkke3kcY9b0+h3uuza7M2kLW
3H29n0bQ0tcWBmj++0tnme9xZZwwJnD+BWZaKiKvfJMBla9RtVzqtqxRcgolaXNW
XECjnAS97KKo94/V89JEU8iRxMk=
-----END PRIVATE KEY-----
34 changes: 34 additions & 0 deletions spec/support/invalid-cert.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
-----BEGIN CERTIFICATE-----
MIIF1TCCBL2gAwIBAgIBATANBgkqhkiG9w0BAQsFADBiMRwwGgYDVQQDDBNBcHBs
ZSBJU1QgQ0EgMiAtIEcxMSAwHgYDVQQLDBdDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
eTETMBEGA1UECgwKQXBwbGUgSW5jLjELMAkGA1UEBhMCVVMwIBgPMjAxODA3MTgw
MzIxMThaFw0yMDA3MTgwMzIxMjJaMIGHMScwJQYDVQQDDB5hcGkuZGV2ZWxvcG1l
bnQucHVzaC5hcHBsZS5jb20xJTAjBgNVBAsMHG1hbmFnZW1lbnQ6aWRtcy5ncm91
cC41MzM1OTkxEzARBgNVBAoMCkFwcGxlIEluYy4xEzARBgNVBAgMCkNhbGlmb3Ju
aWExCzAJBgNVBAYTAlVTMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
9Y3jK32Rzv7TydwcjSIPkEUDQt8nkp3pfnfODosSf+OrxtWpHKsuipBefL9+Zlkp
+jCxPOLgT+0ljdU0KjKOfG2U8slTQZEG5Iu4ND61N/XGsXzN5uSmM4efb6a8lCke
F208CUczKAaLd/4JqqdXvejO7r1T7xkmapa0lb4p0XipA+Oktw0thKlWsii4emHg
dQnVEA3GbqHhX91EzMlFzXlwKAyByKOhoMYxiiIInRao8vQV4Q9Kr1JypEhiTGpu
yhZqmG4m51Wrezb/hHLTYhhbxOrbPoEvaFcdlkUvyOyDeb32aFdOhH6ktZ6IQrdg
I0zK9/mXU7ChbgFAsBHl+QIDAQABo4ICbDCCAmgwSAYIKwYBBQUHAQEEPDA6MDgG
CCsGAQUFBzABhixodHRwOi8vb2NzcC5hcHBsZS5jb20vb2NzcDA0LWFwcGxlaXN0
Y2EyZzEwMTAdBgNVHQ4EFgQUxHVMgUyth3XOE1Nwt6EuZ+lavBswDAYDVR0TAQH/
BAIwADAfBgNVHSMEGDAWgBS0VEYj5Vr0XtTJKxJe1/NEcidA2TCB/wYDVR0gBIH3
MIH0MIHxBgoqhkiG92NkBQsEMIHiMIGkBggrBgEFBQcCAjCBlxqBlFJlbGlhbmNl
IG9uIHRoaXMgY2VydGlmaWNhdGUgYnkgYW55IHBhcnR5IGFzc3VtZXMgYWNjZXB0
YW5jZSBvZiBhbnkgYXBwbGljYWJsZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1
c2UgYW5kL29yIGNlcnRpZmljYXRpb24gcHJhY3RpY2Ugc3RhdGVtZW50cy4wOQYI
KwYBBQUHAgEWLWh0dHA6Ly93d3cuYXBwbGUuY29tL2NlcnRpZmljYXRlYXV0aG9y
aXR5L3JwYTA3BgNVHR8EMDAuMCygKqAohiZodHRwOi8vY3JsLmFwcGxlLmNvbS9h
cHBsZWlzdGNhMmcxLmNybDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYB
BQUHAwEGCCsGAQUFBwMCMGQGA1UdEQRdMFuCHmFwaS5kZXZlbG9wbWVudC5wdXNo
LmFwcGxlLmNvbYI5YXBpLnNhbmRib3gucHVzaC5hcHBsZS5jb20gSVA6MTI3LjAu
MC4xIElQOjAuMC4wLjAgSVA6OjoxMA0GCSqGSIb3DQEBCwUAA4IBAQA+jOCUQWto
+cJrxblQtF8DAwHE+MRuQNK+LtST1dR11PLV8CHCmupRxGc/MAwcl0+NTbAJBCFB
uhcuFKosGWitI1GxZfn2iDjAWeFu+e1MOtMdGfiH+EYgv+t8cMiV+JR+wWGFLcZY
Zjm2zU7pL/pbWq6xh4IsQPjhXmgdJ1Kub2xeDhYT0K0aAnCrRzZRSYEVM9ivlY9V
Pt16N2FRClCEk1CR5q+uK/aEilqi/7wgLN7Nag71pnmiTlJSOpvlAztEA6rlyUxk
QqmpvX0Pw4FhN854nfEeptIHn4tvR//9TokUjTrWsDQgnUg67yVcvfA0JWBP0ceX
sq8sYIvlF7PN
-----END CERTIFICATE-----
27 changes: 27 additions & 0 deletions spec/support/invalid-key.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA9Y3jK32Rzv7TydwcjSIPkEUDQt8nkp3pfnfODosSf+OrxtWp
HKsuipBefL9+Zlkp+jCxPOLgT+0ljdU0KjKOfG2U8slTQZEG5Iu4ND61N/XGsXzN
5uSmM4efb6a8lCkeF208CUczKAaLd/4JqqdXvejO7r1T7xkmapa0lb4p0XipA+Ok
tw0thKlWsii4emHgdQnVEA3GbqHhX91EzMlFzXlwKAyByKOhoMYxiiIInRao8vQV
4Q9Kr1JypEhiTGpuyhZqmG4m51Wrezb/hHLTYhhbxOrbPoEvaFcdlkUvyOyDeb32
aFdOhH6ktZ6IQrdgI0zK9/mXU7ChbgFAsBHl+QIDAQABAoIBADRuybU9qObUTxDp
aUdRoJUjx2B+GgsaoQMaPeupEpgwWzun3+Z5PwTjcumcUjc0jtwXjaD8qP0oHD6+
6dag2QAEvithhd+YQiqHExxEz5lVZ8n6ZlUJOdwC9651ogrZBM3ny0wH4gqH6zwC
CLph5UBt99HOp5+EdUmJSKI46uEJQakW0HWovG8sBc8VY5vB5I8AjQ3zVRVorr/C
T38tEw2SKhx9O/FtrfH0vF45fisv4h4UtVIOZnaDkkDqcbfIDO0k9UQKuJGo35rn
EfmXuoAE+RDgUU5qvCvFWc6P76Ace8OXh2unTHJEWUY1057U6R37N8yGYEuJHTup
ZWCHJwECgYEA/YB4yNHZ45X3cL0ZD8QiT4C6LOoKCsiZmqNE0SUIFAMNIM4m0zHW
ZYicXVQdPNI8q/ytYs/B4xlnQAqYpvZ+UFi62tS9jJrxufUr1COBj1UhR9M8EeLr
zwLhWHsHEcoxZGkJRTQmhpGzIX7P7rdhUv40DxD/RLJZkm77kaNdY0kCgYEA9/ld
lgq3g01711a6EbIo4F5bXRlijEEz2UKO4St+kK+VHEN7NKHSQjYK6CuFUcMOuQ6X
a+2ikeZyQ2KJczfjeK5sdRL5b72Z4uSShpQGAk7nnkhecBu8/ViEVt79Bnf6h3Jo
BhB355FP914w8vN9a4X5IHLGInJWIT0sFMy9vTECgYEA85GR/BotiY9ZHTiDsPNZ
qBveRjNlDLFrbPo8r9st5NR9s6x//2IeRpY47y9XnE3AP9va2FsYRtTssMq9m4ax
HQ/0EThhG4zwfyUDRKQM4yP/gxyB1gm7Wr7AuBwVUdF9HaYSYyzVa2zouWE39ny6
BVz7thI1wtK+X4VFL8zQeQkCgYB3kNV/M0upFANSoY62WaE8DkMfcM4Dsqy9ZUpf
aAlu2jqbli4iAqTPKB+6MsHl2peOw2pfsAVjNCqEM07zL0+PMQs6qBt9tX4t2OiN
23HKSyGDQIHIrJdD0Rp+iKaYJ+G0zYU651XpYjecnt4bRyyCW+bzrmO62EaPYF+Q
5+fVAQKBgQDymWcOS7pt47V7SSecxrBm+UoyuiTYRZV1jHKzTIRGdt/WrqeosP1u
n+FafekHD/Yyg47GXepLYSjyl6RtdbI4mlAQBUzM82OlT7QiX53kuOTft2odRLkq
NimBghr5e3c0c9KZLXf7cKePzVA7aL7fNQCc86Ny9HakQ3eNqE8Qfg==
-----END RSA PRIVATE KEY-----
11 changes: 10 additions & 1 deletion src/APNS.js
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,16 @@ export class APNS {
apnsArgs.topic = apnsArgs.bundleId
}

let provider = APNS._createProvider(apnsArgs);
let provider;
try {
provider = APNS._createProvider(apnsArgs);
} catch (e) {
if (e.message.startsWith('certificate has expired')) {
continue;
} else {
throw new Error(e.message);
}
}
this.providers.push(provider);
}

Expand Down