New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

sns-validator

Package Overview
Dependencies
Maintainers
1
Versions
9
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

sns-validator - npm Package Compare versions

Comparing version 0.2.0 to 0.2.1

.idea/encodings.xml

27

index.js

@@ -23,3 +23,3 @@ "use strict";

],
signableKeys = [
signableKeysForNotification = [
'Message',

@@ -30,2 +30,11 @@ 'MessageId',

'Timestamp',
'TopicArn',
'Type'
],
signableKeysForSubscription = [
'Message',
'MessageId',
'Subject',
'SubscribeURL',
'Timestamp',
'Token',

@@ -93,3 +102,3 @@ 'TopicArn',

var validateSignature = function (message, cb) {
var validateSignature = function (message, cb, encoding) {
if (message['SignatureVersion'] !== '1') {

@@ -101,2 +110,9 @@ cb(new Error('The signature version '

var signableKeys = [];
if (message.Type === 'SubscriptionConfirmation') {
signableKeys = signableKeysForSubscription.slice(0);
} else {
signableKeys = signableKeysForNotification.slice(0);
}
var verifier = crypto.createVerify('RSA-SHA1');

@@ -106,3 +122,3 @@ for (var i = 0; i < signableKeys.length; i++) {

verifier.update(signableKeys[i] + "\n"
+ message[signableKeys[i]] + "\n");
+ message[signableKeys[i]] + "\n", encoding);
}

@@ -131,4 +147,5 @@ }

*/
function MessageValidator(hostPattern) {
function MessageValidator(hostPattern, encoding) {
this.hostPattern = hostPattern || defaultHostPattern;
this.encoding = encoding;
}

@@ -165,5 +182,5 @@

validateSignature(hash, cb);
validateSignature(hash, cb, this.encoding);
};
module.exports = MessageValidator;

2

package.json
{
"name": "sns-validator",
"version": "0.2.0",
"version": "0.2.1",
"description": "A standalone validator for inbound SNS HTTP messages. No dependency on the AWS SDK for JavaScript.",

@@ -5,0 +5,0 @@ "repository": {

@@ -31,3 +31,3 @@ # Amazon SNS Message Validator for JavaScript

}
// message has been validated and its signature checked.

@@ -83,3 +83,3 @@ });

}
if (message['Type'] === 'SubscriptionConfirmation') {

@@ -93,2 +93,11 @@ https.get(message['SubscribeURL'], function (res) {

If an incoming message includes multibyte characters and its encoding is utf8,
set the encoding to `validator`.
```javascript
var MessageValidator = require('sns-validator'),
validator = new MessageValidator();
validator.encoding = 'utf8';
```
### Receiving a Notification

@@ -95,0 +104,0 @@

@@ -8,3 +8,3 @@ var chai = require('chai'),

MessageValidator = rewire('../index.js'),
signableKeys = MessageValidator.__get__('signableKeys'),
signableKeysForSubscription = MessageValidator.__get__('signableKeysForSubscription'),
invalidMessage = {

@@ -28,2 +28,16 @@ foo: 'bar',

}),
utf8Message = {
Type: 'Notification',
MessageId: '1',
TopicArn: 'arn',
Message: 'A Message For you!',
Timestamp: (new Date).toISOString(),
SignatureVersion: '1',
SigningCertURL: "https://localhost:56789/cert.pem"
},
utf8SubscriptionControlMessage = _.extend({}, utf8Message, {
Token: 'Nonce',
SubscribeURL: 'https://www.amazonaws.com',
Type: 'SubscriptionConfirmation'
}),
validCertUrl = 'https://sns.us-east-1.amazonaws.com/cert.pem';

@@ -44,6 +58,6 @@

for (var j = 0; j < signableKeys.length; j++) {
if (signableKeys[j] in validMessages[i]) {
signer.update(signableKeys[j] + "\n"
+ validMessages[i][signableKeys[j]] + "\n");
for (var j = 0; j < signableKeysForSubscription.length; j++) {
if (signableKeysForSubscription[j] in validMessages[i]) {
signer.update(signableKeysForSubscription[j] + "\n"
+ validMessages[i][signableKeysForSubscription[j]] + "\n");
}

@@ -188,2 +202,38 @@ }

});
describe('UTF8 message validation', function () {
before(function (done) {
pem.createCertificate({}, function (err, certHash) {
if (err) throw err;
var crypto = require('crypto'),
validMessages = [utf8Message, utf8SubscriptionControlMessage];
for (var i = 0; i < validMessages.length; i++) {
var signer = crypto.createSign('RSA-SHA1');
for (var j = 0; j < signableKeysForSubscription.length; j++) {
if (signableKeysForSubscription[j] in validMessages[i]) {
signer.update(signableKeysForSubscription[j] + "\n"
+ validMessages[i][signableKeysForSubscription[j]] + "\n", 'utf8');
}
}
validMessages[i]['Signature']
= signer.sign(certHash.serviceKey, 'base64');
}
MessageValidator.__set__('getCertificate', function (url, cb) {
cb(null, certHash.certificate);
});
done();
});
});
it('should accept a valid UTF8 message', function (done) {
(new MessageValidator(/^localhost:56789$/, 'utf8'))
.validate(utf8Message, done);
});
});
});

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc