Skip to content
This repository was archived by the owner on Jun 27, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
Next Next commit
feat: refactor validate
BREAKING CHANGE: validate no longer returns a boolean, but throws an
error on invalid input.
  • Loading branch information
wemeetagain committed Jul 15, 2020
commit 907031544eb80ef5e664c6bfda4cf2b05e9a8ee5
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
"aegir": "^22.0.0",
"benchmark": "^2.1.4",
"chai": "^4.2.0",
"chai-as-promised": "^7.1.1",
"chai-spies": "^1.0.0",
"dirty-chai": "^2.0.1",
"it-pair": "^1.0.0",
Expand Down
12 changes: 5 additions & 7 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -267,21 +267,19 @@ class PubsubBaseProtocol extends EventEmitter {

/**
* Validates the given message. The signature will be checked for authenticity.
* Throws an error on invalid messages
* @param {InMessage} message
* @returns {Promise<Boolean>}
* @returns {Promise<void>}
*/
async validate (message) { // eslint-disable-line require-await
// If strict signing is on and we have no signature, abort
if (this.strictSigning && !message.signature) {
this.log('Signing required and no signature was present, dropping message:', message)
return false
throw errcode(new Error('Signing required and no signature was present'), 'ERR_MISSING_SIGNATURE')
}

// Check the message signature if present
if (message.signature) {
return verifySignature(message)
} else {
return true
if (message.signature && !verifySignature(message)) {
throw errcode(new Error('Invalid message signature'), 'ERR_INVALID_SIGNATURE')
}
}

Expand Down
16 changes: 7 additions & 9 deletions test/pubsub.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
const chai = require('chai')
chai.use(require('dirty-chai'))
chai.use(require('chai-spies'))
chai.use(require('chai-as-promised'))
const expect = chai.expect
const sinon = require('sinon')

Expand Down Expand Up @@ -91,20 +92,20 @@ describe('pubsub base protocol', () => {

it('_buildMessage normalizes and signs messages', async () => {
const message = {
receivedFrom: peerId.id,
from: peerId.id,
data: 'hello',
seqno: randomSeqno(),
topicIDs: ['test-topic']
}

const signedMessage = await pubsub._buildMessage(message)
const verified = await pubsub.validate(signedMessage)

expect(verified).to.eql(true)
expect(pubsub.validate(signedMessage)).to.not.be.rejected()
})

it('validate with strict signing off will validate a present signature', async () => {
const message = {
receivedFrom: peerId.id,
from: peerId.id,
data: 'hello',
seqno: randomSeqno(),
Expand All @@ -114,22 +115,19 @@ describe('pubsub base protocol', () => {
sinon.stub(pubsub, 'strictSigning').value(false)

const signedMessage = await pubsub._buildMessage(message)
const verified = await pubsub.validate(signedMessage)

expect(verified).to.eql(true)
expect(pubsub.validate(signedMessage)).to.not.be.rejected()
})

it('validate with strict signing requires a signature', async () => {
const message = {
receivedFrom: peerId.id,
from: peerId.id,
data: 'hello',
seqno: randomSeqno(),
topicIDs: ['test-topic']
}

const verified = await pubsub.validate(message)

expect(verified).to.eql(false)
await expect(pubsub.validate(message)).to.be.rejectedWith(Error, 'Signing required and no signature was present')
})
})

Expand Down