mirror of https://github.com/portainer/portainer
193 lines
6.7 KiB
JavaScript
193 lines
6.7 KiB
JavaScript
angular.module('endpointAccess', [])
|
|
.controller('EndpointAccessController', ['$q', '$scope', '$state', '$stateParams', '$filter', 'EndpointService', 'UserService', 'TeamService', 'Pagination', 'Notifications',
|
|
function ($q, $scope, $state, $stateParams, $filter, EndpointService, UserService, TeamService, Pagination, Notifications) {
|
|
|
|
$scope.state = {
|
|
pagination_count_accesses: Pagination.getPaginationCount('endpoint_access_accesses'),
|
|
pagination_count_authorizedAccesses: Pagination.getPaginationCount('endpoint_access_authorizedAccesses')
|
|
};
|
|
|
|
$scope.sortTypeAccesses = 'Type';
|
|
$scope.sortReverseAccesses = false;
|
|
|
|
$scope.orderAccesses = function(sortType) {
|
|
$scope.sortReverseAccesses = ($scope.sortTypeAccesses === sortType) ? !$scope.sortReverseAccesses : false;
|
|
$scope.sortTypeAccesses = sortType;
|
|
};
|
|
|
|
$scope.changePaginationCountAccesses = function() {
|
|
Pagination.setPaginationCount('endpoint_access_accesses', $scope.state.pagination_count_accesses);
|
|
};
|
|
|
|
$scope.sortTypeAuthorizedAccesses = 'Type';
|
|
$scope.sortReverseAuthorizedAccesses = false;
|
|
|
|
$scope.orderAuthorizedAccesses = function(sortType) {
|
|
$scope.sortReverseAuthorizedAccesses = ($scope.sortTypeAuthorizedAccesses === sortType) ? !$scope.sortReverseAuthorizedAccesses : false;
|
|
$scope.sortTypeAuthorizedAccesses = sortType;
|
|
};
|
|
|
|
$scope.changePaginationCountAuthorizedAccesses = function() {
|
|
Pagination.setPaginationCount('endpoint_access_authorizedAccesses', $scope.state.pagination_count_authorizedAccesses);
|
|
};
|
|
|
|
$scope.authorizeAllAccesses = function() {
|
|
var authorizedUsers = [];
|
|
var authorizedTeams = [];
|
|
angular.forEach($scope.authorizedAccesses, function (a) {
|
|
if (a.Type === 'user') {
|
|
authorizedUsers.push(a.Id);
|
|
} else if (a.Type === 'team') {
|
|
authorizedTeams.push(a.Id);
|
|
}
|
|
});
|
|
angular.forEach($scope.accesses, function (a) {
|
|
if (a.Type === 'user') {
|
|
authorizedUsers.push(a.Id);
|
|
} else if (a.Type === 'team') {
|
|
authorizedTeams.push(a.Id);
|
|
}
|
|
});
|
|
|
|
EndpointService.updateAccess($stateParams.id, authorizedUsers, authorizedTeams)
|
|
.then(function success(data) {
|
|
$scope.authorizedAccesses = $scope.authorizedAccesses.concat($scope.accesses);
|
|
$scope.accesses = [];
|
|
Notifications.success('Endpoint accesses successfully updated');
|
|
})
|
|
.catch(function error(err) {
|
|
Notifications.error('Failure', err, 'Unable to update endpoint accesses');
|
|
});
|
|
};
|
|
|
|
$scope.unauthorizeAllAccesses = function() {
|
|
EndpointService.updateAccess($stateParams.id, [], [])
|
|
.then(function success(data) {
|
|
$scope.accesses = $scope.accesses.concat($scope.authorizedAccesses);
|
|
$scope.authorizedAccesses = [];
|
|
Notifications.success('Endpoint accesses successfully updated');
|
|
})
|
|
.catch(function error(err) {
|
|
Notifications.error('Failure', err, 'Unable to update endpoint accesses');
|
|
});
|
|
};
|
|
|
|
$scope.authorizeAccess = function(access) {
|
|
var authorizedUsers = [];
|
|
var authorizedTeams = [];
|
|
angular.forEach($scope.authorizedAccesses, function (a) {
|
|
if (a.Type === 'user') {
|
|
authorizedUsers.push(a.Id);
|
|
} else if (a.Type === 'team') {
|
|
authorizedTeams.push(a.Id);
|
|
}
|
|
});
|
|
|
|
if (access.Type === 'user') {
|
|
authorizedUsers.push(access.Id);
|
|
} else if (access.Type === 'team') {
|
|
authorizedTeams.push(access.Id);
|
|
}
|
|
|
|
EndpointService.updateAccess($stateParams.id, authorizedUsers, authorizedTeams)
|
|
.then(function success(data) {
|
|
removeAccessFromArray(access, $scope.accesses);
|
|
$scope.authorizedAccesses.push(access);
|
|
Notifications.success('Endpoint accesses successfully updated', access.Name);
|
|
})
|
|
.catch(function error(err) {
|
|
Notifications.error('Failure', err, 'Unable to update endpoint accesses');
|
|
});
|
|
};
|
|
|
|
$scope.unauthorizeAccess = function(access) {
|
|
var authorizedUsers = [];
|
|
var authorizedTeams = [];
|
|
angular.forEach($scope.authorizedAccesses, function (a) {
|
|
if (a.Type === 'user') {
|
|
authorizedUsers.push(a.Id);
|
|
} else if (a.Type === 'team') {
|
|
authorizedTeams.push(a.Id);
|
|
}
|
|
});
|
|
|
|
if (access.Type === 'user') {
|
|
_.remove(authorizedUsers, function(n) {
|
|
return n === access.Id;
|
|
});
|
|
} else if (access.Type === 'team') {
|
|
_.remove(authorizedTeams, function(n) {
|
|
return n === access.Id;
|
|
});
|
|
}
|
|
|
|
EndpointService.updateAccess($stateParams.id, authorizedUsers, authorizedTeams)
|
|
.then(function success(data) {
|
|
removeAccessFromArray(access, $scope.authorizedAccesses);
|
|
$scope.accesses.push(access);
|
|
Notifications.success('Endpoint accesses successfully updated', access.Name);
|
|
})
|
|
.catch(function error(err) {
|
|
Notifications.error('Failure', err, 'Unable to update endpoint accesses');
|
|
});
|
|
};
|
|
|
|
function initView() {
|
|
$('#loadingViewSpinner').show();
|
|
$q.all({
|
|
endpoint: EndpointService.endpoint($stateParams.id),
|
|
users: UserService.users(false),
|
|
teams: TeamService.teams()
|
|
})
|
|
.then(function success(data) {
|
|
$scope.endpoint = data.endpoint;
|
|
$scope.accesses = [];
|
|
var users = data.users.map(function (user) {
|
|
return new EndpointAccessUserViewModel(user);
|
|
});
|
|
var teams = data.teams.map(function (team) {
|
|
return new EndpointAccessTeamViewModel(team);
|
|
});
|
|
$scope.accesses = $scope.accesses.concat(users, teams);
|
|
$scope.authorizedAccesses = [];
|
|
angular.forEach($scope.endpoint.AuthorizedUsers, function(userID) {
|
|
for (var i = 0, l = $scope.accesses.length; i < l; i++) {
|
|
if ($scope.accesses[i].Type === 'user' && $scope.accesses[i].Id === userID) {
|
|
$scope.authorizedAccesses.push($scope.accesses[i]);
|
|
$scope.accesses.splice(i, 1);
|
|
return;
|
|
}
|
|
}
|
|
});
|
|
angular.forEach($scope.endpoint.AuthorizedTeams, function(teamID) {
|
|
for (var i = 0, l = $scope.accesses.length; i < l; i++) {
|
|
if ($scope.accesses[i].Type === 'team' && $scope.accesses[i].Id === teamID) {
|
|
$scope.authorizedAccesses.push($scope.accesses[i]);
|
|
$scope.accesses.splice(i, 1);
|
|
return;
|
|
}
|
|
}
|
|
});
|
|
})
|
|
.catch(function error(err) {
|
|
$scope.accesses = [];
|
|
$scope.authorizedAccesses = [];
|
|
Notifications.error('Failure', err, 'Unable to retrieve endpoint details');
|
|
})
|
|
.finally(function final(){
|
|
$('#loadingViewSpinner').hide();
|
|
});
|
|
}
|
|
|
|
function removeAccessFromArray(access, accesses) {
|
|
for (var i = 0, l = accesses.length; i < l; i++) {
|
|
if (access.Type === accesses[i].Type && access.Id === accesses[i].Id) {
|
|
accesses.splice(i, 1);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
initView();
|
|
}]);
|