diff --git a/src/views/email.html b/src/views/email.html index 542f52d03..11eec6dee 100644 --- a/src/views/email.html +++ b/src/views/email.html @@ -364,13 +364,13 @@
- Emails sent to non existing addresses will be forwarded to the following accounts: + Emails sent to non existing addresses will be forwarded to the following mailboxes:

- +
diff --git a/src/views/email.js b/src/views/email.js index 998b1ce91..44f30586b 100644 --- a/src/views/email.js +++ b/src/views/email.js @@ -45,18 +45,25 @@ angular.module('Application').controller('EmailController', ['$scope', '$locatio }; $scope.catchall = { - addresses: [], - availableAddresses: [], + mailboxes: [], busy: false, submit: function () { $scope.catchall.busy = true; - Client.setCatchallAddresses($scope.selectedDomain.domain, $scope.catchall.addresses, function (error) { + var addresses = $scope.catchall.mailboxes.map(function (m) { return m.name; }); + + Client.setCatchallAddresses($scope.selectedDomain.domain, addresses, function (error) { if (error) console.error('Unable to add catchall address.', error); $scope.catchall.busy = false; }); + }, + + refresh: function () { + $scope.catchall.mailboxes = $scope.selectedDomain.mailConfig.catchAll.map(function (name) { + return $scope.mailboxes.mailboxes.find(function (m) { return m.name === name; }); + }).filter(function (m) { return !!m; }); } }; @@ -161,11 +168,15 @@ angular.module('Application').controller('EmailController', ['$scope', '$locatio } }, - refresh: function () { + refresh: function (callback) { + callback = typeof callback === 'function' ? callback : function (error) { if (error) return console.error(error); }; + Client.listMailingLists($scope.selectedDomain.domain, function (error, result) { - if (error) return console.error(error); + if (error) return callback(error); $scope.mailinglists.mailinglists = result; + + callback(); }); } }; @@ -229,9 +240,13 @@ angular.module('Application').controller('EmailController', ['$scope', '$locatio } $scope.mailboxes.add.reset(); - $scope.mailboxes.refresh(); + $scope.mailboxes.refresh(function (error) { + if (error) return console.error(error); - $('#mailboxAddModal').modal('hide'); + $scope.catchall.refresh(); + + $('#mailboxAddModal').modal('hide'); + }); }); } }, @@ -301,25 +316,33 @@ angular.module('Application').controller('EmailController', ['$scope', '$locatio if (error) return console.error(error); $scope.mailboxes.remove.mailbox = null; - $scope.mailboxes.refresh(); + $scope.mailboxes.refresh(function (error) { + if (error) return console.error(error); - $('#mailboxRemoveModal').modal('hide'); + $scope.catchall.refresh(); + + $('#mailboxRemoveModal').modal('hide'); + }); }); } }, - refresh: function () { + refresh: function (callback) { + callback = typeof callback === 'function' ? callback : function (error) { if (error) return console.error(error); }; + Client.getMailboxes($scope.selectedDomain.domain, function (error, mailboxes) { - if (error) return console.error(error); + if (error) return callback(error); Client.listAliases($scope.selectedDomain.domain, function (error, aliases) { - if (error) return console.error(error); + 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.owner = $scope.users.find(function (u) { return u.id === m.ownerId; }); return m; }); + + callback(); }); }); } @@ -513,20 +536,16 @@ angular.module('Application').controller('EmailController', ['$scope', '$locatio } } - // catch-all, only allow users with a Cloudron email address - $scope.catchall.availableAddresses = $scope.users.filter(function (u) { return !!u.username && !!u.email; }).map(function (u) { return u.username; }); - - // dedupe in case to avoid angular breakage - $scope.catchall.addresses = mailConfig.catchAll.filter(function(item, pos, self) { - return self.indexOf(item) == pos; - }); - // amend to selected domain to be available for the UI $scope.selectedDomain.mailConfig = mailConfig; $scope.selectedDomain.mailStatus = {}; - $scope.mailboxes.refresh(); - $scope.mailinglists.refresh(); + $scope.mailboxes.refresh(function (error) { + if (error) console.error(error); + + $scope.mailinglists.refresh(); + $scope.catchall.refresh(); + }); // we will fetch the status without blocking the ui Client.getMailStatusForDomain($scope.selectedDomain.domain, function (error, mailStatus) {