check mail config on mail value change
This commit is contained in:
parent
5b3a72820a
commit
41cb4eb569
2 changed files with 57 additions and 3 deletions
|
@ -1,6 +1,8 @@
|
|||
import { Request, Response } from "express";
|
||||
import SettingHelper from "../../../helpers/settingsHelper";
|
||||
import { SettingString, SettingValueMapping } from "../../../type/settingTypes";
|
||||
import MailHelper from "../../../helpers/mailHelper";
|
||||
import InternalException from "../../../exceptions/internalException";
|
||||
|
||||
/**
|
||||
* @description get All settings
|
||||
|
@ -40,7 +42,15 @@ export async function setSetting(req: Request, res: Response): Promise<any> {
|
|||
let setting = req.body.setting as SettingString;
|
||||
let value = req.body.value as string;
|
||||
|
||||
SettingHelper.setSetting(setting, value);
|
||||
await SettingHelper.checkMail([{ key: setting, value }]).catch((err) => {
|
||||
if (err == "mail") {
|
||||
throw new InternalException("Mail is not valid");
|
||||
} else {
|
||||
throw new InternalException("Config is not valid");
|
||||
}
|
||||
});
|
||||
|
||||
await SettingHelper.setSetting(setting, value);
|
||||
|
||||
res.sendStatus(204);
|
||||
}
|
||||
|
@ -54,8 +64,16 @@ export async function setSetting(req: Request, res: Response): Promise<any> {
|
|||
export async function setSettings<K extends SettingString>(req: Request, res: Response): Promise<any> {
|
||||
let setting = req.body as Array<{ key: K; value: SettingValueMapping[K] }>;
|
||||
|
||||
await SettingHelper.checkMail(setting).catch((err) => {
|
||||
if (err == "mail") {
|
||||
throw new InternalException("Mail is not valid");
|
||||
} else {
|
||||
throw new InternalException("Config is not valid");
|
||||
}
|
||||
});
|
||||
|
||||
for (let entry of setting) {
|
||||
SettingHelper.setSetting(entry.key, entry.value);
|
||||
await SettingHelper.setSetting(entry.key, entry.value);
|
||||
}
|
||||
|
||||
res.sendStatus(204);
|
||||
|
@ -92,7 +110,7 @@ export async function setImages(req: Request, res: Response): Promise<any> {
|
|||
export async function resetSetting(req: Request, res: Response): Promise<any> {
|
||||
let setting = req.params.setting as SettingString;
|
||||
|
||||
SettingHelper.resetSetting(setting);
|
||||
await SettingHelper.resetSetting(setting);
|
||||
|
||||
res.sendStatus(204);
|
||||
}
|
||||
|
|
|
@ -14,6 +14,9 @@ import {
|
|||
UrlConverter,
|
||||
} from "./convertHelper";
|
||||
import cloneDeep from "lodash.clonedeep";
|
||||
import { rejects } from "assert";
|
||||
import InternalException from "../exceptions/internalException";
|
||||
import MailHelper from "./mailHelper";
|
||||
|
||||
export default abstract class SettingHelper {
|
||||
private static settings: { [key in SettingString]?: string } = {};
|
||||
|
@ -141,6 +144,39 @@ export default abstract class SettingHelper {
|
|||
}
|
||||
}
|
||||
|
||||
public static async checkMail<K extends SettingString>(
|
||||
setting: Array<{ key: K; value: SettingValueMapping[K] }>
|
||||
): Promise<void> {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
if (setting.some((t) => t.key == "mail.email" && t.value != undefined)) {
|
||||
let emailValue = setting.find((t) => t.key == "mail.email").value as string;
|
||||
let checkMail = await MailHelper.checkMail(emailValue);
|
||||
if (!checkMail) {
|
||||
return reject("mail");
|
||||
}
|
||||
}
|
||||
|
||||
if (setting.some((t) => t.key.startsWith("mail"))) {
|
||||
let checkConfig = await MailHelper.verifyTransport({
|
||||
user:
|
||||
(setting.find((t) => t.key == "mail.username").value as string) ??
|
||||
SettingHelper.getSetting("mail.username"),
|
||||
password:
|
||||
(setting.find((t) => t.key == "mail.password").value as string) ??
|
||||
SettingHelper.getSetting("mail.password"),
|
||||
host: (setting.find((t) => t.key == "mail.host").value as string) ?? SettingHelper.getSetting("mail.host"),
|
||||
port: (setting.find((t) => t.key == "mail.port").value as number) ?? SettingHelper.getSetting("mail.port"),
|
||||
secure:
|
||||
(setting.find((t) => t.key == "mail.secure").value as boolean) ?? SettingHelper.getSetting("mail.secure"),
|
||||
});
|
||||
if (!checkConfig) {
|
||||
return reject("Config is not valid");
|
||||
}
|
||||
}
|
||||
resolve();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates a setting
|
||||
* @param key The key of the setting
|
||||
|
|
Loading…
Add table
Reference in a new issue