sogo/UI/WebServerResources/js/Preferences/AccountDialogController.js
2018-01-12 14:47:31 -05:00

105 lines
3.2 KiB
JavaScript

/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* JavaScript for SOGoPreferences */
(function() {
'use strict';
/**
* @ngInject
*/
AccountDialogController.$inject = ['$timeout', '$mdDialog', 'FileUploader', 'Dialog', 'sgSettings', 'Account', 'defaults', 'account', 'accountId', 'mailCustomFromEnabled'];
function AccountDialogController($timeout, $mdDialog, FileUploader, Dialog, Settings, Account, defaults, account, accountId, mailCustomFromEnabled) {
var vm = this,
accountObject = new Account({ id: accountId, security: account.security });
vm.defaultPort = 143;
vm.defaults = defaults;
vm.account = account;
vm.accountId = accountId;
vm.customFromIsReadonly = customFromIsReadonly;
vm.onBeforeUploadCertificate = onBeforeUploadCertificate;
vm.removeCertificate = removeCertificate;
vm.importCertificate = importCertificate;
vm.cancel = cancel;
vm.save = save;
vm.hostnameRE = accountId > 0 ? /^(?!(127\.0\.0\.1|localhost(?:\.localdomain)?)$)/ : /./;
if (!vm.account.encryption)
vm.account.encryption = "none";
else if (vm.account.encryption == "ssl")
vm.defaultPort = 993;
_loadCertificate();
vm.uploader = new FileUploader({
url: [Settings.activeUser('folderURL') + 'Mail', accountId, 'importCertificate'].join('/'),
autoUpload: false,
queueLimit: 1,
filters: [{ name: filterByExtension, fn: filterByExtension }],
onAfterAddingFile: function(item) {
vm.certificateFilename = item.file.name;
},
onSuccessItem: function(item, response, status, headers) {
this.clearQueue();
$timeout(function() {
_.assign(vm.account, {security: {hasCertificate: true}});
});
_loadCertificate();
},
onErrorItem: function(item, response, status, headers) {
Dialog.alert(l('Error'), l('An error occurred while importing the certificate. Verify your password.'));
}
});
function _loadCertificate() {
if (vm.account.security && vm.account.security.hasCertificate)
accountObject.$certificate().then(function(crt) {
vm.certificate = crt;
}, function() {
delete vm.account.security.hasCertificate;
});
}
function filterByExtension(item) {
var isP12File = item.type.indexOf('pkcs12') > 0 || /\.(p12|pfx)$/.test(item.name);
vm.form.certificateFilename.$setValidity('fileformat', isP12File);
return isP12File;
}
function customFromIsReadonly() {
if (accountId > 0)
return false;
return !mailCustomFromEnabled;
}
function importCertificate() {
vm.uploader.queue[0].formData = [{ password: vm.certificatePassword }];
vm.uploader.uploadItem(0);
}
function onBeforeUploadCertificate(form) {
vm.form = form;
vm.uploader.clearQueue();
}
function removeCertificate() {
accountObject.$removeCertificate().then(function() {
delete vm.account.security.hasCertificate;
});
}
function cancel() {
$mdDialog.cancel();
}
function save() {
$mdDialog.hide();
}
}
angular
.module('SOGo.PreferencesUI')
.controller('AccountDialogController', AccountDialogController);
})();