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",
|
"ics": "^3.8.1",
|
||||||
"ip": "^2.0.1",
|
"ip": "^2.0.1",
|
||||||
"jsonwebtoken": "^9.0.2",
|
"jsonwebtoken": "^9.0.2",
|
||||||
|
"lodash.clonedeep": "^4.5.0",
|
||||||
"lodash.uniqby": "^4.7.0",
|
"lodash.uniqby": "^4.7.0",
|
||||||
"moment": "^2.30.1",
|
"moment": "^2.30.1",
|
||||||
"morgan": "^1.10.0",
|
"morgan": "^1.10.0",
|
||||||
|
@ -45,6 +46,7 @@
|
||||||
"@types/express": "^5.0.1",
|
"@types/express": "^5.0.1",
|
||||||
"@types/ip": "^1.1.3",
|
"@types/ip": "^1.1.3",
|
||||||
"@types/jsonwebtoken": "^9.0.6",
|
"@types/jsonwebtoken": "^9.0.6",
|
||||||
|
"@types/lodash.clonedeep": "^4.5.9",
|
||||||
"@types/lodash.uniqby": "^4.7.9",
|
"@types/lodash.uniqby": "^4.7.9",
|
||||||
"@types/morgan": "^1.9.9",
|
"@types/morgan": "^1.9.9",
|
||||||
"@types/ms": "^2.1.0",
|
"@types/ms": "^2.1.0",
|
||||||
|
@ -462,6 +464,16 @@
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"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": {
|
"node_modules/@types/lodash.uniqby": {
|
||||||
"version": "4.7.9",
|
"version": "4.7.9",
|
||||||
"resolved": "https://registry.npmjs.org/@types/lodash.uniqby/-/lodash.uniqby-4.7.9.tgz",
|
"resolved": "https://registry.npmjs.org/@types/lodash.uniqby/-/lodash.uniqby-4.7.9.tgz",
|
||||||
|
@ -2770,6 +2782,12 @@
|
||||||
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
|
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
|
||||||
"license": "MIT"
|
"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": {
|
"node_modules/lodash.includes": {
|
||||||
"version": "4.3.0",
|
"version": "4.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
"ics": "^3.8.1",
|
"ics": "^3.8.1",
|
||||||
"ip": "^2.0.1",
|
"ip": "^2.0.1",
|
||||||
"jsonwebtoken": "^9.0.2",
|
"jsonwebtoken": "^9.0.2",
|
||||||
|
"lodash.clonedeep": "^4.5.0",
|
||||||
"lodash.uniqby": "^4.7.0",
|
"lodash.uniqby": "^4.7.0",
|
||||||
"moment": "^2.30.1",
|
"moment": "^2.30.1",
|
||||||
"morgan": "^1.10.0",
|
"morgan": "^1.10.0",
|
||||||
|
@ -61,6 +62,7 @@
|
||||||
"@types/express": "^5.0.1",
|
"@types/express": "^5.0.1",
|
||||||
"@types/ip": "^1.1.3",
|
"@types/ip": "^1.1.3",
|
||||||
"@types/jsonwebtoken": "^9.0.6",
|
"@types/jsonwebtoken": "^9.0.6",
|
||||||
|
"@types/lodash.clonedeep": "^4.5.9",
|
||||||
"@types/lodash.uniqby": "^4.7.9",
|
"@types/lodash.uniqby": "^4.7.9",
|
||||||
"@types/morgan": "^1.9.9",
|
"@types/morgan": "^1.9.9",
|
||||||
"@types/ms": "^2.1.0",
|
"@types/ms": "^2.1.0",
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import { dataSource } from "../data-source";
|
import { dataSource } from "../../../data-source";
|
||||||
import { setting } from "../entity/setting";
|
import { setting } from "../../../entity/setting";
|
||||||
import DatabaseActionException from "../exceptions/databaseActionException";
|
import DatabaseActionException from "../../../exceptions/databaseActionException";
|
||||||
import { StringHelper } from "../helpers/stringHelper";
|
import { StringHelper } from "../../../helpers/stringHelper";
|
||||||
import { CreateOrUpdateSettingCommand, DeleteSettingCommand } from "./settingCommand";
|
import { CreateOrUpdateSettingCommand, DeleteSettingCommand } from "./settingCommand";
|
||||||
|
|
||||||
export default abstract class SettingCommandHandler {
|
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 { SettingString, settingsType, SettingTopic, SettingTypeAtom, SettingValueMapping } from "../type/settingTypes";
|
||||||
import { CodingHelper } from "./codingHelper";
|
import { CodingHelper } from "./codingHelper";
|
||||||
import SettingCommandHandler from "../command/settingCommandHandler";
|
import SettingCommandHandler from "../command/management/setting/settingCommandHandler";
|
||||||
import SettingService from "../service/settingService";
|
import SettingService from "../service/management/settingService";
|
||||||
import { APPLICATION_SECRET } from "../env.defaults";
|
import { APPLICATION_SECRET } from "../env.defaults";
|
||||||
import {
|
import {
|
||||||
BooleanConverter,
|
BooleanConverter,
|
||||||
|
@ -12,6 +12,7 @@ import {
|
||||||
TypeConverter,
|
TypeConverter,
|
||||||
UrlConverter,
|
UrlConverter,
|
||||||
} from "./convertHelper";
|
} from "./convertHelper";
|
||||||
|
import cloneDeep from "lodash.clonedeep";
|
||||||
|
|
||||||
export default abstract class SettingHelper {
|
export default abstract class SettingHelper {
|
||||||
private static settings: { [key in SettingString]?: string } = {};
|
private static settings: { [key in SettingString]?: string } = {};
|
||||||
|
@ -28,6 +29,10 @@ export default abstract class SettingHelper {
|
||||||
ms: new MsConverter(),
|
ms: new MsConverter(),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
public static getAllSettings() {
|
||||||
|
return cloneDeep(this.settings);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the value of a setting with the correct type based on the key
|
* Returns the value of a setting with the correct type based on the key
|
||||||
* @param key The key of the setting
|
* @param key The key of the setting
|
||||||
|
|
|
@ -26,6 +26,7 @@ import user from "./management/user";
|
||||||
import invite from "./management/invite";
|
import invite from "./management/invite";
|
||||||
import api from "./management/webapi";
|
import api from "./management/webapi";
|
||||||
import backup from "./management/backup";
|
import backup from "./management/backup";
|
||||||
|
import setting from "./management/setting";
|
||||||
|
|
||||||
var router = express.Router({ mergeParams: true });
|
var router = express.Router({ mergeParams: true });
|
||||||
|
|
||||||
|
@ -159,5 +160,6 @@ router.use(
|
||||||
PermissionHelper.passCheckMiddleware("read", "management", "backup"),
|
PermissionHelper.passCheckMiddleware("read", "management", "backup"),
|
||||||
backup
|
backup
|
||||||
);
|
);
|
||||||
|
router.use("/setting", PermissionHelper.passCheckMiddleware("read", "management", "setting"), setting);
|
||||||
|
|
||||||
export default router;
|
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 express from "express";
|
||||||
import { getCalendarItemsByTypes } from "../controller/publicController";
|
import { getApplicationConfig, getCalendarItemsByTypes } from "../controller/publicController";
|
||||||
|
|
||||||
var router = express.Router({ mergeParams: true });
|
var router = express.Router({ mergeParams: true });
|
||||||
|
|
||||||
|
@ -7,4 +7,8 @@ router.get("/calendar", async (req, res) => {
|
||||||
await getCalendarItemsByTypes(req, res);
|
await getCalendarItemsByTypes(req, res);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
router.get("/configuration", async (req, res) => {
|
||||||
|
await getApplicationConfig(req, res);
|
||||||
|
});
|
||||||
|
|
||||||
export default router;
|
export default router;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import { dataSource } from "../data-source";
|
import { dataSource } from "../../data-source";
|
||||||
import { setting } from "../entity/setting";
|
import { setting } from "../../entity/setting";
|
||||||
import InternalException from "../exceptions/internalException";
|
import InternalException from "../../exceptions/internalException";
|
||||||
import { SettingString } from "../type/settingTypes";
|
import { SettingString } from "../../type/settingTypes";
|
||||||
|
|
||||||
export default abstract class SettingService {
|
export default abstract class SettingService {
|
||||||
/**
|
/**
|
|
@ -21,7 +21,8 @@ export type PermissionModule =
|
||||||
| "query_store"
|
| "query_store"
|
||||||
| "template"
|
| "template"
|
||||||
| "template_usage"
|
| "template_usage"
|
||||||
| "backup";
|
| "backup"
|
||||||
|
| "setting";
|
||||||
|
|
||||||
export type PermissionType = "read" | "create" | "update" | "delete";
|
export type PermissionType = "read" | "create" | "update" | "delete";
|
||||||
|
|
||||||
|
@ -78,6 +79,7 @@ export const permissionModules: Array<PermissionModule> = [
|
||||||
"template",
|
"template",
|
||||||
"template_usage",
|
"template_usage",
|
||||||
"backup",
|
"backup",
|
||||||
|
"setting",
|
||||||
];
|
];
|
||||||
export const permissionTypes: Array<PermissionType> = ["read", "create", "update", "delete"];
|
export const permissionTypes: Array<PermissionType> = ["read", "create", "update", "delete"];
|
||||||
export const sectionsAndModules: SectionsAndModulesObject = {
|
export const sectionsAndModules: SectionsAndModulesObject = {
|
||||||
|
@ -95,6 +97,6 @@ export const sectionsAndModules: SectionsAndModulesObject = {
|
||||||
"template_usage",
|
"template_usage",
|
||||||
"newsletter_config",
|
"newsletter_config",
|
||||||
],
|
],
|
||||||
management: ["user", "role", "webapi", "backup"],
|
management: ["user", "role", "webapi", "backup", "setting"],
|
||||||
additional: [],
|
additional: [],
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Reference in a new issue