mirror of https://github.com/portainer/portainer
119 lines
3.4 KiB
JavaScript
119 lines
3.4 KiB
JavaScript
angular.module('portainer.docker')
|
|
.controller('CreateConfigController', ['$scope', '$state', '$transition$', 'Notifications', 'ConfigService', 'Authentication', 'FormValidator', 'ResourceControlService',
|
|
function ($scope, $state, $transition$, Notifications, ConfigService, Authentication, FormValidator, ResourceControlService) {
|
|
$scope.formValues = {
|
|
Name: '',
|
|
Labels: [],
|
|
AccessControlData: new AccessControlFormData(),
|
|
ConfigContent: ''
|
|
};
|
|
|
|
$scope.state = {
|
|
formValidationError: ''
|
|
};
|
|
|
|
$scope.addLabel = function() {
|
|
$scope.formValues.Labels.push({ name: '', value: ''});
|
|
};
|
|
|
|
$scope.removeLabel = function(index) {
|
|
$scope.formValues.Labels.splice(index, 1);
|
|
};
|
|
|
|
function prepareLabelsConfig(config) {
|
|
var labels = {};
|
|
$scope.formValues.Labels.forEach(function (label) {
|
|
if (label.name && label.value) {
|
|
labels[label.name] = label.value;
|
|
}
|
|
});
|
|
config.Labels = labels;
|
|
}
|
|
|
|
function prepareConfigData(config) {
|
|
var configData = $scope.formValues.ConfigContent;
|
|
config.Data = btoa(unescape(encodeURIComponent(configData)));
|
|
}
|
|
|
|
function prepareConfiguration() {
|
|
var config = {};
|
|
config.Name = $scope.formValues.Name;
|
|
prepareConfigData(config);
|
|
prepareLabelsConfig(config);
|
|
return config;
|
|
}
|
|
|
|
function validateForm(accessControlData, isAdmin) {
|
|
$scope.state.formValidationError = '';
|
|
var error = '';
|
|
error = FormValidator.validateAccessControl(accessControlData, isAdmin);
|
|
|
|
if (error) {
|
|
$scope.state.formValidationError = error;
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
$scope.create = function () {
|
|
var accessControlData = $scope.formValues.AccessControlData;
|
|
var userDetails = Authentication.getUserDetails();
|
|
var isAdmin = userDetails.role === 1;
|
|
|
|
if ($scope.formValues.ConfigContent === '') {
|
|
$scope.state.formValidationError = 'Config content must not be empty';
|
|
return;
|
|
}
|
|
|
|
if (!validateForm(accessControlData, isAdmin)) {
|
|
return;
|
|
}
|
|
|
|
var config = prepareConfiguration();
|
|
|
|
ConfigService.create(config)
|
|
.then(function success(data) {
|
|
var configIdentifier = data.ID;
|
|
var userId = userDetails.ID;
|
|
return ResourceControlService.applyResourceControl('config', configIdentifier, userId, accessControlData, []);
|
|
})
|
|
.then(function success() {
|
|
Notifications.success('Config successfully created');
|
|
$state.go('docker.configs', {}, {reload: true});
|
|
})
|
|
.catch(function error(err) {
|
|
Notifications.error('Failure', err, 'Unable to create config');
|
|
});
|
|
};
|
|
|
|
$scope.editorUpdate = function(cm) {
|
|
$scope.formValues.ConfigContent = cm.getValue();
|
|
};
|
|
|
|
function initView() {
|
|
if (!$transition$.params().id) {
|
|
$scope.formValues.displayCodeEditor = true;
|
|
return;
|
|
}
|
|
|
|
ConfigService.config($transition$.params().id)
|
|
.then(function success(data) {
|
|
$scope.formValues.Name = data.Name + '_copy';
|
|
$scope.formValues.Data = data.Data;
|
|
var labels = _.keys(data.Labels);
|
|
for (var i = 0; i < labels.length; i++) {
|
|
var labelName = labels[i];
|
|
var labelValue = data.Labels[labelName];
|
|
$scope.formValues.Labels.push({ name: labelName, value: labelValue});
|
|
}
|
|
$scope.formValues.displayCodeEditor = true;
|
|
})
|
|
.catch(function error(err) {
|
|
$scope.formValues.displayCodeEditor = true;
|
|
Notifications.error('Failure', err, 'Unable to clone config');
|
|
});
|
|
}
|
|
|
|
initView();
|
|
}]);
|