provide setting endbpoints
This commit is contained in:
parent
a8edc19f34
commit
7aa9038a61
11 changed files with 137 additions and 13 deletions
18
package-lock.json
generated
18
package-lock.json
generated
|
@ -20,6 +20,7 @@
|
|||
"ics": "^3.8.1",
|
||||
"ip": "^2.0.1",
|
||||
"jsonwebtoken": "^9.0.2",
|
||||
"lodash.clonedeep": "^4.5.0",
|
||||
"lodash.uniqby": "^4.7.0",
|
||||
"moment": "^2.30.1",
|
||||
"morgan": "^1.10.0",
|
||||
|
@ -45,6 +46,7 @@
|
|||
"@types/express": "^5.0.1",
|
||||
"@types/ip": "^1.1.3",
|
||||
"@types/jsonwebtoken": "^9.0.6",
|
||||
"@types/lodash.clonedeep": "^4.5.9",
|
||||
"@types/lodash.uniqby": "^4.7.9",
|
||||
"@types/morgan": "^1.9.9",
|
||||
"@types/ms": "^2.1.0",
|
||||
|
@ -462,6 +464,16 @@
|
|||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/lodash.clonedeep": {
|
||||
"version": "4.5.9",
|
||||
"resolved": "https://registry.npmjs.org/@types/lodash.clonedeep/-/lodash.clonedeep-4.5.9.tgz",
|
||||
"integrity": "sha512-19429mWC+FyaAhOLzsS8kZUsI+/GmBAQ0HFiCPsKGU+7pBXOQWhyrY6xNNDwUSX8SMZMJvuFVMF9O5dQOlQK9Q==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@types/lodash": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/lodash.uniqby": {
|
||||
"version": "4.7.9",
|
||||
"resolved": "https://registry.npmjs.org/@types/lodash.uniqby/-/lodash.uniqby-4.7.9.tgz",
|
||||
|
@ -2770,6 +2782,12 @@
|
|||
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/lodash.clonedeep": {
|
||||
"version": "4.5.0",
|
||||
"resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
|
||||
"integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/lodash.includes": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
"ics": "^3.8.1",
|
||||
"ip": "^2.0.1",
|
||||
"jsonwebtoken": "^9.0.2",
|
||||
"lodash.clonedeep": "^4.5.0",
|
||||
"lodash.uniqby": "^4.7.0",
|
||||
"moment": "^2.30.1",
|
||||
"morgan": "^1.10.0",
|
||||
|
@ -61,6 +62,7 @@
|
|||
"@types/express": "^5.0.1",
|
||||
"@types/ip": "^1.1.3",
|
||||
"@types/jsonwebtoken": "^9.0.6",
|
||||
"@types/lodash.clonedeep": "^4.5.9",
|
||||
"@types/lodash.uniqby": "^4.7.9",
|
||||
"@types/morgan": "^1.9.9",
|
||||
"@types/ms": "^2.1.0",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import { dataSource } from "../data-source";
|
||||
import { setting } from "../entity/setting";
|
||||
import DatabaseActionException from "../exceptions/databaseActionException";
|
||||
import { StringHelper } from "../helpers/stringHelper";
|
||||
import { dataSource } from "../../../data-source";
|
||||
import { setting } from "../../../entity/setting";
|
||||
import DatabaseActionException from "../../../exceptions/databaseActionException";
|
||||
import { StringHelper } from "../../../helpers/stringHelper";
|
||||
import { CreateOrUpdateSettingCommand, DeleteSettingCommand } from "./settingCommand";
|
||||
|
||||
export default abstract class SettingCommandHandler {
|
60
src/controller/admin/management/setting.ts
Normal file
60
src/controller/admin/management/setting.ts
Normal file
|
@ -0,0 +1,60 @@
|
|||
import { Request, Response } from "express";
|
||||
import SettingHelper from "../../../helpers/settingsHelper";
|
||||
import { SettingString } from "../../../type/settingTypes";
|
||||
|
||||
/**
|
||||
* @description get All settings
|
||||
* @param req {Request} Express req object
|
||||
* @param res {Response} Express res object
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
export async function getSettings(req: Request, res: Response): Promise<any> {
|
||||
res.json(SettingHelper.getAllSettings());
|
||||
}
|
||||
|
||||
/**
|
||||
* @description get setting
|
||||
* @param req {Request} Express req object
|
||||
* @param res {Response} Express res object
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
export async function getSetting(req: Request, res: Response): Promise<any> {
|
||||
let setting = req.params.setting as SettingString;
|
||||
|
||||
let value = SettingHelper.getSetting(setting);
|
||||
|
||||
if (setting == "mail.password") {
|
||||
value = undefined;
|
||||
}
|
||||
|
||||
res.send(value);
|
||||
}
|
||||
|
||||
/**
|
||||
* @description set setting
|
||||
* @param req {Request} Express req object
|
||||
* @param res {Response} Express res object
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
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);
|
||||
|
||||
res.sendStatus(204);
|
||||
}
|
||||
|
||||
/**
|
||||
* @description reset setting
|
||||
* @param req {Request} Express req object
|
||||
* @param res {Response} Express res object
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
export async function resetSetting(req: Request, res: Response): Promise<any> {
|
||||
let setting = req.params.setting as SettingString;
|
||||
|
||||
SettingHelper.resetSetting(setting);
|
||||
|
||||
res.sendStatus(204);
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
import { SettingString, settingsType, SettingTopic, SettingTypeAtom, SettingValueMapping } from "../type/settingTypes";
|
||||
import { CodingHelper } from "./codingHelper";
|
||||
import SettingCommandHandler from "../command/settingCommandHandler";
|
||||
import SettingService from "../service/settingService";
|
||||
import SettingCommandHandler from "../command/management/setting/settingCommandHandler";
|
||||
import SettingService from "../service/management/settingService";
|
||||
import { APPLICATION_SECRET } from "../env.defaults";
|
||||
import {
|
||||
BooleanConverter,
|
||||
|
@ -12,6 +12,7 @@ import {
|
|||
TypeConverter,
|
||||
UrlConverter,
|
||||
} from "./convertHelper";
|
||||
import cloneDeep from "lodash.clonedeep";
|
||||
|
||||
export default abstract class SettingHelper {
|
||||
private static settings: { [key in SettingString]?: string } = {};
|
||||
|
@ -28,6 +29,10 @@ export default abstract class SettingHelper {
|
|||
ms: new MsConverter(),
|
||||
};
|
||||
|
||||
public static getAllSettings() {
|
||||
return cloneDeep(this.settings);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the value of a setting with the correct type based on the key
|
||||
* @param key The key of the setting
|
||||
|
|
|
@ -26,6 +26,7 @@ import user from "./management/user";
|
|||
import invite from "./management/invite";
|
||||
import api from "./management/webapi";
|
||||
import backup from "./management/backup";
|
||||
import setting from "./management/setting";
|
||||
|
||||
var router = express.Router({ mergeParams: true });
|
||||
|
||||
|
@ -159,5 +160,6 @@ router.use(
|
|||
PermissionHelper.passCheckMiddleware("read", "management", "backup"),
|
||||
backup
|
||||
);
|
||||
router.use("/setting", PermissionHelper.passCheckMiddleware("read", "management", "setting"), setting);
|
||||
|
||||
export default router;
|
||||
|
|
31
src/routes/admin/management/setting.ts
Normal file
31
src/routes/admin/management/setting.ts
Normal file
|
@ -0,0 +1,31 @@
|
|||
import express, { Request, Response } from "express";
|
||||
import PermissionHelper from "../../../helpers/permissionHelper";
|
||||
import { getSetting, getSettings, resetSetting, setSetting } from "../../../controller/admin/management/setting";
|
||||
|
||||
var router = express.Router({ mergeParams: true });
|
||||
|
||||
router.get("/", async (req: Request, res: Response) => {
|
||||
await getSettings(req, res);
|
||||
});
|
||||
|
||||
router.get("/:setting", async (req: Request, res: Response) => {
|
||||
await getSetting(req, res);
|
||||
});
|
||||
|
||||
router.put(
|
||||
"/",
|
||||
PermissionHelper.passCheckMiddleware("create", "management", "setting"),
|
||||
async (req: Request, res: Response) => {
|
||||
await setSetting(req, res);
|
||||
}
|
||||
);
|
||||
|
||||
router.delete(
|
||||
"/:setting",
|
||||
PermissionHelper.passCheckMiddleware("delete", "management", "setting"),
|
||||
async (req: Request, res: Response) => {
|
||||
await resetSetting(req, res);
|
||||
}
|
||||
);
|
||||
|
||||
export default router;
|
|
@ -1,5 +1,5 @@
|
|||
import express from "express";
|
||||
import { getCalendarItemsByTypes } from "../controller/publicController";
|
||||
import { getApplicationConfig, getCalendarItemsByTypes } from "../controller/publicController";
|
||||
|
||||
var router = express.Router({ mergeParams: true });
|
||||
|
||||
|
@ -7,4 +7,8 @@ router.get("/calendar", async (req, res) => {
|
|||
await getCalendarItemsByTypes(req, res);
|
||||
});
|
||||
|
||||
router.get("/configuration", async (req, res) => {
|
||||
await getApplicationConfig(req, res);
|
||||
});
|
||||
|
||||
export default router;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import { dataSource } from "../data-source";
|
||||
import { setting } from "../entity/setting";
|
||||
import InternalException from "../exceptions/internalException";
|
||||
import { SettingString } from "../type/settingTypes";
|
||||
import { dataSource } from "../../data-source";
|
||||
import { setting } from "../../entity/setting";
|
||||
import InternalException from "../../exceptions/internalException";
|
||||
import { SettingString } from "../../type/settingTypes";
|
||||
|
||||
export default abstract class SettingService {
|
||||
/**
|
|
@ -21,7 +21,8 @@ export type PermissionModule =
|
|||
| "query_store"
|
||||
| "template"
|
||||
| "template_usage"
|
||||
| "backup";
|
||||
| "backup"
|
||||
| "setting";
|
||||
|
||||
export type PermissionType = "read" | "create" | "update" | "delete";
|
||||
|
||||
|
@ -78,6 +79,7 @@ export const permissionModules: Array<PermissionModule> = [
|
|||
"template",
|
||||
"template_usage",
|
||||
"backup",
|
||||
"setting",
|
||||
];
|
||||
export const permissionTypes: Array<PermissionType> = ["read", "create", "update", "delete"];
|
||||
export const sectionsAndModules: SectionsAndModulesObject = {
|
||||
|
@ -95,6 +97,6 @@ export const sectionsAndModules: SectionsAndModulesObject = {
|
|||
"template_usage",
|
||||
"newsletter_config",
|
||||
],
|
||||
management: ["user", "role", "webapi", "backup"],
|
||||
management: ["user", "role", "webapi", "backup", "setting"],
|
||||
additional: [],
|
||||
};
|
||||
|
|
Loading…
Add table
Reference in a new issue