From 272e506281e2d8a517f05d079b4e1a031710bf6a Mon Sep 17 00:00:00 2001 From: Alice Gaudon Date: Mon, 1 Mar 2021 13:43:29 +0100 Subject: [PATCH] MailboxBackend: add set main identity action --- .../backend/MailboxBackendController.ts | 25 ++++++++++++++++++- views/backend/mailbox.njk | 11 ++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/controllers/backend/MailboxBackendController.ts b/src/controllers/backend/MailboxBackendController.ts index dc494c1..bc227f8 100644 --- a/src/controllers/backend/MailboxBackendController.ts +++ b/src/controllers/backend/MailboxBackendController.ts @@ -3,7 +3,7 @@ import {Request, Response} from "express"; import User from "swaf/auth/models/User"; import {WhereTest} from "swaf/db/ModelQuery"; import UserMailIdentityComponent from "../../models/UserMailIdentityComponent"; -import {NotFoundHttpError} from "swaf/HttpError"; +import {NotFoundHttpError, ServerError} from "swaf/HttpError"; import MailDomain from "../../models/MailDomain"; import BackendController from "swaf/helpers/BackendController"; import MailIdentity from "../../models/MailIdentity"; @@ -34,6 +34,7 @@ export default class MailboxBackendController extends Controller { this.post('/remove-domain', this.postRemoveDomain, 'backend-remove-domain', RequireAuthMiddleware, RequireAdminMiddleware); this.post('/:id/create-mail-identity', this.postCreateMailIdentity, 'backend-create-mail-identity', RequireAuthMiddleware, RequireAdminMiddleware); + this.post('/set-main-mail-identity', this.postSetMainMailIdentity, 'backend-set-main-mail-identity', RequireAuthMiddleware, RequireAdminMiddleware); this.post('/delete-mail-identity', this.postDeleteMailIdentity, 'backend-delete-mail-identity', RequireAuthMiddleware, RequireAdminMiddleware); } @@ -207,4 +208,26 @@ export default class MailboxBackendController extends Controller { req.flash('success', 'Identity ' + await identity.toEmail() + ' successfully deleted.'); res.redirect(Controller.route('backend-mailbox', user.id)); } + + protected async postSetMainMailIdentity(req: Request, res: Response): Promise { + const identity = await MailIdentity.select() + .where('id', req.body.id) + .with('user.mainMailIdentity') + .first(); + if (!identity) throw new NotFoundHttpError('Mail identity', req.url); + + const user = await identity.user.getOrFail(); + if (!user) throw new NotFoundHttpError('Mail identity owner', req.url); + + const mailIdentityComponent = user.as(UserMailIdentityComponent); + const mainMailIdentity = mailIdentityComponent.mainMailIdentity.getOrFail(); + if (!mainMailIdentity) throw new ServerError('Could not find this users main mail identity.'); + + mailIdentityComponent.main_mail_identity_id = identity.id; + await user.save(); + + req.flash('success', 'User ' + user.id + ' main mail identity set to ' + await identity.toEmail()); + req.flash('warning', 'Please rename user\'s mailbox folder to correspond to changing from ' + await mainMailIdentity.toEmail() + ' to ' + await identity.toEmail()); + res.redirect(Controller.route('backend-mailbox', user.id)); + } } diff --git a/views/backend/mailbox.njk b/views/backend/mailbox.njk index 12721b0..7610653 100644 --- a/views/backend/mailbox.njk +++ b/views/backend/mailbox.njk @@ -29,6 +29,17 @@ {{ identity.email }} {% if mailbox.name != identity.email %} +
+ + + + + {{ macros.csrf(getCsrfToken) }} +
+