window.angular && (function(angular) { 'use strict'; angular.module('app.common.directives').directive('certificate', [ 'APIUtils', function(APIUtils) { return { 'restrict': 'E', 'template': require('./certificate.html'), 'scope': {'cert': '=', 'reload': '&'}, 'controller': [ '$scope', 'APIUtils', 'toastService', 'Constants', function($scope, APIUtils, toastService, Constants) { var certificateType = 'PEM'; var availableCertificateTypes = Constants.CERTIFICATE_TYPES; /** * This function is needed to map the backend Description to what * should appear in the GUI. This is needed specifically for CA * certificate types. The backend description for the certificate * type is 'TrustStore Certificate', this function will make sure we * display 'CA Certificate' on the frontend * @param {string} : certificate Description property * @returns {string} : certificate name that should appear on GUI */ $scope.getCertificateName = function(certificateDescription) { var matched = availableCertificateTypes.find(function(certificate) { return certificate.Description === certificateDescription; }); if (matched === undefined) { return ''; } else { return matched.name; } }; $scope.replaceCertificate = function(certificate) { $scope.loading = true; if (certificate.file.name.split('.').pop() !== certificateType.toLowerCase()) { toastService.error( 'Certificate must be replaced with a .pem file.'); return; } var file = document .getElementById( 'upload_' + certificate.Description + certificate.Id) .files[0]; var reader = new FileReader(); reader.onloadend = function(e) { var data = {}; data.CertificateString = e.target.result; data.CertificateUri = {'@odata.id': certificate['@odata.id']}; data.CertificateType = certificateType; APIUtils.replaceCertificate(data).then( function(data) { $scope.loading = false; toastService.success( $scope.getCertificateName(certificate.Description) + ' was replaced.'); $scope.reload(); }, function(error) { console.log(error); $scope.loading = false; toastService.error( 'Unable to replace ' + $scope.getCertificateName(certificate.Description)); }); }; reader.readAsBinaryString(file); }; } ] }; } ]); })(window.angular);