dev: filter topic ARNs (and tweaks)

This commit is contained in:
KernelDeimos
2024-12-23 14:58:39 -05:00
parent 5ed2f39ec7
commit 35cc83a560
2 changed files with 14 additions and 4 deletions
+1 -1
View File
@@ -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 }) => {
+13 -3
View File
@@ -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 ) {