1
0
mirror of https://github.com/xuthus83/pigallery2.git synced 2024-11-03 21:04:03 +08:00
pigallery2/backend/middlewares/AdminMWs.ts

104 lines
3.9 KiB
TypeScript
Raw Normal View History

2017-07-08 18:43:42 +08:00
import {NextFunction, Request, Response} from "express";
import {Error, ErrorCodes} from "../../common/entities/Error";
import {ObjectManagerRepository} from "../model/ObjectManagerRepository";
import {Logger} from "../Logger";
import {MySQLConnection} from "../model/mysql/MySQLConnection";
import {DataBaseConfig, DatabaseType} from "../../common/config/private/IPrivateConfig";
import {Config} from "../../common/config/private/Config";
2017-07-14 05:39:09 +08:00
import {ConfigDiagnostics} from "../model/ConfigDiagnostics";
import {MapConfig} from "../../common/config/public/ConfigClass";
2017-07-08 18:43:42 +08:00
const LOG_TAG = "[AdminMWs]";
export class AdminMWs {
public static async updateDatabaseSettings(req: Request, res: Response, next: NextFunction) {
2017-07-14 05:39:09 +08:00
if ((typeof req.body === 'undefined') || (typeof req.body.settings === 'undefined')) {
return next(new Error(ErrorCodes.INPUT_ERROR, "settings is needed"));
2017-07-08 18:43:42 +08:00
}
2017-07-14 05:39:09 +08:00
const databaseSettings = <DataBaseConfig>req.body.settings;
2017-07-08 18:43:42 +08:00
try {
2017-07-13 00:31:19 +08:00
if (databaseSettings.type == DatabaseType.mysql) {
2017-07-08 18:43:42 +08:00
await MySQLConnection.tryConnection(databaseSettings);
}
Config.Server.database = databaseSettings;
2017-07-14 05:39:09 +08:00
//only updating explicitly set config (not saving config set by the diagnostics)
const original = Config.original();
original.Server.database = databaseSettings;
original.save();
await ConfigDiagnostics.runDiagnostics();
2017-07-08 18:43:42 +08:00
Logger.info(LOG_TAG, "new config:");
Logger.info(LOG_TAG, JSON.stringify(Config, null, '\t'));
ObjectManagerRepository.reset();
if (Config.Server.database.type == DatabaseType.mysql) {
await ObjectManagerRepository.InitMySQLManagers();
} else {
await ObjectManagerRepository.InitMemoryManagers();
}
return next();
} catch (err) {
2017-07-09 20:23:50 +08:00
return next(new Error(ErrorCodes.SETTINGS_ERROR, "Error saving database settings", err));
2017-07-08 18:43:42 +08:00
}
}
public static async testDatabaseSettings(req: Request, res: Response, next: NextFunction) {
2017-07-14 05:39:09 +08:00
if ((typeof req.body === 'undefined') || (typeof req.body.settings === 'undefined')) {
return next(new Error(ErrorCodes.INPUT_ERROR, "settings is needed"));
2017-07-08 18:43:42 +08:00
}
2017-07-14 05:39:09 +08:00
const databaseSettings = <DataBaseConfig>req.body.settings;
2017-07-08 18:43:42 +08:00
try {
2017-07-13 00:31:19 +08:00
if (databaseSettings.type == DatabaseType.mysql) {
2017-07-14 05:39:09 +08:00
await ConfigDiagnostics.testDatabase(databaseSettings);
2017-07-08 18:43:42 +08:00
}
return next();
} catch (err) {
2017-07-13 00:31:19 +08:00
return next(new Error(ErrorCodes.SETTINGS_ERROR, "Settings error: " + JSON.stringify(err, null, ' '), err));
2017-07-08 18:43:42 +08:00
}
}
2017-07-14 05:39:09 +08:00
public static async updateMapSettings(req: Request, res: Response, next: NextFunction) {
if ((typeof req.body === 'undefined') || (typeof req.body.settings === 'undefined')) {
return next(new Error(ErrorCodes.INPUT_ERROR, "settings is needed"));
}
try {
await ConfigDiagnostics.testMapConfig(<MapConfig>req.body.settings);
Config.Client.Map = <MapConfig>req.body.settings;
//only updating explicitly set config (not saving config set by the diagnostics)
const original = Config.original();
original.Client.Map = <MapConfig>req.body.settings;
original.save();
await ConfigDiagnostics.runDiagnostics();
Logger.info(LOG_TAG, "new config:");
Logger.info(LOG_TAG, JSON.stringify(Config, null, '\t'));
return next();
} catch (err) {
return next(new Error(ErrorCodes.SETTINGS_ERROR, "Settings error: " + JSON.stringify(err, null, ' '), err));
}
}
public static async testMapSettings(req: Request, res: Response, next: NextFunction) {
if ((typeof req.body === 'undefined') || (typeof req.body.settings === 'undefined')) {
return next(new Error(ErrorCodes.INPUT_ERROR, "settings is needed"));
}
try {
await ConfigDiagnostics.testMapConfig(<MapConfig>req.body.settings);
return next();
} catch (err) {
return next(new Error(ErrorCodes.SETTINGS_ERROR, "Settings error: " + JSON.stringify(err, null, ' '), err));
}
}
2017-07-08 18:43:42 +08:00
}