aboutsummaryrefslogtreecommitdiffstats
path: root/moon_dashboard/moon/static/moon/policy
diff options
context:
space:
mode:
Diffstat (limited to 'moon_dashboard/moon/static/moon/policy')
-rw-r--r--moon_dashboard/moon/static/moon/policy/policy.controller.js341
-rw-r--r--moon_dashboard/moon/static/moon/policy/policy.html214
-rwxr-xr-xmoon_dashboard/moon/static/moon/policy/policy.service.js428
-rwxr-xr-xmoon_dashboard/moon/static/moon/policy/policy.service.spec.js487
4 files changed, 0 insertions, 1470 deletions
diff --git a/moon_dashboard/moon/static/moon/policy/policy.controller.js b/moon_dashboard/moon/static/moon/policy/policy.controller.js
deleted file mode 100644
index a3cc18f1..00000000
--- a/moon_dashboard/moon/static/moon/policy/policy.controller.js
+++ /dev/null
@@ -1,341 +0,0 @@
-(function () {
- 'use strict';
-
- angular
- .module('moon')
- .controller('moon.policy.controller',
- controller);
-
- controller.$inject = ['moon.util.service', 'moon.policy.service', 'moon.model.service', 'horizon.framework.widgets.form.ModalFormService'];
-
- function controller(util, policyService, modelService, ModalFormService) {
- var self = this;
- var genres = [{ value: 'admin', name: gettext('admin') }, { value: 'authz', name: gettext('authz') }];
- self.model = policyService;
- self.selectedRule = null;
- self.currentData = null;
- policyService.initialize();
-
- var dataTitleMaps = {};
-
- var categoryMap = {
- subject: {
- perimeterId: 'subject_id'
- },
- object: {
- perimeterId: 'object_id'
- },
- action: {
- perimeterId: 'action_id'
- },
- }
-
- function createAddDataButton(type, index, category, config, policy) {
- config.form.push({
- key: type + index + "Button",
- type: "button",
- title: gettext("Create Data"),
- icon: 'fa fa-plus',
- onClick: createDataFunction(type, category, policy, config.model, type+index)
- })
- }
-
- function createDataFunction(type, category, policy, formModel, key) {
- return function () {
- var schema = {
- type: "object",
- properties: {
- name: { type: "string", minLength: 2, title: gettext("Name") },
- description: { type: "string", minLength: 2, title: gettext("Description") },
- },
- required: ['name', 'description']
- };
- var data = { name: '', description: '' };
- var config = {
- title: gettext('Create Data of ' + category.name + ' category'),
- schema: schema,
- form: ['name', { key: 'description', type: 'textarea' }],
- model: data
- };
- ModalFormService.open(config).then(submit);
-
- function submit(form) {
- policyService.createData(type, policy, category, form.model).then(
- function (data) {
- util.pushAll(dataTitleMaps[category.id], util.arrayToTitleMap(data));
- formModel[key] = data[0].id
- }
- );
- }
- }
- }
-
- function getOrCreateDataTitleMap(category, data, policy) {
- var result = dataTitleMaps[category.id];
- if (!result) {
- result = util.arrayToTitleMap(data);
- dataTitleMaps[category.id] = result;
- }
- return result;
- }
-
- function createDataSelect(type, categories, data, config, policy) {
- for (var i = 0; i < categories.length; i++) {
- var category = categories[i];
- var titleMap = getOrCreateDataTitleMap(category, data, policy);
- config.schema.properties[type + i] = { type: "string", title: gettext('Select ' + type + ' data of ' + category.name + ' category') };
- config.form.push({ key: type + i, type: 'select', titleMap: titleMap });
- config.schema.required.push(type + i);
- createAddDataButton(type, i, category, config, policy);
- }
- }
-
- function pushData(type, model, array) {
- var i = 0;
- while ((type + i) in model) {
- array.push(model[type + i]);
- i++;
- }
- }
-
- self.createPolicy = function createPolicy() {
- var schema = {
- type: "object",
- properties: {
- name: { type: "string", minLength: 2, title: gettext("Name") },
- description: { type: "string", minLength: 2, title: gettext("Description") },
- genre: { type: "string", title: gettext("genre") },
- model_id: { type: "string", title: gettext("Select a Model:") }
- },
- required: ['name', 'description', 'genre', 'model_id']
- };
- var policy = { name: '', description: '', model_id: null, genre: '' };
- var titleMap = util.arrayToTitleMap(modelService.models)
- var config = {
- title: gettext('Create Policy'),
- schema: schema,
- form: ['name', { key: 'description', type: 'textarea' }, { key: 'genre', type: 'select', titleMap: genres }, { key: 'model_id', type: 'select', titleMap: titleMap }],
- model: policy
- };
- ModalFormService.open(config).then(submit);
-
- function submit(form) {
- policyService.createPolicy(form.model);
- }
- }
-
- self.updatePolicy = function updatePolicy(policy) {
- var schema = {
- type: "object",
- properties: {
- name: { type: "string", minLength: 2, title: gettext("Name") },
- description: { type: "string", minLength: 2, title: gettext("Description") },
- genre: { type: "string", title: gettext("Genre") },
- },
- required: ['name', 'description', 'genre']
- };
- var config = {
- title: gettext('Update Policy'),
- schema: schema,
- form: ['name', { key: 'description', type: 'textarea' }, { key: 'genre', type: 'select', titleMap: genres }],
- model: { name: policy.name, description: policy.description, model_id: policy.model_id, id: policy.id, genre: policy.genre }
- };
- ModalFormService.open(config).then(submit);
-
- function submit(form) {
- policyService.updatePolicy(form.model);
- }
- }
-
- self.addRuleWithMetaRule = function addRuleWithMetaRule(policy, metaRule) {
- var schema = {
- type: "object",
- properties: {
- instructions: { type: "string", title: gettext("Instructions") }
- },
- required: ['instructions']
- };
-
- var config = {
- title: gettext('Add Rule'),
- schema: schema,
- form: [],
- model: {
- instructions: '[{"decision": "grant"}]'
- }
- };
- dataTitleMaps = {};
- createDataSelect('subject', metaRule.subject_categories, policy.subjectData, config, policy);
- createDataSelect('object', metaRule.object_categories, policy.objectData, config, policy);
- createDataSelect('action', metaRule.action_categories, policy.actionData, config, policy);
- config.form.push({ key: 'instructions', type: 'textarea' })
-
- ModalFormService.open(config).then(submit);
-
- function submit(form) {
- var rule = { enabled: true };
- rule.instructions = JSON.parse(form.model.instructions);
- rule.meta_rule_id = metaRule.id;
- rule.policy_id = policy.id;
- rule.rule = [];
- pushData('subject', form.model, rule.rule);
- pushData('object', form.model, rule.rule);
- pushData('action', form.model, rule.rule);
- policyService.addRuleToPolicy(policy, rule);
- }
- }
-
- self.addRule = function addRule(policy) {
- if (policy.model.meta_rules.length == 1) {
- self.addRuleWithMetaRule(policy, policy.model.meta_rules[0]);
- return;
- }
- var schema = {
- type: "object",
- properties: {
- metaRuleId: { type: "string", title: gettext("Select a Metarule:") }
- },
- required: ['metaRuleId']
- };
- var rule = { metaRuleId: null };
- var titleMap = util.arrayToTitleMap(policy.model.meta_rules);
- var config = {
- title: gettext('Add Rule'),
- schema: schema,
- form: [{ key: 'metaRuleId', type: 'select', titleMap: titleMap }],
- model: rule
- };
- ModalFormService.open(config).then(submit);
-
- function submit(form) {
- self.addRuleWithMetaRule(policy, modelService.getMetaRule(form.model.metaRuleId));
- }
- }
-
- self.removePolicy = function removePolicy(policy) {
- if (confirm(gettext('Are you sure to delete this Policy? (Associated perimeter, data an PDP will be deleted too)')))
- policyService.removePolicy(policy);
- }
-
- self.populatePolicy = function populatePolicy(policy) {
- policyService.populatePolicy(policy);
- }
-
- self.removeRuleFromPolicy = function removeRuleFromPolicy(policy, rule) {
- if (confirm(gettext('Are you sure to delete this Rule?')))
- policyService.removeRuleFromPolicy(policy, rule);
- }
-
- self.showRule = function showRule(rule) {
- self.selectedRule = rule;
- self.currentData = null;
- }
-
- self.hideRule = function hideRule() {
- self.selectedRule = null;
- self.currentData = null;
- }
-
- self.assignData = function assignData(type, policy, data) {
- self.currentData = {
- data: data,
- type: type,
- loading: true,
- perimeters: [],
- allPerimeters: [],
- assignments: [],
- }
-
- policyService.loadPerimetersAndAssignments(type, policy).then(function (values) {
- var category = categoryMap[type];
- self.currentData.loading = false;
- self.currentData.perimeters = values.perimeters;
- var index;
- for (index = 0; index < values.allPerimeters.length; index++) {
- var perimeter = values.allPerimeters[index];
- if (perimeter.policy_list.indexOf(policy.id) < 0) {
- self.currentData.allPerimeters.push(perimeter);
- }
- }
- for (index = 0; index < values.assignments.length; index++) {
- var assignment = values.assignments[index];
- if (assignment.assignments.indexOf(data.id) >= 0) {
- var perimeter = values.perimetersMap[assignment[category.perimeterId]];
- self.currentData.assignments.push(perimeter);
- self.currentData.perimeters.splice(self.currentData.perimeters.indexOf(perimeter), 1);
- }
- }
- })
- }
-
- self.createPerimeter = function createPerimeter(type, policy) {
- var schema = {
- type: "object",
- properties: {
- name: { type: "string", minLength: 2, title: gettext("Name") },
- description: { type: "string", minLength: 2, title: gettext("Description") },
- },
- required: ['name', 'description']
- };
- if (type == 'subject') {
- schema.properties.email = { type: "email", "type": "string", "pattern": "^\\S+@\\S+$", title: gettext("Email") }
- schema.required.push('email');
- }
- var perimeter = { name: '', description: '' };
- var config = {
- title: gettext('Create Perimeter'),
- schema: schema,
- form: ['name', { key: 'description', type: 'textarea' }],
- model: perimeter
- };
- if (type == 'subject') {
- config.form.push('email');
- }
-
- ModalFormService.open(config).then(submit);
-
- function submit(form) {
- policyService.createPerimeter(type, policy, form.model).then(function (perimeters) {
- util.pushAll(self.currentData.perimeters, perimeters);
- })
- }
- }
-
- self.addPerimeter = function addPerimeter(type, policy, perimeter) {
- policyService.addPerimeterToPolicy(type, policy, perimeter).then(function () {
- self.currentData.allPerimeters.splice(self.currentData.allPerimeters.indexOf(perimeter), 1);
- self.currentData.perimeters.push(perimeter);
- })
- }
-
- self.assign = function assign(type, policy, perimeter, data) {
- policyService.createAssignment(type, policy, perimeter, data).then(function () {
- self.currentData.assignments.push(perimeter);
- self.currentData.perimeters.splice(self.currentData.perimeters.indexOf(perimeter), 1);
- })
- }
-
- self.unassign = function unassign(type, policy, perimeter, data) {
- policyService.removeAssignment(type, policy, perimeter, data).then(function () {
- self.currentData.perimeters.push(perimeter);
- self.currentData.assignments.splice(self.currentData.assignments.indexOf(perimeter), 1);
- })
- }
-
- self.removePerimeterFromPolicy = function removePerimeterFromPolicy(type, policy, perimeter) {
- if (confirm(gettext('Are you sure to delete this Perimeter? (Associated assignments will be deleted too)')))
- policyService.removePerimeterFromPolicy(type, policy, perimeter).then(function () {
- self.currentData.perimeters.splice(self.currentData.perimeters.indexOf(perimeter), 1);
- perimeter.policy_list.splice(perimeter.policy_list.indexOf(policy.id), 1);
- if (perimeter.policy_list.length > 0) {
- self.currentData.allPerimeters.push(perimeter);
- }
- })
- }
-
- self.removeData = function removeData(type, policy, data) {
- if (confirm(gettext('Are you sure to delete this Data? (Associated assignments and rules will be deleted too)')))
- policyService.removeData(type, policy, data)
- }
- }
-})(); \ No newline at end of file
diff --git a/moon_dashboard/moon/static/moon/policy/policy.html b/moon_dashboard/moon/static/moon/policy/policy.html
deleted file mode 100644
index ba13bec2..00000000
--- a/moon_dashboard/moon/static/moon/policy/policy.html
+++ /dev/null
@@ -1,214 +0,0 @@
-<div ng-controller="moon.policy.controller as ctrl">
- <div class="clearfix list-group">
- <div class="pull-right">
- <input type="search" class="form-control filter" placeholder="Filter" ng-model="filterText">
- <button type="button" class="btn btn-default" ng-click="ctrl.createPolicy()">
- <span class="fa fa-plus"></span>
- <translate>Create Policy</translate>
- </button>
- </div>
- </div>
-
- <div class="list-group">
- <div ng-repeat="policy in ctrl.model.policies | orderBy:'name' | filter:filterText" class="list-group-item" ng-init="toggle = {};toggle.showUnused = false">
- <h3 class="list-group-item-heading inline">{$ policy.name $}</h3>
- <div class="pull-right">
- <button type="button" class="fa fa-trash" title="{$ 'Remove Policy' | translate $}" ng-click="ctrl.removePolicy(policy)"></button>
- <button type="button" class="fa fa-edit" title="{$ 'Edit Policy' | translate $}" ng-click="ctrl.updatePolicy(policy)"></button>
- </div>
- <p class="list-group-item-text">{$ policy.description $}</p>
- <h4 class="list-group-item-text">
- <translate>Model: {$ policy.model ? policy.model.name : 'none' $}</translate>
- </h4>
- <h4 class="list-group-item-text">
- <translate>Genre:</translate>
- <translate>{$ policy.genre ? policy.genre : 'none' $}</translate>
- </h4>
- <div ng-if="policy.unusedSubjectData.length
- || policy.unusedSubjectData.length
- || policy.unusedSubjectData.length" class="alert alert-dismissable alert-warning">
- <button type="button" class="close" data-dismiss="alert" ng-click="toggle.showUnused=false">×</button>
- <h4 translate>Warning!</h4>
- <p translate>
- Some data are unused, please check them and delete them if necessary.
- <a href="" ng-click="toggle.showUnused=true" ng-show="!toggle.showUnused" translate>Show unused data</a>
- <a href="" ng-click="toggle.showUnused=false" ng-show="toggle.showUnused" translate>Hide unused data</a>
- </p>
- </div>
-
- <div ng-if="toggle.showUnused" class="list-group-item-text overflow-hidden">
- <div class="list-group col-lg-3" ng-if="policy.unusedSubjectData.length">
- <h3 class="list-group-item active" translate>Unused Subject data</h3>
- <div ng-repeat="subject in policy.unusedSubjectData | orderBy:'name'" class="list-group-item">
- <h4 class="list-group-item-heading inline" title="{$ subject.description $}">{$ subject.name $}</h4>
- <button type="button" class="fa fa-trash pull-right" ng-click="ctrl.removeData('subject', policy, subject)" title="{$ 'Remove Subject data' | translate $}"></button>
- </div>
- </div>
-
- <div class="list-group col-lg-3" ng-if="policy.unusedObjectData.length">
- <h3 class="list-group-item active" translate>Unused Object data</h3>
- <div ng-repeat="object in policy.unusedObjectData | orderBy:'name'" class="list-group-item">
- <h4 class="list-group-item-heading inline" title="{$ object.description $}">{$ object.name $}</h4>
- <button type="button" class="fa fa-trash pull-right" ng-click="ctrl.removeData('object', policy, object)" title="{$ 'Remove Object data' | translate $}"></button>
- </div>
- </div>
-
- <div class="list-group col-lg-3" ng-if="policy.unusedActionData.length">
- <h3 class="list-group-item active" translate>Unused Action data</h3>
- <div ng-repeat="action in policy.unusedActionData | orderBy:'name'" class="list-group-item">
- <h4 class="list-group-item-heading inline" title="{$ action.description $}">{$ action.name $}</h4>
- <button type="button" class="fa fa-trash pull-right" ng-click="ctrl.removeData('action', policy, action)" title="{$ 'Remove Action data' | translate $}"></button>
- </div>
- </div>
-
- </div>
-
-
- <details class="list-group-item-text">
- <summary ng-click="ctrl.populatePolicy(policy)">
- <h4 class="inline" translate>Rules</h4>
- <button type="button" class="fa fa-plus " ng-click="ctrl.addRule(policy)" title="{$ 'Add Rule' | translate $}"></button>
- </summary>
- <div class="list-group">
- <p ng-if="!policy.rules" class="list-group-item-text" translate>Loading rules...</p>
- <div ng-if="policy.rules" ng-repeat="rule in policy.rules | orderBy:'name'" class="list-group-item">
- <div class="list-group-item-heading" ng-if="ctrl.selectedRule != rule">
- <div class="inline-block width-200">
- <b>
- <translate>Metarule: </translate>
- </b> {$ rule.metaRule.name $}
- </div>
- <b>
- <translate>Rule: </translate>
- </b>
- <span ng-repeat="data in rule.subjectData">
- <span>{$ data.name $}{$ $last ? '' : ', ' $}</span>
- </span> |
- <span ng-repeat="data in rule.actionData">
- <span>{$ data.name $}{$ $last ? '' : ', ' $}</span>
- </span> |
- <span ng-repeat="data in rule.objectData">
- <span>{$ data.name $}{$ $last ? '' : ', ' $}</span>
- </span>
- <div class="pull-right">
- <button type="button" class="fa fa-trash pull-right" ng-click="ctrl.removeRuleFromPolicy(policy, rule)" title="{$ 'Remove Rule' | translate $}"></button>
- <button type="button" class="fa fa-eye pull-right" ng-click="ctrl.showRule(rule)" title="{$ 'Show Rule' | translate $}"></button>
- </div>
- </div>
-
- <div ng-if="ctrl.selectedRule == rule">
- <h3 class="list-group-item-heading inline">
- <translate>Metarule: </translate> {$ rule.metaRule.name $}</h3>
- <div class="pull-right">
- <button type="button" class="fa fa-trash pull-right" ng-click="ctrl.removeRuleFromPolicy(policy, rule)" title="{$ 'Remove Rule' | translate $}"></button>
- <button type="button" class="fa fa-eye-slash pull-right" ng-click="ctrl.hideRule()" title="{$ 'Hide Rule' | translate $}"></button>
- </div>
- <p class="list-group-item-text">
- <table class="table">
- <thead>
- <tr>
- <th>
- <span translate>Subjects</span>
- </th>
- <th>
- <span translate>Objects</span>
- </th>
- <th>
- <span translate>Actions</span>
- </th>
- <th>
- <span translate>Instructions</span>
- </th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>
- <p ng-repeat="data in rule.subjectData">
- <span ng-class="{'text-primary': ctrl.currentData.data == data}" title="{$ data.description $}">{$ data.name $}</span>
- <button ng-if="ctrl.currentData.data != data" type="button" class="fa fa-exchange pull-right" ng-click="ctrl.assignData('subject', policy, data)"
- title="{$ 'Assign to perimeters' | translate $}"></button>
- <button ng-if="ctrl.currentData.data == data" type="button" class="fa fa-times pull-right" ng-click="ctrl.currentData = null"
- title="{$ 'Close' | translate $}"></button>
- </p>
- </td>
- <td>
- <p ng-repeat="data in rule.objectData">
- <span ng-class="{'text-primary': ctrl.currentData.data == data}" title="{$ data.description $}">{$ data.name $}</span>
- <button ng-if="ctrl.currentData.data != data" type="button" class="fa fa-exchange pull-right" ng-click="ctrl.assignData('object', policy, data)"
- title="{$ 'Assign to perimeters' | translate $}"></button>
- <button ng-if="ctrl.currentData.data == data" type="button" class="fa fa-times pull-right" ng-click="ctrl.currentData = null"
- title="{$ 'Close' | translate $}"></button>
- </p>
- </td>
- <td>
- <p ng-repeat="data in rule.actionData">
- <span ng-class="{'text-primary': ctrl.currentData.data == data}" title="{$ data.description $}">{$ data.name $}</span>
- <button ng-if="ctrl.currentData.data != data" type="button" class="fa fa-exchange pull-right" ng-click="ctrl.assignData('action', policy, data)"
- title="{$ 'Assign to perimeters' | translate $}"></button>
- <button ng-if="ctrl.currentData.data == data" type="button" class="fa fa-times pull-right" ng-click="ctrl.currentData = null"
- title="{$ 'Close' | translate $}"></button>
- </p>
- </td>
- <td>
- <pre ng-bind="rule.instructions | json "></pre>
- </td>
- </tr>
- </tbody>
- </table>
- <div ng-if="ctrl.currentData && ctrl.currentData.loading" class="row padding-10">
- <h4 translate>Loading...</h4>
- </div>
- <div ng-if="ctrl.currentData && !ctrl.currentData.loading" class="row">
- <div class="padding-10">
- <h3>
- <translate>Assign perimeters to</translate> {$ ctrl.currentData.data.name $}</h3>
- <input type="search" class="form-control filter" placeholder="Filter" ng-model="filterPerimeter">
- <button type="button" class="btn btn-default" ng-click="ctrl.createPerimeter(ctrl.currentData.type, policy)">
- <span class="fa fa-plus"></span>
- <translate>Create Perimeter</translate>
- </button>
- </div>
- <div>
- <div class="col-lg-4">
- <h4 translate>All perimeters</h4>
- <div class="w-100 height-200 scroll list-group border">
- <button class="list-group-item" ng-repeat="perimeter in ctrl.currentData.allPerimeters | orderBy:'name' | filter:filterPerimeter"
- title="{$ perimeter.description $}" ng-click="ctrl.addPerimeter(ctrl.currentData.type, policy, perimeter)">{$ perimeter.name $}</button>
-
- </div>
- <p translate class="mt-5">Click to add</p>
- </div>
-
- <div class="col-lg-4">
- <h4 translate>Policy perimeters</h4>
- <div class="w-100 height-200 scroll list-group border">
- <div ng-click="ctrl.assign(ctrl.currentData.type, policy, perimeter, ctrl.currentData.data)" class="list-group-item" ng-repeat="perimeter in ctrl.currentData.perimeters | orderBy:'name' | filter:filterPerimeter">
- <span title="{$ perimeter.description $}">
- {$ perimeter.name $}
- </span>
- <button type="button" class="fa fa-trash pull-right" ng-click="$event.stopPropagation();ctrl.removePerimeterFromPolicy(ctrl.currentData.type, policy, perimeter)"
- title="{$ 'Remove Perimeter' | translate $}"></button>
- </div>
-
- </div>
- <p translate class="mt-5">Click to assign</p>
- </div>
- <div class="col-lg-4">
- <h4 translate>Assigned perimeters</h4>
- <div class="w-100 list-group border height-200 scroll">
- <button class="list-group-item" ng-repeat="perimeter in ctrl.currentData.assignments | orderBy:'name' | filter:filterPerimeter"
- title="{$ perimeter.description $}" ng-click="ctrl.unassign(ctrl.currentData.type, policy, perimeter, ctrl.currentData.data)">{$ perimeter.name $}</button>
- </div>
- <p translate class="mt-5">Click to unassign</p>
- </div>
- </div>
- </div>
- </p>
- </div>
- </div>
- </div>
- </details>
- </div>
- </div>
-</div> \ No newline at end of file
diff --git a/moon_dashboard/moon/static/moon/policy/policy.service.js b/moon_dashboard/moon/static/moon/policy/policy.service.js
deleted file mode 100755
index 3781156d..00000000
--- a/moon_dashboard/moon/static/moon/policy/policy.service.js
+++ /dev/null
@@ -1,428 +0,0 @@
-(function () {
-
- 'use strict';
-
- angular
- .module('moon')
- .factory('moon.policy.service', policyService);
-
- policyService.$inject = ['moon.util.service', 'moon.model.service', '$resource', 'moon.URI', '$q', 'horizon.framework.widgets.toast.service'];
-
- function policyService(util, modelService, $resource, URI, $q, toast) {
- var host = URI.API;
-
- var policyResource = $resource(host + '/policies/' + ':id', {}, {
- get: { method: 'GET' },
- query: { method: 'GET' },
- create: { method: 'POST' },
- remove: { method: 'DELETE' },
- update: { method: 'PATCH' }
- });
-
- var policyRulesResource = $resource(host + '/policies/' + ':policy_id' + '/rules/' + ':rule_id', {}, {
- get: { method: 'GET' },
- query: { method: 'GET' },
- create: { method: 'POST' },
- remove: { method: 'DELETE' }
- });
-
- var policySubjectDataResource = $resource(host + '/policies/' + ':policy_id' + '/subject_data/' + ':category_id' + '/' + ':data_id', {}, {
- query: {method: 'GET'},
- create: { method: 'POST' },
- remove: { method: 'DELETE' }
- })
-
- var policyObjectDataResource = $resource(host + '/policies/' + ':policy_id' + '/object_data/' + ':category_id' + '/' + ':data_id', {}, {
- query: {method: 'GET'},
- create: { method: 'POST' },
- remove: { method: 'DELETE' }
- })
-
- var policyActionDataResource = $resource(host + '/policies/' + ':policy_id' + '/action_data/' + ':category_id' + '/' + ':data_id', {}, {
- query: {method: 'GET'},
- create: { method: 'POST' },
- remove: { method: 'DELETE' }
- })
-
- var policySubjectPerimetersResource = $resource(host + '/policies/' + ':policy_id' + '/subjects/' + ':perimeter_id', {}, {
- query: {method: 'GET'},
- create: { method: 'POST' },
- remove: { method: 'DELETE' }
- })
-
- var policyObjectPerimetersResource = $resource(host + '/policies/' + ':policy_id' + '/objects/' + ':perimeter_id', {}, {
- query: {method: 'GET'},
- create: { method: 'POST' },
- remove: { method: 'DELETE' }
- })
-
- var policyActionPerimetersResource = $resource(host + '/policies/' + ':policy_id' + '/actions/' + ':perimeter_id', {}, {
- query: {method: 'GET'},
- create: { method: 'POST' },
- remove: { method: 'DELETE' }
- })
-
- var subjectPerimetersResource = $resource(host + '/subjects/' + ':perimeter_id', {}, {
- query: {method: 'GET'},
- update: { method: 'PATCH' }
- })
-
- var objectPerimetersResource = $resource(host + '/objects/' + ':perimeter_id', {}, {
- query: {method: 'GET'},
- update: { method: 'PATCH' }
- })
-
- var actionPerimetersResource = $resource(host + '/actions/' + ':perimeter_id', {}, {
- query: {method: 'GET'},
- update: { method: 'PATCH' }
- })
-
- var policySubjectAssignmentsResource = $resource(host + '/policies/' + ':policy_id' + '/subject_assignments/' + ':perimeter_id' + '/' + ':category_id' + '/' + ':data_id', {}, {
- query: {method: 'GET'},
- create: { method: 'POST' },
- remove: { method: 'DELETE' }
- })
-
- var policyObjectAssignmentsResource = $resource(host + '/policies/' + ':policy_id' + '/object_assignments/' + ':perimeter_id' + '/' + ':category_id' + '/' + ':data_id', {}, {
- query: {method: 'GET'},
- create: { method: 'POST' },
- remove: { method: 'DELETE' }
- })
-
- var policyActionAssignmentsResource = $resource(host + '/policies/' + ':policy_id' + '/action_assignments/' + ':perimeter_id' + '/' + ':category_id' + '/' + ':data_id', {}, {
- query: {method: 'GET'},
- create: { method: 'POST' },
- remove: { method: 'DELETE' }
- })
-
-
- var categoryMap = {
- 'subject': {
- resource: policySubjectDataResource,
- arrayName: "subjectData",
- mapName: "subjectDataMap",
- responseName: "subject_data",
- policyPerimeterResource: policySubjectPerimetersResource,
- perimeterResource: subjectPerimetersResource,
- assignmentResource: policySubjectAssignmentsResource,
- perimeterResponseName: "subjects",
- assignmentResponseName: "subject_assignments",
- unusedArrayName: "unusedSubjectData",
- },
- 'object': {
- resource: policyObjectDataResource,
- arrayName: "objectData",
- mapName: "objectDataMap",
- responseName: "object_data",
- policyPerimeterResource: policyObjectPerimetersResource,
- perimeterResource: objectPerimetersResource,
- assignmentResource: policyObjectAssignmentsResource,
- perimeterResponseName: "objects",
- assignmentResponseName: "object_assignments",
- unusedArrayName: "unusedObjectData",
- },
- 'action': {
- resource: policyActionDataResource,
- arrayName: "actionData",
- mapName: "actionDataMap",
- responseName: "action_data",
- policyPerimeterResource: policyActionPerimetersResource,
- perimeterResource: actionPerimetersResource,
- assignmentResource: policyActionAssignmentsResource,
- perimeterResponseName: "actions",
- assignmentResponseName: "action_assignments",
- unusedArrayName: "unusedActionData",
- }
- }
-
- var policiesMap = {};
- var policies = [];
-
- function loadPolicies() {
- var queries = {
- policies: policyResource.query().$promise,
- models: modelService.initialize(),
- }
-
- $q.all(queries).then(function (result) {
- createPolicies(result.policies);
- console.log('moon', 'policies initialized')
- })
- }
-
- function createPolicies(policiesData) {
- policies.splice(0, policies.length);
- util.cleanObject(policiesMap);
- createPolicyInternal(policiesData.policies);
- }
-
- function mapPolicy(policy) {
- if (policy.model_id) {
- policy.model = modelService.getModel(policy.model_id);
- }
- }
-
- function createPolicyInternal(data) {
- return util.createInternal(data, policies, policiesMap, mapPolicy);
- }
-
- function removePolicyInternal(id) {
- return util.removeInternal(id, policies, policiesMap);
- }
-
- function updatePolicyInternal(data) {
- return util.updateInternal(data, policiesMap, mapPolicy);
- }
-
- function removeRuleInternal(policy, rule) {
- policy.rules.splice(policy.rules.indexOf(rule), 1);
- updateUnusedData(policy);
- }
-
- function loadPolicyRule(policy) {
- if (!policy.rules) {
- var queries = {
- rules: policyRulesResource.query({ policy_id: policy.id }).$promise,
- subjectData: policySubjectDataResource.query({ policy_id: policy.id }).$promise,
- objectData: policyObjectDataResource.query({ policy_id: policy.id }).$promise,
- actionData: policyActionDataResource.query({ policy_id: policy.id }).$promise,
- }
-
- $q.all(queries).then(function (result) {
- createRules(policy, result.rules, result.subjectData, result.objectData, result.actionData);
- updateUnusedData(policy);
- }, util.displayErrorFunction('Unable to load rules'))
- }
- }
-
- function updateUnusedData(policy) {
- policy.unusedSubjectData.splice(0, policy.unusedSubjectData.length);
- util.pushAll(policy.unusedSubjectData, policy.subjectData);
-
- policy.unusedObjectData.splice(0, policy.unusedObjectData.length);
- util.pushAll(policy.unusedObjectData, policy.objectData);
-
- policy.unusedActionData.splice(0, policy.unusedActionData.length);
- util.pushAll(policy.unusedActionData, policy.actionData);
-
- for (var i = 0; i < policy.rules.length; i++) {
- var rule = policy.rules[i];
- removeUsedData(rule.subjectData, policy.unusedSubjectData);
- removeUsedData(rule.objectData, policy.unusedObjectData);
- removeUsedData(rule.actionData, policy.unusedActionData);
- }
- }
-
- function removeUsedData(list, orphanList) {
- for (var j = 0; j < list.length; j++) {
- var data = list[j];
- var notOrphanIndex = util.indexOf(orphanList, "id", data.id);
- if (notOrphanIndex >= 0) {
- orphanList.splice(notOrphanIndex, 1);
- }
- }
- }
-
- function createRules(policy, rulesData, subjectsData, objectsData, actionsData) {
- policy.rules = rulesData ? rulesData.rules.rules : [];
- policy.subjectDataMap = subjectsData.subject_data.length > 0 ? subjectsData.subject_data[0].data : [];
- policy.subjectData = util.mapToArray(policy.subjectDataMap);
- policy.objectDataMap = objectsData.object_data.length > 0 ? objectsData.object_data[0].data : [];
- policy.objectData = util.mapToArray(policy.objectDataMap);
- policy.actionDataMap = actionsData.action_data.length > 0 ? actionsData.action_data[0].data : [];
- policy.actionData = util.mapToArray(policy.actionDataMap);
- policy.unusedSubjectData = [];
- policy.unusedObjectData = [];
- policy.unusedActionData = [];
- for (var i = 0; i < policy.rules.length; i++) {
- var rule = policy.rules[i];
- populateRule(policy, rule);
- }
- }
-
- function populateRule(policy, rule) {
- if (rule.meta_rule_id) {
- rule.metaRule = modelService.getMetaRule(rule.meta_rule_id);
- }
- if (rule.metaRule) {
- var j = 0;
- var k, id;
- rule.subjectData = [];
- rule.objectData = [];
- rule.actionData = [];
- for (k = 0; k < rule.metaRule.subject_categories.length; k++) {
- id = rule.rule[j + k];
- rule.subjectData.push(policy.subjectDataMap[id]);
- }
- j += k;
- for (k = 0; k < rule.metaRule.object_categories.length; k++) {
- id = rule.rule[j + k];
- rule.objectData.push(policy.objectDataMap[id]);
- }
- j += k;
- for (k = 0; k < rule.metaRule.action_categories.length; k++) {
- id = rule.rule[j + k];
- rule.actionData.push(policy.actionDataMap[id]);
- }
- }
- return rule;
- }
-
- return {
- initialize: loadPolicies,
- createPolicies: createPolicies,
- policies: policies,
- getPolicy: function getPolicy(id) {
- return policiesMap[id];
- },
- createPolicy: function createPolicy(policy) {
- policyResource.create(null, policy, success, util.displayErrorFunction('Unable to create Policy'));
-
- function success(data) {
- createPolicyInternal(data.policies);
- util.displaySuccess('Policy created');
- }
- },
- removePolicy: function removePolicy(policy) {
- policyResource.remove({ id: policy.id }, null, success, util.displayErrorFunction('Unable to remove Policy'));
-
- function success(data) {
- removePolicyInternal(policy.id);
- util.displaySuccess('Policy removed');
- }
- },
- updatePolicy: function updatePolicy(policy) {
- policyResource.update({ id: policy.id }, policy, success, util.displayErrorFunction('Unable to update Policy'));
-
- function success(data) {
- updatePolicyInternal(data.policies)
- util.displaySuccess('Policy updated');
- }
- },
- populatePolicy: loadPolicyRule,
- createRules: createRules,
- addRuleToPolicy: function addRuleToPolicy(policy, rule) {
- policyRulesResource.create({ policy_id: policy.id }, rule, success, util.displayErrorFunction('Unable to create Rule'));
-
- function success(data) {
- var rules = util.mapToArray(data.rules);
- for (var i = 0; i < rules.length; i++) {
- var rule = rules[i];
- policy.rules.push(populateRule(policy, rule))
- }
- util.displaySuccess('Rule created');
- updateUnusedData(policy);
- }
- },
- removeRuleFromPolicy: function removeRuleFromPolicy(policy, rule) {
- policyRulesResource.remove({ policy_id: policy.id, rule_id: rule.id }, null, success, util.displayErrorFunction('Unable to remove Rule'));
-
- function success(data) {
- removeRuleInternal(policy, rule);
- util.displaySuccess('Rule removed');
- }
- },
- createData: function createData(type, policy, category, dataCategory) {
- var categoryValue = categoryMap[type];
- return categoryValue.resource.create({ policy_id: policy.id, category_id: category.id }, dataCategory).$promise.then(
- function (data) {
- var result = util.createInternal(data[categoryValue.responseName].data, policy[categoryValue.arrayName], policy[categoryValue.mapName]);
- util.displaySuccess('Data created');
- util.pushAll(policy[categoryValue.unusedArrayName], result);
- return result;
- },
- util.displayErrorFunction('Unable to create Data')
- );
- },
- removeData: function removeData(type, policy, data) {
- var categoryValue = categoryMap[type];
- return categoryValue.resource.remove({ policy_id: policy.id, category_id: data.category_id, data_id: data.id }).$promise.then(
- function (data) {
- policy[categoryValue.arrayName].splice(policy.subjectData.indexOf(data), 1);
- policy[categoryValue.unusedArrayName].splice(policy.unusedSubjectData.indexOf(data), 1);
- delete policy[categoryValue.mapName][data.id];
- util.displaySuccess('Data removed');
- },
- util.displayErrorFunction('Unable to remove Data')
- );
- },
- createPerimeter: function createPerimeter(type, policy, perimeter) {
- var categoryValue = categoryMap[type];
- return categoryValue.policyPerimeterResource.create({ policy_id: policy.id }, perimeter).$promise.then(
- function (data) {
- util.displaySuccess('Perimeter created');
- return util.mapToArray(data[categoryValue.perimeterResponseName]);
- },
- util.displayErrorFunction('Unable to create Perimeter')
- );
- },
- removePerimeterFromPolicy: function removePerimeterFromPolicy(type, policy, perimeter) {
- var categoryValue = categoryMap[type];
-
- return categoryValue.policyPerimeterResource.remove({ policy_id: policy.id, perimeter_id: perimeter.id }, null).$promise.then(
- function (data) {
- util.displaySuccess('Perimeter removed');
- return perimeter;
- },
- util.displayErrorFunction('Unable to remove Perimeter')
- )
- },
- addPerimeterToPolicy: function addPerimeterToPolicy(type, policy, perimeter) {
- var categoryValue = categoryMap[type];
- perimeter.policy_list.push(policy.id);
-
- return categoryValue.perimeterResource.update({ perimeter_id: perimeter.id }, perimeter).$promise.then(
- function (data) {
- util.displaySuccess('Perimeter added');
- },
- util.displayErrorFunction('Unable to add Perimeter')
- )
- },
- loadPerimetersAndAssignments: function loadPerimetersAndAssignments(type, policy) {
- var categoryValue = categoryMap[type];
- var queries = {
- allPerimeters: categoryValue.perimeterResource.query().$promise,
- perimeters: categoryValue.policyPerimeterResource.query({ policy_id: policy.id }).$promise,
- assignments: categoryValue.assignmentResource.query({ policy_id: policy.id }).$promise,
- }
-
- return $q.all(queries).then(function (data) {
- var result = {};
- result.assignments = util.mapToArray(data.assignments[categoryValue.assignmentResponseName]);
- result.perimetersMap = data.perimeters[categoryValue.perimeterResponseName];
- result.perimeters = util.mapToArray(result.perimetersMap);
- result.allPerimeters = util.mapToArray(data.allPerimeters[categoryValue.perimeterResponseName]);
- return result;
- }, util.displayErrorFunction('Unable to load Perimeters'))
-
- },
- createAssignment: function createAssignment(type, policy, perimeter, data) {
- var categoryValue = categoryMap[type];
- var assignment = {
- "id": perimeter.id,
- "category_id": data.category_id,
- "data_id": data.id,
- "policy_id": policy.id
- }
- return categoryValue.assignmentResource.create({ policy_id: policy.id }, assignment).$promise.then(
- function (data) {
- util.displaySuccess('Assignment created');
- return util.mapToArray(data[categoryValue.assignmentResponseName]);
- },
- util.displayErrorFunction('Unable to create Assignment')
- )
- },
- removeAssignment: function removeAssignment(type, policy, perimeter, data) {
- var categoryValue = categoryMap[type];
-
- return categoryValue.assignmentResource.remove({ policy_id: policy.id, perimeter_id: perimeter.id, category_id: data.category_id, data_id: data.id }, null).$promise.then(
- function (data) {
- util.displaySuccess('Assignment removed');
- },
- util.displayErrorFunction('Unable to remove Assignment')
- )
- },
- }
-
- }
-})(); \ No newline at end of file
diff --git a/moon_dashboard/moon/static/moon/policy/policy.service.spec.js b/moon_dashboard/moon/static/moon/policy/policy.service.spec.js
deleted file mode 100755
index 8d0ca8bf..00000000
--- a/moon_dashboard/moon/static/moon/policy/policy.service.spec.js
+++ /dev/null
@@ -1,487 +0,0 @@
-(function () {
- 'use strict';
-
- describe('moon.policy.service', function () {
- var service, modelService, $httpBackend, URI;
- var policiesData;
- var modelsData, metaRulesData, subjectCategoriesData, objectCategoriesData, actionCategoriesData;
- var rulesData, subjectsData, objectsData, actionsData;
-
-
- function initData() {
- policiesData = {
- policies:
- {
- 'policyId1': { name: 'policy1', description: 'pDescription1', genre: 'genre1', model_id: 'modelId1' },
- }
- };
-
- modelsData = {
- models:
- { 'modelId1': { name: 'model1', description: 'mDescription1', meta_rules: ['metaRuleId1'] } }
- };
-
- subjectCategoriesData = {
- subject_categories:
- {
- 'subjectCategoryId1': { name: 'subjectCategory1', description: 'scDescription1' },
- 'subjectCategoryId2': { name: 'subjectCategory2', description: 'scDescription2' }
- },
- };
- objectCategoriesData = {
- object_categories:
- {
- 'objectCategoryId1': { name: 'objectCategory1', description: 'ocDescription1' },
- 'objectCategoryId2': { name: 'objectCategory2', description: 'ocDescription2' }
- }
- };
- actionCategoriesData = {
- action_categories:
- {
- 'actionCategoryId1': { name: 'actionCategory1', description: 'acDescription1' },
- 'actionCategoryId2': { name: 'actionCategory2', description: 'acDescription2' }
- }
- };
- metaRulesData = {
- meta_rules:
- {
- 'metaRuleId1': { name: 'metaRule1', description: 'mrDescription1', subject_categories: ['subjectCategoryId1'], object_categories: ['objectCategoryId1'], action_categories: ['actionCategoryId1'] },
- 'metaRuleId2': { name: 'metaRule2', description: 'mrDescription2', subject_categories: [], object_categories: [], action_categories: [] }
- }
- };
- }
-
- function initRuleData() {
- rulesData = {
- rules: {
- rules: [
- { meta_rule_id: 'metaRuleId1', rule: ['subjectId1', 'objectId1', 'actionId1'], id: 'ruleId1', instructions: { test: 'test' } }
- ]
- }
- };
-
- subjectsData = {
- subject_data:
- [
- {
- data: {
- 'subjectId1': { name: 'subject1', description: 'sDescription1' },
- }
- }
- ]
- };
- objectsData = {
- object_data:
- [
- {
- data: {
- 'objectId1': { name: 'object1', description: 'oDescription1' },
- }
- }
- ]
- };
- actionsData = {
- action_data:
- [
- {
- data: {
- 'actionId1': { name: 'action1', description: 'aDescription1' },
- }
- }
- ]
- };
- }
-
- beforeEach(module('horizon.app.core'));
- beforeEach(module('horizon.framework'));
- beforeEach(module('moon'));
-
- beforeEach(inject(function ($injector) {
- service = $injector.get('moon.policy.service');
- modelService = $injector.get('moon.model.service');
- $httpBackend = $injector.get('$httpBackend');
- URI = $injector.get('moon.URI');
- }));
-
- afterEach(function () {
- $httpBackend.verifyNoOutstandingExpectation();
- $httpBackend.verifyNoOutstandingRequest();
- });
-
- it('should initialize', function () {
- initData();
- $httpBackend.expectGET(URI.API + '/policies').respond(200, policiesData);
- $httpBackend.expectGET(URI.API + '/subject_categories').respond(200, subjectCategoriesData);
- $httpBackend.expectGET(URI.API + '/object_categories').respond(200, objectCategoriesData);
- $httpBackend.expectGET(URI.API + '/action_categories').respond(200, actionCategoriesData);
- $httpBackend.expectGET(URI.API + '/meta_rules').respond(200, metaRulesData);
- $httpBackend.expectGET(URI.API + '/models').respond(200, modelsData);
-
-
- service.initialize();
- $httpBackend.flush();
-
- expect(service.policies.length).toBe(1);
- var policy = service.policies[0];
- expect(policy.id).toBe('policyId1');
- expect(policy.name).toBe('policy1');
- expect(policy.description).toBe('pDescription1');
- expect(policy.genre).toBe('genre1');
- expect(policy.model.id).toBe('modelId1');
-
- });
-
-
-
- it('should create policy', function () {
- initData();
- modelService.createModels(modelsData, metaRulesData, subjectCategoriesData, objectCategoriesData, actionCategoriesData);
-
- var policyCreatedData = {
- policies:
- { 'policyId1': { name: 'policy1', description: 'pDescription1', genre: 'genre1', model_id: 'modelId1' } }
- };
-
- $httpBackend.expectPOST(URI.API + '/policies').respond(200, policyCreatedData);
-
- service.createPolicy({ name: 'policy1', description: 'pDescription1', genre: 'genre1', model: modelService.getModel('modelId1') });
- $httpBackend.flush();
-
- expect(service.policies.length).toBe(1);
- var policy = service.policies[0];
- expect(policy.id).toBe('policyId1');
- expect(policy.name).toBe('policy1');
- expect(policy.description).toBe('pDescription1');
- expect(policy.genre).toBe('genre1');
- expect(policy.model.id).toBe('modelId1');
- });
-
- it('should remove policy', function () {
- initData();
- modelService.createModels(modelsData, metaRulesData, subjectCategoriesData, objectCategoriesData, actionCategoriesData);
- service.createPolicies(policiesData);
-
- $httpBackend.expectDELETE(URI.API + '/policies/policyId1').respond(200);
-
- service.removePolicy({ id: 'policyId1' });
- $httpBackend.flush();
-
- expect(service.policies.length).toBe(0);
- });
-
- it('should update policy', function () {
- initData();
- var policyUpdatedData = {
- policies:
- { 'policyId1': { name: 'policy2', description: 'pDescription2', genre: 'genre2', model_id: 'modelId1' } }
- };
- modelService.createModels(modelsData, metaRulesData, subjectCategoriesData, objectCategoriesData, actionCategoriesData);
- service.createPolicies(policiesData);
-
- $httpBackend.expectPATCH(URI.API + '/policies/policyId1').respond(200, policyUpdatedData);
-
- service.updatePolicy({ id: 'policyId1', name: 'policy2', description: 'pDescription2', genre: 'genre2', model: modelService.getModel('modelId1') });
- $httpBackend.flush();
-
- expect(service.policies.length).toBe(1);
- var policy = service.policies[0];
- expect(policy.id).toBe('policyId1');
- expect(policy.name).toBe('policy2');
- expect(policy.description).toBe('pDescription2');
- expect(policy.genre).toBe('genre2');
- expect(policy.model.id).toBe('modelId1');
-
- });
-
-
- it('should populate policy', function () {
- initData();
- initRuleData();
- modelService.createModels(modelsData, metaRulesData, subjectCategoriesData, objectCategoriesData, actionCategoriesData);
- service.createPolicies(policiesData);
-
- var policy = service.getPolicy('policyId1')
-
- $httpBackend.expectGET(URI.API + '/policies/policyId1/rules').respond(200, rulesData);
- $httpBackend.expectGET(URI.API + '/policies/policyId1/subject_data').respond(200, subjectsData);
- $httpBackend.expectGET(URI.API + '/policies/policyId1/object_data').respond(200, objectsData);
- $httpBackend.expectGET(URI.API + '/policies/policyId1/action_data').respond(200, actionsData);
-
- service.populatePolicy(policy);
- $httpBackend.flush();
-
- expect(policy.rules.length).toBe(1);
- var rule = policy.rules[0];
- expect(rule.id).toBe('ruleId1');
- expect(rule.metaRule.id).toBe('metaRuleId1');
- expect(rule.instructions.test).toBe('test');
- expect(rule.subjectData.length).toBe(1);
- expect(rule.subjectData[0].id).toBe('subjectId1');
- expect(rule.objectData.length).toBe(1);
- expect(rule.objectData[0].id).toBe('objectId1');
- expect(rule.actionData.length).toBe(1);
- expect(rule.actionData[0].id).toBe('actionId1');
-
- expect(policy.subjectData.length).toBe(1);
- var subjectData = policy.subjectData[0];
- expect(subjectData.id).toBe('subjectId1');
- expect(subjectData.name).toBe('subject1');
- expect(subjectData.description).toBe('sDescription1');
-
- expect(policy.objectData.length).toBe(1);
- var objectData = policy.objectData[0];
- expect(objectData.id).toBe('objectId1');
- expect(objectData.name).toBe('object1');
- expect(objectData.description).toBe('oDescription1');
-
- expect(policy.actionData.length).toBe(1);
- var actionData = policy.actionData[0];
- expect(actionData.id).toBe('actionId1');
- expect(actionData.name).toBe('action1');
- expect(actionData.description).toBe('aDescription1');
-
- });
-
-
- it('should add rule to policy', function () {
- initData();
- initRuleData();
- modelService.createModels(modelsData, metaRulesData, subjectCategoriesData, objectCategoriesData, actionCategoriesData);
- service.createPolicies(policiesData);
-
-
- var ruleCreatedData = {
- rules: {
- 'ruleId1': { meta_rule_id: 'metaRuleId1', rule: ['subjectId1', 'objectId1', 'actionId1'], instructions: { test: 'test' } }
- }
- };
-
- var policy = service.getPolicy('policyId1');
-
- service.createRules(policy, null, subjectsData, objectsData, actionsData);
-
- $httpBackend.expectPOST(URI.API + '/policies/policyId1/rules').respond(200, ruleCreatedData);
-
- service.addRuleToPolicy(policy, { meta_rule_id: 'metaRuleId1', rule: ['subjectId1', 'objectId1', 'actionId1'], instructions: { test: 'test' } });
- $httpBackend.flush();
-
- expect(policy.rules.length).toBe(1);
- var rule = policy.rules[0];
- expect(rule.id).toBe('ruleId1');
- expect(rule.metaRule.id).toBe('metaRuleId1');
- expect(rule.subjectData.length).toBe(1);
- expect(rule.subjectData[0].id).toBe('subjectId1');
- expect(rule.objectData.length).toBe(1);
- expect(rule.objectData[0].id).toBe('objectId1');
- expect(rule.actionData.length).toBe(1);
- expect(rule.actionData[0].id).toBe('actionId1');
-
- });
-
- it('should remove rule from policy', function () {
- initData();
- initRuleData();
- modelService.createModels(modelsData, metaRulesData, subjectCategoriesData, objectCategoriesData, actionCategoriesData);
- service.createPolicies(policiesData);
-
- var policy = service.getPolicy('policyId1');
-
- service.createRules(policy, rulesData, subjectsData, objectsData, actionsData);
-
- $httpBackend.expectDELETE(URI.API + '/policies/policyId1/rules/ruleId1').respond(200);
-
- service.removeRuleFromPolicy(policy, { id: 'ruleId1' });
- $httpBackend.flush();
-
- expect(policy.rules.length).toBe(0);
- });
-
-
- it('should create data', function () {
- initData();
- initRuleData();
- modelService.createModels(modelsData, metaRulesData, subjectCategoriesData, objectCategoriesData, actionCategoriesData);
- service.createPolicies(policiesData);
-
-
- var dataCreatedData = {
- subject_data: {
- data: {
- 'subjectId1': { name: 'subject1', description: 'sDescription1' },
- }
- }
- };
-
- var policy = service.getPolicy('policyId1');
- policy.subjectData = [];
- policy.subjectDataMap = {};
-
- $httpBackend.expectPOST(URI.API + '/policies/policyId1/subject_data/subjectCategoryId1').respond(200, dataCreatedData);
-
- service.createData('subject', policy, modelService.getCategory('subject', 'subjectCategoryId1'), { name: 'subject1', description: 'sDescription1' });
- $httpBackend.flush();
-
- expect(policy.subjectData.length).toBe(1);
- var subjectData = policy.subjectData[0];
- expect(subjectData.id).toBe('subjectId1');
- expect(subjectData.name).toBe('subject1');
- expect(subjectData.description).toBe('sDescription1');
-
- });
-
- it('should create perimeter', function () {
- var perimeterCreatedData = {
- subjects: {
- 'subjectId1': { name: 'subject1', description: 'sDescription1' },
- }
- };
-
- $httpBackend.expectPOST(URI.API + '/policies/policyId1/subjects').respond(200, perimeterCreatedData);
- var type = 'subject';
- var policy = { id: 'policyId1' };
- var perimeter = { name: 'subject1', description: 'sDescription1' };
-
- var promise = service.createPerimeter(type, policy, perimeter);
- $httpBackend.flush();
-
- promise.then(function (result) {
- expect(result.length).toBe(1);
- var perimeter = result[0];
- expect(perimeter.id).toBe('subjectId1');
- expect(perimeter.name).toBe('subject1');
- expect(perimeter.description).toBe('sDescription1');
- })
- });
-
- it('should remove perimeter', function () {
- $httpBackend.expectDELETE(URI.API + '/policies/policyId1/subjects/subjectId1').respond(200);
- var type = 'subject';
- var policy = { id: 'policyId1' };
- var perimeter = { id: 'subjectId1' };
-
- var promise = service.removePerimeterFromPolicy(type, policy, perimeter);
- $httpBackend.flush();
-
- promise.then(function (result) {
- expect(result.id).toBe('subjectId1');
- })
- });
-
- it('should load perimeters and assignments', function () {
- var assignmentsData = {
- subject_assignments: {
- 'subjectAssignmentId1': {
- id: 'subjectAssignmentId1',
- policy_id: 'policyId1',
- subject_id: 'subjectId1',
- category_id: 'subjectCategoryId1',
- assignments: ['subjectDataId1']
- },
- }
- };
-
- var perimetersData = {
- subjects: {
- 'subjectId1': { name: 'subject1', description: 'sDescription1' },
- }
- };
-
- var allPerimetersData = {
- subjects: {
- 'subjectId1': { name: 'subject1', description: 'sDescription1' },
- 'subjectId2': { name: 'subject2', description: 'sDescription2' },
- }
- };
-
- var type = 'subject';
- var policy = { id: 'policyId1' };
- $httpBackend.expectGET(URI.API + '/subjects').respond(200, allPerimetersData);
- $httpBackend.expectGET(URI.API + '/policies/policyId1/subjects').respond(200, perimetersData);
- $httpBackend.expectGET(URI.API + '/policies/policyId1/subject_assignments').respond(200, assignmentsData);
-
- var promise = service.loadPerimetersAndAssignments(type, policy);
-
- $httpBackend.flush();
-
- promise.then(function (result) {
- expect(result.perimeters.length).toBe(1);
- var perimeter = result.perimeters[0];
- expect(perimeter.id).toBe('subjectId1');
- expect(perimeter.name).toBe('subject1');
- expect(perimeter.description).toBe('sDescription1');
-
- expect(result.allPerimeters.length).toBe(2);
- perimeter = result.allPerimeters[0];
- expect(perimeter.id).toBe('subjectId1');
- expect(perimeter.name).toBe('subject1');
- expect(perimeter.description).toBe('sDescription1');
-
- perimeter = result.allPerimeters[1];
- expect(perimeter.id).toBe('subjectId2');
- expect(perimeter.name).toBe('subject2');
- expect(perimeter.description).toBe('sDescription2');
-
-
- expect(result.assignments.length).toBe(1);
- var assignment = result.assignments[0];
- expect(assignment.id).toBe('subjectAssignmentId1');
- expect(assignment.policy_id).toBe('policyId1');
- expect(assignment.subject_id).toBe('subjectId1');
- expect(assignment.category_id).toBe('subjectCategoryId1');
- expect(assignment.assignments.length).toBe(1);
- expect(assignment.assignments[0]).toBe('subjectDataId1');
- })
-
- });
-
- it('should create assignment', function () {
- var assignmentCreatedData = {
- subject_assignments: {
- 'subjectAssignmentId1': {
- id: 'subjectAssignmentId1',
- policy_id: 'policyId1',
- subject_id: 'subjectId1',
- category_id: 'subjectCategoryId1',
- assignments: ['subjectDataId1']
- },
- }
- };
-
- var type = 'subject';
- var policy = { id: 'policyId1' };
- var perimeter = { id: 'subjectId1' };
- var data = { id: 'subjectDataId1', category_id: 'subjectCategoryId1'};
-
- $httpBackend.expectPOST(URI.API + '/policies/policyId1/subject_assignments').respond(200, assignmentCreatedData);
- var promise = service.createAssignment(type, policy, perimeter, data);
-
- $httpBackend.flush();
-
- promise.then(function (result) {
- expect(result.length).toBe(1);
- var assignment = result[0];
- expect(assignment.id).toBe('subjectAssignmentId1');
- expect(assignment.policy_id).toBe('policyId1');
- expect(assignment.subject_id).toBe('subjectId1');
- expect(assignment.category_id).toBe('subjectCategoryId1');
- expect(assignment.assignments.length).toBe(1);
- expect(assignment.assignments[0]).toBe('subjectDataId1');
- })
- });
-
- it('should remove assignment', function () {
- var type = 'subject';
- var policy = { id: 'policyId1' };
- var perimeter = { id: 'subjectId1' };
- var data = { id: 'subjectDataId1', category_id: 'subjectCategoryId1'};
-
- $httpBackend.expectDELETE(URI.API + '/policies/policyId1/subject_assignments/subjectId1/subjectCategoryId1/subjectDataId1').respond(200);
- service.removeAssignment(type, policy, perimeter, data);
- $httpBackend.flush();
- });
-
-
- });
-
-
-})(); \ No newline at end of file