scriptremote
Version:
Message server providing secure remote access to scripted applications from a browser UI
103 lines (95 loc) • 4.68 kB
JavaScript
'use strict';
var projectsApp = angular.module('projectsMod')
var projectsCtrl;
projectsApp.config(['$routeProvider', function($routeProvider) {
$routeProvider.when('/projects', {
templateUrl: 'modules/views/projects/src/projects.client.view.html',
controller: 'projectsCtrl',
resolve: {
authCheck: projectsCtrl.authCheck
}
});
}]);
var projectsCtrl = projectsApp.controller('projectsCtrl', ['$scope', '$location', 'SettingsSvc', 'ApiSvc', 'AlertSvc', 'AuthSvc', 'CryptoSvc', function(
$scope, $location, SettingsSvc, ApiSvc, AlertSvc, AuthSvc, CryptoSvc) {
$scope.init = function() {
var separator = '~';
$scope.projectsCrypto = {};
$scope.projects = [];
ApiSvc.resource.projectGet(
function(data1) {
$scope.projects = [];
for (var i = 0; i < data1.projects.length; i++) {
var project = data1.projects[i];
var projName = project[0];
var projEncrypted = project[1];
if (projEncrypted && CryptoSvc.isEncrypted()) {
var salt = project[2];
if (salt && (salt.length > 0)) {
// salt is empty for projects encrypted in openssl format
CryptoSvc.computeAESKey(projName, salt);
}
var plain = CryptoSvc.decrypt(projName, projName);
if (!plain) {
// Not able to decrypt this project
$scope.projects.push({display: projName, resource: projName, decrypted: false});
}
else {
$scope.projects.push({display: plain, resource: projName, decrypted: true});
}
}
else {
// Project not encrypted or no passphrase given
$scope.projects.push({display: projName, resource: projName, decrypted: false});
}
}
SettingsSvc.fromShares.get(
function(data2) {
if (data2.hasOwnProperty('shares')) {
for (var i = 0; i < data2.shares.length; i++) {
var share = data2.shares[i];
var projectPlus = share.project + separator + share.email;
if (share.encrypted && CryptoSvc.isEncrypted()) {
if (share.salt && (share.salt.length > 0)) {
// salt is empty for projects encrypted in openssl format
CryptoSvc.computeAESKey(projectPlus, share.salt);
}
var plain = CryptoSvc.decrypt(projectPlus, share.project);
if (!plain) {
// Not able to decrypt this project
$scope.projects.push({display: projectPlus, resource: projectPlus, decrypted: false});
}
else {
var plainPlus = plain + separator + share.email;
$scope.projects.push({display: plainPlus, resource: projectPlus, decrypted: true});
$scope.projectsCrypto[plainPlus] = projectPlus;
}
}
else {
// Project not encrypted or no passphrase given
$scope.projects.push({display: projectPlus, resource: projectPlus, decrypted: false});
}
}
}
},
function(res) { AuthSvc.alertPostRoute(res); }
)
},
function(res) {
AuthSvc.alertPostRoute(res);
}
)
}
$scope.select = function(project) {
if (project.decrypted) {
$location.path('/jobs/' + project.display + '/' + project.resource);
}
else {
$location.path('/jobs/' + project.display);
}
}
$scope.init();
}]);
projectsCtrl.authCheck = ['AuthSvc', 'AlertSvc', function(AuthSvc, AlertSvc) {
return AuthSvc.checkAtRoute()
}]