diff --git a/src/backend/src/CoreModule.js b/src/backend/src/CoreModule.js index 1110e7922..c970d8917 100644 --- a/src/backend/src/CoreModule.js +++ b/src/backend/src/CoreModule.js @@ -363,7 +363,7 @@ const install = async ({ services, app, useapi, modapi }) => { services.registerService('old-app-name', OldAppNameService); const { SNSService } = require('./services/SNSService'); - services.registerService('sns-service', SNSService); + services.registerService('sns', SNSService); } const install_legacy = async ({ services }) => { diff --git a/src/backend/src/services/SNSService.js b/src/backend/src/services/SNSService.js index 3c592d7f3..8db390222 100644 --- a/src/backend/src/services/SNSService.js +++ b/src/backend/src/services/SNSService.js @@ -89,6 +89,16 @@ class SNSService extends BaseService { throw Error('Invalid certificate URL'); } + const topic_arns = this.config?.topic_arns ?? []; + if ( ! topic_arns.includes(message.TopicArn) ) { + this.log.info('SES response', { + status: 403, because: 'invalid TopicArn', + value: message.TopicArn, + }); + res.status(403).send('Invalid TopicArn'); + return; + } + if ( ! await this.verify_message_(message) ) { this.log.info('SES response', { status: 403, because: 'message signature validation', @@ -118,7 +128,9 @@ class SNSService extends BaseService { } async on_from_sns ({ message }) { - console.log('SNS message', { message }); + const svc_event = this.services.get('event'); + this.log.info('SNS message', { message }); + svc_event.emit('sns', { message }); } async verify_message_ (message, options = {}) { @@ -131,8 +143,6 @@ class SNSService extends BaseService { throw e; } - console.log('WHAT IS THE CERT?', cert); - const verify = crypto.createVerify('sha1WithRSAEncryption'); for ( const field of SNS_TYPES[message.Type].signature_fields ) {