From b9949cdf5e9650c4637ed3326383e061c615b595 Mon Sep 17 00:00:00 2001 From: Alice Gaudon Date: Mon, 1 Mar 2021 14:01:02 +0100 Subject: [PATCH] Backend: separate mail domains from mailboxes --- .../backend/MailboxBackendController.ts | 35 ++++++---- views/backend/mail_domain.njk | 4 +- views/backend/mail_domains.njk | 67 +++++++++++++++++++ views/backend/mailboxes.njk | 54 --------------- 4 files changed, 92 insertions(+), 68 deletions(-) create mode 100644 views/backend/mail_domains.njk diff --git a/src/controllers/backend/MailboxBackendController.ts b/src/controllers/backend/MailboxBackendController.ts index bc227f8..974d6f6 100644 --- a/src/controllers/backend/MailboxBackendController.ts +++ b/src/controllers/backend/MailboxBackendController.ts @@ -13,6 +13,11 @@ import UserNameComponent from "swaf/auth/models/UserNameComponent"; export default class MailboxBackendController extends Controller { public constructor() { super(); + BackendController.registerMenuElement({ + getLink: async () => Controller.route('backend-mail-domains'), + getDisplayString: async () => 'Mail domains', + getDisplayIcon: async () => 'globe', + }); BackendController.registerMenuElement({ getLink: async () => Controller.route('backend-mailboxes'), getDisplayString: async () => 'Mailboxes', @@ -26,8 +31,9 @@ export default class MailboxBackendController extends Controller { public routes(): void { this.get('/', this.getMailboxesBackend, 'backend-mailboxes', RequireAuthMiddleware, RequireAdminMiddleware); - this.get('/:id', this.getMailboxBackend, 'backend-mailbox', RequireAuthMiddleware, RequireAdminMiddleware); + this.get('/mailbox/:id', this.getMailboxBackend, 'backend-mailbox', RequireAuthMiddleware, RequireAdminMiddleware); + this.get('/domains', this.getDomainsBackend, 'backend-mail-domains', RequireAuthMiddleware, RequireAdminMiddleware); this.post('/add-domain', this.postAddDomain, 'backend-add-domain', RequireAuthMiddleware, RequireAdminMiddleware); this.get('/edit-domain/:id', this.getEditDomain, 'backend-edit-domain', RequireAuthMiddleware, RequireAdminMiddleware); this.post('/edit-domain/:id', this.postEditDomain, 'backend-edit-domain', RequireAuthMiddleware, RequireAdminMiddleware); @@ -39,11 +45,6 @@ export default class MailboxBackendController extends Controller { } protected async getMailboxesBackend(req: Request, res: Response): Promise { - const mailDomains = await MailDomain.select() - .with('owner') - .with('identities') - .get(); - const users = await User.select() .where('main_mail_identity_id', null, WhereTest.NE) .with('mainMailIdentity') @@ -51,12 +52,6 @@ export default class MailboxBackendController extends Controller { .get(); res.render('backend/mailboxes', { - domains: await Promise.all(mailDomains.map(async domain => ({ - id: domain.id, - name: domain.name, - owner_name: (await domain.owner.get())?.as(UserNameComponent).name, - identity_count: (await domain.identities.get()).length, - }))), users: [{ value: 0, display: 'Public', @@ -102,6 +97,22 @@ export default class MailboxBackendController extends Controller { }); } + protected async getDomainsBackend(req: Request, res: Response): Promise { + const mailDomains = await MailDomain.select() + .with('owner') + .with('identities') + .get(); + + res.render('backend/mail_domains', { + domains: await Promise.all(mailDomains.map(async domain => ({ + id: domain.id, + name: domain.name, + owner_name: (await domain.owner.get())?.as(UserNameComponent).name, + identity_count: (await domain.identities.get()).length, + }))), + }); + } + protected async postAddDomain(req: Request, res: Response): Promise { const domain = MailDomain.create(req.body); await domain.save(); diff --git a/views/backend/mail_domain.njk b/views/backend/mail_domain.njk index e861003..ee8c329 100644 --- a/views/backend/mail_domain.njk +++ b/views/backend/mail_domain.njk @@ -4,9 +4,9 @@ {% block body %}
- {{ macros.breadcrumb('Mail domain: ' + domain.name, [ + {{ macros.breadcrumb(domain.name, [ {title: 'Backend', link: route('backend')}, - {title: 'Mailboxes', link: route('backend-mailboxes')} + {title: 'Mail domains', link: route('backend-mail-domains')} ]) }}
diff --git a/views/backend/mail_domains.njk b/views/backend/mail_domains.njk new file mode 100644 index 0000000..3608e30 --- /dev/null +++ b/views/backend/mail_domains.njk @@ -0,0 +1,67 @@ +{% extends 'layouts/base.njk' %} + +{% set title = app.name + ' - Backend' %} + +{% block body %} +
+ {{ macros.breadcrumb('Mail domains', [ + {title: 'Backend', link: route('backend')} + ]) }} + +

Domain manager

+ +
+

Domains

+ +
+

Add domain

+ {{ macros.field(_locals, 'text', 'name', null, 'Domain name', null, 'required') }} + + {{ macros.field(_locals, 'select', 'user_id', undefined, 'Owner', null, 'required', users) }} + + + + {{ macros.csrf(getCsrfToken) }} +
+ + + + + + + + + + + + + + {% for domain in domains %} + + + + + + + + {% endfor %} + +
#NameOwnerIdentitiesActions
{{ domain.id }}{{ domain.name }}{{ domain.owner_name | default('Public') }}{{ domain.identity_count }} + + Edit + + +
+ + + + + {{ macros.csrf(getCsrfToken) }} +
+
+
+
+{% endblock %} diff --git a/views/backend/mailboxes.njk b/views/backend/mailboxes.njk index ded89c7..00abe52 100644 --- a/views/backend/mailboxes.njk +++ b/views/backend/mailboxes.njk @@ -10,60 +10,6 @@

Mailbox manager

-
-

Domains

- -
-

Add domain

- {{ macros.field(_locals, 'text', 'name', null, 'Domain name', null, 'required') }} - - {{ macros.field(_locals, 'select', 'user_id', undefined, 'Owner', null, 'required', users) }} - - - - {{ macros.csrf(getCsrfToken) }} -
- - - - - - - - - - - - - - {% for domain in domains %} - - - - - - - - {% endfor %} - -
#NameOwnerIdentitiesActions
{{ domain.id }}{{ domain.name }}{{ domain.owner_name | default('Public') }}{{ domain.identity_count }} - - Edit - - -
- - - - - {{ macros.csrf(getCsrfToken) }} -
-
-
-

Mailboxes