/* * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ (function () { 'use strict'; angular .module('testapiApp') .factory('PubKeys', PubKeys); PubKeys.$inject = ['$resource', 'testapiApiUrl']; /** * This is a provider for the user's uploaded public keys. */ function PubKeys($resource, testapiApiUrl) { return $resource(testapiApiUrl + '/profile/pubkeys/:id', null, null); } angular .module('testapiApp') .controller('ProfileController', ProfileController); ProfileController.$inject = [ '$scope', '$http', 'testapiApiUrl', 'PubKeys', '$uibModal', 'raiseAlert', '$state' ]; /** * TestAPI Profile Controller * This controller handles user's profile page, where a user can view * account-specific information. */ function ProfileController($scope, $http, testapiApiUrl, PubKeys, $uibModal, raiseAlert, $state) { var ctrl = this; ctrl.updatePubKeys = updatePubKeys; ctrl.openImportPubKeyModal = openImportPubKeyModal; ctrl.openShowPubKeyModal = openShowPubKeyModal; // Must be authenticated to view this page. if (!$scope.auth.isAuthenticated) { $state.go('home'); } /** * This function will fetch all the user's public keys from the * server and store them in an array. */ function updatePubKeys() { var keys = PubKeys.query(function() { ctrl.pubkeys = []; angular.forEach(keys, function (key) { ctrl.pubkeys.push({ 'resource': key, 'format': key.format, 'shortKey': [ key.pubkey.slice(0, 10), '.', key.pubkey.slice(-10) ].join('.'), 'pubkey': key.pubkey, 'comment': key.comment }); }); }); } /** * This function will open the modal that will give the user a form * for importing a public key. */ function openImportPubKeyModal() { $uibModal.open({ templateUrl: '/components/profile/importPubKeyModal.html', backdrop: true, windowClass: 'modal', controller: 'ImportPubKeyModalController as modal' }).result.finally(function() { ctrl.updatePubKeys(); }); } /** * This function will open the modal that will give the full * information regarding a specific public key. * @param {Object} pubKey resource */ function openShowPubKeyModal(pubKey) { $uibModal.open({ templateUrl: '/components/profile/showPubKeyModal.html', backdrop: true, windowClass: 'modal', controller: 'ShowPubKeyModalController as modal', resolve: { pubKey: function() { return pubKey; } } }).result.finally(function() { ctrl.updatePubKeys(); }); } ctrl.authRequest = $scope.auth.doSignCheck().then(ctrl.updatePubKeys); } angular .module('testapiApp') .controller('ImportPubKeyModalController', ImportPubKeyModalController); ImportPubKeyModalController.$inject = [ '$uibModalInstance', 'PubKeys', 'raiseAlert' ]; /** * Import Pub Key Modal Controller * This controller is for the modal that appears if a user wants to import * a public key. */ function ImportPubKeyModalController($uibModalInstance, PubKeys, raiseAlert) { var ctrl = this; ctrl.importPubKey = importPubKey; ctrl.cancel = cancel; /** * This function will save a new public key resource to the API server. */ function importPubKey() { var newPubKey = new PubKeys( {raw_key: ctrl.raw_key, self_signature: ctrl.self_signature} ); newPubKey.$save( function(newPubKey_) { raiseAlert('success', '', 'Public key saved successfully'); $uibModalInstance.close(newPubKey_); }, function(httpResp) { raiseAlert('danger', httpResp.statusText, httpResp.data.title); ctrl.cancel(); } ); } /** * This function will dismiss the modal. */ function cancel() { $uibModalInstance.dismiss('cancel'); } } angular .module('testapiApp') .controller('ShowPubKeyModalController', ShowPubKeyModalController); ShowPubKeyModalController.$inject = [ '$uibModalInstance', 'raiseAlert', 'pubKey' ]; /** * Show Pub Key Modal Controller * This controller is for the modal that appears if a user wants to see the * full details of one of their public keys. */ function ShowPubKeyModalController($uibModalInstance, raiseAlert, pubKey) { var ctrl = this; ctrl.deletePubKey = deletePubKey; ctrl.cancel = cancel; ctrl.pubKey = pubKey.resource; ctrl.rawKey = [pubKey.format, pubKey.pubkey, pubKey.comment].join('\n'); /** * This function will delete a public key resource. */ function deletePubKey() { ctrl.pubKey.$remove( {id: ctrl.pubKey.id}, function() { raiseAlert('success', '', 'Public key deleted successfully'); $uibModalInstance.close(ctrl.pubKey.id); }, function(httpResp) { raiseAlert('danger', httpResp.statusText, httpResp.data.title); ctrl.cancel(); } ); } /** * This method will dismiss the modal. */ function cancel() { $uibModalInstance.dismiss('cancel'); } } })();