From 29b4761d8a8ddc6a833a03f0f408b78cf6f1005e Mon Sep 17 00:00:00 2001 From: Dylan Mendelowitz Date: Wed, 30 Jun 2021 13:55:46 -0400 Subject: [PATCH 1/2] Adding custom schema format for comma separated emails --- src/helpers/configValidator.js | 9 +++++++++ src/helpers/schemas/config.schema.json | 6 ++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/helpers/configValidator.js b/src/helpers/configValidator.js index 6aca537b..1de5e770 100644 --- a/src/helpers/configValidator.js +++ b/src/helpers/configValidator.js @@ -5,6 +5,15 @@ const configSchema = require('./schemas/config.schema.json'); const ajv = new Ajv({ logger: false, allErrors: true }); ajv.addMetaSchema(metaSchema); + +ajv.addFormat('comma-separated-emails', { + type: 'string', + validate: (emails) => { + const emailRegex = new RegExp(/^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i); + return emails.split(',').every((email) => emailRegex.test(email.trim())); + }, +}); + const validator = ajv.addSchema(configSchema, 'config'); function validateConfig(config) { diff --git a/src/helpers/schemas/config.schema.json b/src/helpers/schemas/config.schema.json index 8df6e9ff..fd66a709 100644 --- a/src/helpers/schemas/config.schema.json +++ b/src/helpers/schemas/config.schema.json @@ -49,12 +49,14 @@ "to": { "anyOf": [ { - "type": "string" + "type": "string", + "format": "comma-separated-emails" }, { "type": "array", "items": { - "type": "string" + "type": "string", + "format": "email" } } ] From 604fe44593ab4f032738bbb6cf9ae3c0c2ac8a79 Mon Sep 17 00:00:00 2001 From: Dylan Mendelowitz Date: Thu, 1 Jul 2021 09:45:02 -0400 Subject: [PATCH 2/2] citing my sources --- src/helpers/configValidator.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/helpers/configValidator.js b/src/helpers/configValidator.js index 1de5e770..bf97cee1 100644 --- a/src/helpers/configValidator.js +++ b/src/helpers/configValidator.js @@ -9,6 +9,7 @@ ajv.addMetaSchema(metaSchema); ajv.addFormat('comma-separated-emails', { type: 'string', validate: (emails) => { + // this is Ajv's regex for email format (https://github.com/ajv-validator/ajv-formats/blob/master/src/formats.ts#L106) const emailRegex = new RegExp(/^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i); return emails.split(',').every((email) => emailRegex.test(email.trim())); },