setup routine

This commit is contained in:
Julian Krauser 2025-04-25 08:18:49 +02:00
parent 70edd165ee
commit 2e3d0a755c
8 changed files with 147 additions and 13 deletions

View file

@ -9,7 +9,7 @@ import { SettingString } from "../../../type/settingTypes";
* @returns {Promise<*>} * @returns {Promise<*>}
*/ */
export async function getSettings(req: Request, res: Response): Promise<any> { export async function getSettings(req: Request, res: Response): Promise<any> {
res.json(SettingHelper.getAllSettings()); res.json({ ...SettingHelper.getAllSettings(), ["mail.password"]: undefined });
} }
/** /**

View file

@ -35,7 +35,7 @@ export async function getInvites(req: Request, res: Response): Promise<any> {
* @param res {Response} Express res object * @param res {Response} Express res object
* @returns {Promise<*>} * @returns {Promise<*>}
*/ */
export async function inviteUser(req: Request, res: Response, isInvite: boolean = true): Promise<any> { export async function inviteUser(req: Request, res: Response, isSetup: boolean = false): Promise<any> {
let origin = req.headers.origin; let origin = req.headers.origin;
let username = req.body.username; let username = req.body.username;
let mail = req.body.mail; let mail = req.body.mail;
@ -71,7 +71,7 @@ export async function inviteUser(req: Request, res: Response, isInvite: boolean
await MailHelper.sendMail( await MailHelper.sendMail(
mail, mail,
`Email Bestätigung für Mitglieder Admin-Portal von ${SettingHelper.getSetting("club.name")}`, `Email Bestätigung für Mitglieder Admin-Portal von ${SettingHelper.getSetting("club.name")}`,
`Öffne folgenden Link: ${origin}/${isInvite ? "invite" : "setup"}/verify?mail=${mail}&token=${token}` `Öffne folgenden Link: ${origin}/${isSetup ? "setup" : "invite"}/verify?mail=${mail}&token=${token}`
); );
res.sendStatus(204); res.sendStatus(204);

View file

@ -1,4 +1,5 @@
import { Request, Response } from "express"; import { Request, Response } from "express";
import SettingHelper from "../helpers/settingsHelper";
/** /**
* @description Service is currently not configured * @description Service is currently not configured
@ -9,3 +10,89 @@ import { Request, Response } from "express";
export async function isSetup(req: Request, res: Response): Promise<any> { export async function isSetup(req: Request, res: Response): Promise<any> {
res.sendStatus(204); res.sendStatus(204);
} }
/**
* @description set club identity
* @param req {Request} Express req object
* @param res {Response} Express res object
* @returns {Promise<*>}
*/
export async function setClubIdentity(req: Request, res: Response): Promise<any> {
const name = req.body.name;
const imprint = req.body.imprint;
const privacy = req.body.privacy;
const website = req.body.website;
if (name) {
await SettingHelper.setSetting("club.name", name);
} else {
await SettingHelper.resetSetting("club.name");
}
if (imprint) {
await SettingHelper.setSetting("club.imprint", imprint);
} else {
await SettingHelper.resetSetting("club.imprint");
}
if (privacy) {
await SettingHelper.setSetting("club.privacy", privacy);
} else {
await SettingHelper.resetSetting("club.privacy");
}
if (website) {
await SettingHelper.setSetting("club.website", website);
} else {
await SettingHelper.resetSetting("club.website");
}
res.sendStatus(204);
}
/**
* @description set applucation icon and logo
* @param req {Request} Express req object
* @param res {Response} Express res object
* @returns {Promise<*>}
*/
export async function uploadClubImages(req: Request, res: Response): Promise<any> {
if (req.files && !Array.isArray(req.files) && req.files.icon) {
await SettingHelper.setSetting("club.icon", "configured");
} else {
await SettingHelper.resetSetting("club.icon");
}
if (req.files && !Array.isArray(req.files) && req.files.logo) {
await SettingHelper.setSetting("club.logo", "configured");
} else {
await SettingHelper.resetSetting("club.logo");
}
res.sendStatus(204);
}
/**
* @description set app identity
* @param req {Request} Express req object
* @param res {Response} Express res object
* @returns {Promise<*>}
*/
export async function setAppIdentity(req: Request, res: Response): Promise<any> {
const custom_login_message = req.body.custom_login_message;
const show_link_to_calendar = req.body.show_link_to_calendar;
if (custom_login_message) {
await SettingHelper.setSetting("app.custom_login_message", custom_login_message);
} else {
await SettingHelper.resetSetting("app.custom_login_message");
}
if (show_link_to_calendar) {
await SettingHelper.setSetting("app.show_link_to_calendar", show_link_to_calendar);
} else {
await SettingHelper.resetSetting("app.show_link_to_calendar");
}
res.sendStatus(204);
}

27
src/middleware/multer.ts Normal file
View file

@ -0,0 +1,27 @@
import multer from "multer";
import { FileSystemHelper } from "../helpers/fileSystemHelper";
import path from "path";
export const clubImageStorage = multer.diskStorage({
destination: FileSystemHelper.formatPath("/app"),
filename: function (req, file, cb) {
const fileExtension = path.extname(file.originalname).toLowerCase();
if (file.fieldname === "icon") {
cb(null, "company-icon" + fileExtension);
} else if (file.fieldname === "logo") {
cb(null, "company-logo" + fileExtension);
} else {
cb(null, file.originalname);
}
},
});
export const clubImageMulter = multer({
storage: clubImageStorage,
});
export const clubImageUpload = clubImageMulter.fields([
{ name: "icon", maxCount: 1 },
{ name: "logo", maxCount: 1 },
]);

View file

@ -1,6 +1,11 @@
import express, { Request, Response } from "express"; import express, { Request, Response } from "express";
import PermissionHelper from "../../../helpers/permissionHelper"; import PermissionHelper from "../../../helpers/permissionHelper";
import { getSetting, getSettings, resetSetting, setSetting } from "../../../controller/admin/management/setting"; import {
getSetting,
getSettings,
resetSetting,
setSetting,
} from "../../../controller/admin/management/settingController";
var router = express.Router({ mergeParams: true }); var router = express.Router({ mergeParams: true });

View file

@ -10,7 +10,6 @@ import {
updateUserPermissions, updateUserPermissions,
updateUserRoles, updateUserRoles,
} from "../../../controller/admin/management/userController"; } from "../../../controller/admin/management/userController";
import { inviteUser } from "../../../controller/inviteController";
var router = express.Router({ mergeParams: true }); var router = express.Router({ mergeParams: true });

View file

@ -1,6 +1,5 @@
import express from "express"; import express from "express";
import { isSetup } from "../controller/setupController"; import { finishInvite, verifyInvite } from "../controller/inviteController";
import { finishInvite, inviteUser, verifyInvite } from "../controller/inviteController";
import ParamaterPassCheckHelper from "../helpers/parameterPassCheckHelper"; import ParamaterPassCheckHelper from "../helpers/parameterPassCheckHelper";
var router = express.Router({ mergeParams: true }); var router = express.Router({ mergeParams: true });

View file

@ -1,7 +1,8 @@
import express from "express"; import express from "express";
import { isSetup } from "../controller/setupController"; import { isSetup, setAppIdentity, setClubIdentity, uploadClubImages } from "../controller/setupController";
import { finishInvite, inviteUser, verifyInvite } from "../controller/inviteController"; import { finishInvite, inviteUser, verifyInvite } from "../controller/inviteController";
import ParamaterPassCheckHelper from "../helpers/parameterPassCheckHelper"; import ParamaterPassCheckHelper from "../helpers/parameterPassCheckHelper";
import { clubImageUpload } from "../middleware/multer";
var router = express.Router({ mergeParams: true }); var router = express.Router({ mergeParams: true });
@ -9,21 +10,37 @@ router.get("/", async (req, res) => {
await isSetup(req, res); await isSetup(req, res);
}); });
router.post("/club", async (req, res) => {
await setClubIdentity(req, res);
});
router.post("/club/images", clubImageUpload, async (req, res) => {
await uploadClubImages(req, res);
});
router.post("/app", async (req, res) => {
await setAppIdentity(req, res);
});
router.post("/verify", ParamaterPassCheckHelper.requiredIncludedMiddleware(["mail", "token"]), async (req, res) => { router.post("/verify", ParamaterPassCheckHelper.requiredIncludedMiddleware(["mail", "token"]), async (req, res) => {
await verifyInvite(req, res); await verifyInvite(req, res);
}); });
router.post( router.post(
"/", "/me",
ParamaterPassCheckHelper.requiredIncludedMiddleware(["username", "mail", "firstname", "lastname"]), ParamaterPassCheckHelper.requiredIncludedMiddleware(["username", "mail", "firstname", "lastname"]),
async (req, res) => { async (req, res) => {
await inviteUser(req, res, false); await inviteUser(req, res, true);
} }
); );
router.put("/", ParamaterPassCheckHelper.requiredIncludedMiddleware(["mail", "token", "totp"]), async (req, res) => { router.post(
await finishInvite(req, res, true); "/finish",
}); ParamaterPassCheckHelper.requiredIncludedMiddleware(["mail", "token", "totp"]),
async (req, res) => {
await finishInvite(req, res, true);
}
);
/** /**
* TODO: * TODO: