mail: implement aliases across domains

Part of #577
This commit is contained in:
Girish Ramakrishnan
2020-04-19 19:44:45 -07:00
parent 357d5e46a3
commit 9ebf6b06dd
4 changed files with 80 additions and 22 deletions

View File

@@ -2,6 +2,7 @@
/* global angular:false */
/* global $:false */
/* global asyncForEach */
angular.module('Application').controller('EmailController', ['$scope', '$location', '$timeout', '$routeParams', 'Client', function ($scope, $location, $timeout, $routeParams, Client) {
Client.onReady(function () { if (!Client.getUserInfo().isAtLeastAdmin) $location.path('/'); });
@@ -16,6 +17,7 @@ angular.module('Application').controller('EmailController', ['$scope', '$locatio
$scope.config = Client.getConfig();
$scope.apps = Client.getInstalledApps();
$scope.users = [];
$scope.incomingDomains = [];
$scope.domain = null;
$scope.adminDomain = null;
@@ -315,7 +317,22 @@ angular.module('Application').controller('EmailController', ['$scope', '$locatio
error: null,
name: '',
owner: null,
aliases: '',
incomingDomains: [],
aliases: [],
addAlias: function (event) {
event.preventDefault();
$scope.mailboxes.edit.aliases.push({
name: '',
domain: domainName
});
},
delAlias: function (event, index) {
event.preventDefault();
$scope.mailboxes.edit.aliases.splice(index, 1);
},
show: function (mailbox) {
$scope.mailboxes.edit.name = mailbox.name;
@@ -336,9 +353,7 @@ angular.module('Application').controller('EmailController', ['$scope', '$locatio
return;
}
var aliases = $scope.mailboxes.edit.aliases.split(' ').map(function (a) { return a.trim(); }).filter(function (a) { return !!a; });
Client.setAliases($scope.domain.domain, $scope.mailboxes.edit.name, aliases, function (error) {
Client.setAliases($scope.domain.domain, $scope.mailboxes.edit.name, $scope.mailboxes.edit.aliases, function (error) {
if (error) {
$scope.mailboxes.edit.error = error;
$scope.mailboxes.edit.busy = false;
@@ -349,7 +364,7 @@ angular.module('Application').controller('EmailController', ['$scope', '$locatio
$scope.mailboxes.edit.error = null;
$scope.mailboxes.edit.name = '';
$scope.mailboxes.edit.owner = null;
$scope.mailboxes.edit.aliases = '';
$scope.mailboxes.edit.aliases = [];
$scope.mailboxes.refresh();
$('#mailboxEditModal').modal('hide');
@@ -397,7 +412,7 @@ angular.module('Application').controller('EmailController', ['$scope', '$locatio
if (error) return callback(error);
$scope.mailboxes.mailboxes = mailboxes.map(function (m) {
m.aliases = aliases.filter(function (a) { return a.aliasTarget === m.name; }).map(function (a) { return a.name; }).join(' ');
m.aliases = aliases.filter(function (a) { return a.aliasName === m.name && a.aliasDomain === m.domain; }).map(function (a) { return { name: a.name, domain: a.domain }; });
m.owner = $scope.users.find(function (u) { return u.id === m.ownerId; }); // owner may not exist
m.ownerDisplayName = m.owner ? m.owner.display : ''; // this meta property is set when we get the user list
@@ -671,17 +686,22 @@ angular.module('Application').controller('EmailController', ['$scope', '$locatio
$scope.users = users;
Client.getDomain(domainName, function (error, result) {
Client.getDomains(function (error, result) {
if (error) return console.error('Unable to get view domain.', error);
$scope.domain = result;
$scope.domain = result.filter(function (d) { return d.domain === domainName; })[0];
$scope.adminDomain = result.filter(function (d) { return d.domain === $scope.config.adminDomain; })[0];
$scope.refreshDomain();
Client.getDomain($scope.config.adminDomain, function (error, result) {
if (error) return console.error('Unable to get admin domain.', error);
asyncForEach(result, function (domain, iteratorDone) {
Client.getMailConfigForDomain(domain.domain, function (error, mailConfig) {
if (error) return console.error('Failed to fetch mail config for domain', domain.domain, error);
$scope.adminDomain = result;
$scope.refreshDomain();
if (mailConfig.enabled) $scope.incomingDomains.push(domain);
iteratorDone();
});
}, function iteratorDone(error) {
if (error) return console.error(error);
$scope.ready = true;
});