diff --git a/src/controllers/MailboxBackendController.ts b/src/controllers/MailboxBackendController.ts index df71a42..3794516 100644 --- a/src/controllers/MailboxBackendController.ts +++ b/src/controllers/MailboxBackendController.ts @@ -28,8 +28,10 @@ export default class MailboxBackendController extends Controller { this.get('/', this.getMailboxesBackend, 'backend-mailboxes', REQUIRE_AUTH_MIDDLEWARE, REQUIRE_ADMIN_MIDDLEWARE); this.get('/:id', this.getMailboxBackend, 'backend-mailbox', REQUIRE_AUTH_MIDDLEWARE, REQUIRE_ADMIN_MIDDLEWARE); - this.post('/add-domain', this.postAddDomain, 'backend-add-domain', REQUIRE_AUTH_MIDDLEWARE, REQUIRE_ADMIN_MIDDLEWARE) - this.post('/remove-domain', this.postRemoveDomain, 'backend-remove-domain', REQUIRE_AUTH_MIDDLEWARE, REQUIRE_ADMIN_MIDDLEWARE) + this.post('/add-domain', this.postAddDomain, 'backend-add-domain', REQUIRE_AUTH_MIDDLEWARE, REQUIRE_ADMIN_MIDDLEWARE); + this.get('/edit-domain/:id', this.getEditDomain, 'backend-edit-domain', REQUIRE_AUTH_MIDDLEWARE, REQUIRE_ADMIN_MIDDLEWARE); + this.post('/edit-domain/:id', this.postEditDomain, 'backend-edit-domain', REQUIRE_AUTH_MIDDLEWARE, REQUIRE_ADMIN_MIDDLEWARE); + this.post('/remove-domain', this.postRemoveDomain, 'backend-remove-domain', REQUIRE_AUTH_MIDDLEWARE, REQUIRE_ADMIN_MIDDLEWARE); this.post('/:id/create-mail-identity', this.postCreateMailIdentity, 'backend-create-mail-identity', REQUIRE_AUTH_MIDDLEWARE, REQUIRE_ADMIN_MIDDLEWARE); this.post('/delete-mail-identity', this.postDeleteMailIdentity, 'backend-delete-mail-identity', REQUIRE_AUTH_MIDDLEWARE, REQUIRE_ADMIN_MIDDLEWARE); @@ -104,6 +106,35 @@ export default class MailboxBackendController extends Controller { res.redirectBack(); } + protected async getEditDomain(req: Request, res: Response): Promise { + const domain = await MailDomain.getById(req.params.id); + if (!domain) throw new NotFoundHttpError('Domain', req.url); + + res.render('backend/mail_domain', { + domain: domain, + users: [{ + value: 0, + display: 'Public', + }, ...(await User.select().get()).map(u => ({ + value: u.id, + display: u.name, + }))], + }); + } + + protected async postEditDomain(req: Request, res: Response): Promise { + const domain = await MailDomain.select() + .where('id', req.params.id) + .first(); + if (!domain) throw new NotFoundHttpError('Domain', req.url); + + domain.user_id = req.body.user_id; + await domain.save(); + + req.flash('success', `Domain ${domain.name} updated successfully.`); + res.redirectBack(); + } + protected async postRemoveDomain(req: Request, res: Response): Promise { const domain = await MailDomain.select() .where('id', req.body.id) diff --git a/views/backend/mail_domain.njk b/views/backend/mail_domain.njk new file mode 100644 index 0000000..2819781 --- /dev/null +++ b/views/backend/mail_domain.njk @@ -0,0 +1,25 @@ +{% extends 'layouts/base.njk' %} + +{% set title = app.name + ' - Backend' %} + +{% block body %} +
+ {{ macros.breadcrumb('Mail domain: ' + domain.name, [ + {title: 'Backend', link: route('backend')}, + {title: 'Mailboxes', link: route('backend-mailboxes')} + ]) }} + +
+ +

Mail domain: {{ domain.name }}

+ +
+ {{ macros.field(_locals, 'select', 'user_id', domain.user_id, 'Owner', null, 'required', users) }} + + + + {{ macros.csrf(getCSRFToken) }} +
+
+
+{% endblock %} \ No newline at end of file diff --git a/views/backend/mailboxes.njk b/views/backend/mailboxes.njk index 431048e..211f2d9 100644 --- a/views/backend/mailboxes.njk +++ b/views/backend/mailboxes.njk @@ -39,6 +39,10 @@ {{ domain.owner_name | default('Public') }} {{ domain.identity_count }} + + Edit + +