Allow mail relay provider specific UI

Only contains specific UI for postmark

Part of #411
This commit is contained in:
Johannes Zellner
2017-08-30 10:54:58 +02:00
parent 6fea022a04
commit 257e594de0
2 changed files with 53 additions and 7 deletions

View File

@@ -102,20 +102,33 @@
</div>
<input type="number" class="form-control" ng-model="mailRelay.relay.port" name="port" required>
</div>
<div class="form-group" ng-class="{ 'has-error': (mailRelayForm.username.$dirty && mailRelayForm.username.$invalid) }">
<!-- Postmark -->
<div ng-show="isProvider('postmark-smtp')" class="form-group" ng-class="{ 'has-error': (mailRelayForm.serverApiToken.$dirty && mailRelayForm.serverApiToken.$invalid) }">
<label class="control-label">Server API Token</label>
<div class="control-label" ng-show="(!mailRelayForm.serverApiToken.$dirty && mailRelay.error.serverApiToken) || (mailRelayForm.serverApiToken.$dirty && mailRelayForm.serverApiToken.$invalid)">
<small ng-show="!mailRelayForm.serverApiToken.$dirty && mailRelay.error.serverApiToken">{{ mailRelay.error.serverApiToken }}</small>
</div>
<input type="text" class="form-control" ng-model="mailRelay.relay.serverApiToken" name="serverApiToken" ng-required="isProvider('postmark-smtp')">
</div>
<!-- Other -->
<div ng-show="!isProvider('postmark-smtp')" class="form-group" ng-class="{ 'has-error': (mailRelayForm.username.$dirty && mailRelayForm.username.$invalid) }">
<label class="control-label">Username</label>
<div class="control-label" ng-show="(!mailRelayForm.username.$dirty && mailRelay.error.username) || (mailRelayForm.username.$dirty && mailRelayForm.username.$invalid)">
<small ng-show="!mailRelayForm.username.$dirty && mailRelay.error.username">{{ mailRelay.error.username }}</small>
</div>
<input type="text" class="form-control" ng-model="mailRelay.relay.username" name="username" required>
<input type="text" class="form-control" ng-model="mailRelay.relay.username" name="username" ng-required="!isProvider('postmark-smtp')">
</div>
<div class="form-group" ng-class="{ 'has-error': (mailRelayForm.password.$dirty && mailRelayForm.password.$invalid) }">
<div ng-show="!isProvider('postmark-smtp')" class="form-group" ng-class="{ 'has-error': (mailRelayForm.password.$dirty && mailRelayForm.password.$invalid) }">
<label class="control-label">Password</label>
<div class="control-label" ng-show="(!mailRelayForm.password.$dirty && mailRelay.error.password) || (mailRelayForm.password.$dirty && mailRelayForm.password.$invalid)">
<small ng-show="!mailRelayForm.password.$dirty && mailRelay.error.password">{{ mailRelay.error.password }}</small>
</div>
<input type="text" class="form-control" ng-model="mailRelay.relay.password" name="password" required>
<input type="password" class="form-control" ng-model="mailRelay.relay.password" name="password" ng-required="!isProvider('postmark-smtp')">
</div>
<input class="ng-hide" type="submit" ng-disabled="mailRelayForm.$invalid"/>
</form>
</div>

View File

@@ -30,6 +30,10 @@ angular.module('Application').controller('EmailController', ['$scope', '$locatio
$('.modal').modal('hide');
};
$scope.isProvider = function (provider) {
return $scope.mailRelay.relay.provider === provider;
};
$scope.catchall = {
addresses: [],
busy: false,
@@ -107,6 +111,7 @@ angular.module('Application').controller('EmailController', ['$scope', '$locatio
$scope.mailRelay.relay.port = $scope.mailRelay.preset.port;
$scope.mailRelay.relay.username = '';
$scope.mailRelay.relay.password = '';
$scope.mailRelay.relay.serverApiToken = '';
},
// form data to be set on load
@@ -115,14 +120,30 @@ angular.module('Application').controller('EmailController', ['$scope', '$locatio
host: '',
port: 25,
username: '',
password: ''
password: '',
serverApiToken: ''
},
submit: function () {
$scope.mailRelay.error = null;
$scope.mailRelay.busy = true;
Client.setMailRelay($scope.mailRelay.relay, function (error) {
var data = {
provider: $scope.mailRelay.relay.provider,
host: $scope.mailRelay.relay.host,
port: $scope.mailRelay.relay.port
};
// fill in provider specific username/password usage
if (data.provider === 'postmark-smtp') {
data.username = $scope.mailRelay.relay.serverApiToken;
data.password = $scope.mailRelay.relay.serverApiToken;
} else {
data.username = $scope.mailRelay.relay.username;
data.password = $scope.mailRelay.relay.password;
}
Client.setMailRelay(data, function (error) {
if (error) {
$scope.mailRelay.error = error.message;
}
@@ -144,7 +165,19 @@ angular.module('Application').controller('EmailController', ['$scope', '$locatio
Client.getMailRelay(function (error, relay) {
if (error) return console.error(error);
$scope.mailRelay.relay = relay;
$scope.mailRelay.relay.provider = relay.provider;
$scope.mailRelay.relay.host = relay.host;
$scope.mailRelay.relay.port = relay.port;
$scope.mailRelay.relay.username = '';
$scope.mailRelay.relay.password = '';
$scope.mailRelay.relay.serverApiToken = '';
if (relay.provider === 'postmark-smtp') {
$scope.mailRelay.relay.serverApiToken = relay.username;
} else {
$scope.mailRelay.relay.username = relay.username;
$scope.mailRelay.relay.password = relay.password;
}
for (var i = 0; i < $scope.mailRelayPresets.length; i++) {
if ($scope.mailRelayPresets[i].provider === relay.provider) {