'use strict'; import React from "react"; import {MailerType} from "../../../shared/send-configurations"; import { CheckBox, Dropdown, Fieldset, InputField, TextArea } from "../lib/form"; import {Trans} from "react-i18next"; export const mailerTypesOrder = [ MailerType.ZONE_MTA, MailerType.GENERIC_SMTP, MailerType.AWS_SES ]; export function getMailerTypes(t) { const mailerTypes = {}; function initFieldsIfMissing(mutState, mailerType) { const initVals = mailerTypes[mailerType].initData(); for (const key in initVals) { if (!mutState.hasIn([key])) { mutState.setIn([key, 'value'], initVals[key]); } } } function clearBeforeSave(data) { for (const mailerKey in mailerTypes) { const initVals = mailerTypes[mailerKey].initData(); for (const fieldKey in initVals) { delete data[fieldKey]; } } } function validateNumber(state, field, label, emptyAllowed = false) { const value = state.getIn([field, 'value']); if (typeof value === 'string' && value.trim() === '' && !emptyAllowed) { // After load, the numerical values can be still numbers state.setIn([field, 'error'], t('{{label}} must not be empty', {label})); } else if (isNaN(value)) { state.setIn([field, 'error'], t('{{label}} must be a number', {label})); } else { state.setIn([field, 'error'], null); } } function getInitCommon() { return { maxConnections: '5', throttling: '', logTransactions: false }; } function getInitGenericSMTP() { return { ...getInitCommon(), smtpHostname: '', smtpPort: '', smtpEncryption: 'NONE', smtpUseAuth: false, smtpUser: '', smtpPassword: '', smtpAllowSelfSigned: false, smtpMaxMessages: '100' }; } function afterLoadCommon(data) { data.maxConnections = data.mailer_settings.maxConnections; data.throttling = data.mailer_settings.throttling || ''; data.logTransactions = data.mailer_settings.logTransactions; } function afterLoadGenericSMTP(data) { afterLoadCommon(data); data.smtpHostname = data.mailer_settings.hostname; data.smtpPort = data.mailer_settings.port || ''; data.smtpEncryption = data.mailer_settings.encryption; data.smtpUseAuth = data.mailer_settings.useAuth; data.smtpUser = data.mailer_settings.user; data.smtpPassword = data.mailer_settings.password; data.smtpAllowSelfSigned = data.mailer_settings.allowSelfSigned; data.smtpMaxMessages = data.mailer_settings.maxMessages; } function beforeSaveCommon(data) { data.mailer_settings = {}; data.mailer_settings.maxConnections = Number(data.maxConnections); data.mailer_settings.throttling = Number(data.throttling); data.mailer_settings.logTransactions = data.logTransactions; } function beforeSaveGenericSMTP(data) { beforeSaveCommon(data); data.mailer_settings.hostname = data.smtpHostname; data.mailer_settings.port = Number(data.smtpPort); data.mailer_settings.encryption = data.smtpEncryption; data.mailer_settings.useAuth = data.smtpUseAuth; data.mailer_settings.user = data.smtpUser; data.mailer_settings.password = data.smtpPassword; data.mailer_settings.allowSelfSigned = data.smtpAllowSelfSigned; data.mailer_settings.maxMessages = Number(data.smtpMaxMessages); } function validateCommon(state) { validateNumber(state, 'maxConnections', 'Max connections'); validateNumber(state, 'throttling', 'Throttling', true); } function validateGenericSMTP(state) { validateCommon(state); validateNumber(state, 'smtpPort', 'Port', true); validateNumber(state, 'smtpMaxMessages', 'Max messages'); } const typeOptions = [ { key: MailerType.GENERIC_SMTP, label: t('Generic SMTP')}, { key: MailerType.ZONE_MTA, label: t('Zone MTA')}, { key: MailerType.AWS_SES, label: t('Amazon SES')} ]; const smtpEncryptionOptions = [ { key: 'NONE', label: t('Do not use encryption')}, { key: 'TLS', label: t('Use TLS – usually selected for port 465')}, { key: 'STARTTLS', label: t('Use STARTTLS – usually selected for port 587 and 25')} ]; const sesRegionOptions = [ { key: 'us-east-1', label: t('US-EAST-1')}, { key: 'us-west-2', label: t('US-WEST-2')}, { key: 'eu-west-1', label: t('EU-WEST-1')} ]; mailerTypes[MailerType.GENERIC_SMTP] = { getForm: owner =>