diff --git a/server/db/create-admin-user.js b/server/db/create-admin-user.js index 48b82345..77f45194 100644 --- a/server/db/create-admin-user.js +++ b/server/db/create-admin-user.js @@ -7,6 +7,7 @@ /* eslint-disable no-console */ const { read } = require('read'); +const validator = require('validator'); const initKnex = require('knex'); const knexfile = require('./knexfile'); @@ -51,6 +52,21 @@ const input = async (fieldName, options = {}) => { isRequired: true, }); + // eslint-disable-next-line no-constant-condition + while (true) { + if ( + validator.isEmail(process.env.DEFAULT_ADMIN_EMAIL) && + process.env.DEFAULT_ADMIN_EMAIL.length <= 256 + ) { + break; + } + + console.log('Email must be a valid e-mail address with no more than 256 characters.'); + process.env.DEFAULT_ADMIN_EMAIL = await input('Email', { + isRequired: true, + }); + } + process.env.DEFAULT_ADMIN_PASSWORD = await input('Password', { isRequired: true, isPassword: true, diff --git a/server/db/seeds/default.js b/server/db/seeds/default.js index 2096da7b..ac0296b0 100644 --- a/server/db/seeds/default.js +++ b/server/db/seeds/default.js @@ -6,6 +6,7 @@ /* eslint-disable no-console */ const bcrypt = require('bcrypt'); +const validator = require('validator'); const USERNAME_REGEX = /^[a-zA-Z0-9]+((_|\.)?[a-zA-Z0-9])*$/; @@ -24,7 +25,7 @@ const buildUserData = () => { console.warn('Warning: DEFAULT_ADMIN_NAME exceeds 128 characters; truncating.'); data.name = process.env.DEFAULT_ADMIN_NAME.slice(0, 128); } else { - data.name = process.env.DEFAULT_ADMIN_NAME; + data.name = process.env.DEFAULT_ADMIN_NAME; } } if (process.env.DEFAULT_ADMIN_USERNAME) { @@ -63,6 +64,18 @@ exports.seed = async (knex) => { process.env.DEFAULT_ADMIN_EMAIL && process.env.DEFAULT_ADMIN_EMAIL.toLowerCase(); if (defaultAdminEmail) { + if (!validator.isEmail(defaultAdminEmail)) { + throw new Error( + `DEFAULT_ADMIN_EMAIL "${process.env.DEFAULT_ADMIN_EMAIL}" is not a valid e-mail address.`, + ); + } + + if (defaultAdminEmail.length > 256) { + throw new Error( + `DEFAULT_ADMIN_EMAIL "${process.env.DEFAULT_ADMIN_EMAIL}" exceeds 256 characters.`, + ); + } + const userData = buildUserData(); let userId;