aboutsummaryrefslogtreecommitdiffstats
path: root/moon_dashboard/moon/static/moon/pdp/pdp.service.js
blob: e18971be7b928d5f8e6f1fd1a5d5c30e370efd56 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
(function () {

    'use strict';

    angular
        .module('moon')
        .factory('moon.pdp.service', pdpService);

    pdpService.$inject = ['moon.util.service', '$resource', 'moon.URI', '$q', 'horizon.app.core.openstack-service-api.keystone'];

    function pdpService(util, $resource, URI, $q, keystone) {
        var host = URI.API;

        var pdpResource = $resource(host + '/pdp/' + ':id', {}, {
            get: { method: 'GET' },
            query: { method: 'GET' },
            create: { method: 'POST' },
            remove: { method: 'DELETE' },
            update: { method: 'PATCH' }
        });

        var policyResource = $resource(host + '/policies/' + ':id', {}, {
            query: { method: 'GET' },
        });

        var pdpsMap = {};
        var pdps = [];
        var policiesMap = {};
        var policies = [];
        var projectsMap = {};
        var projects = [];

        function loadPdps() {
            var queries = {
                pdps: pdpResource.query().$promise,
                policies: policyResource.query().$promise,
                projects: keystone.getProjects()
            }

            $q.all(queries).then(function (result) {
                createPdps(result.pdps, result.policies, result.projects.data)
                console.log('moon', 'pdps initialized', pdps)
            })
        }

        function createPdps(pdpsData, policiesData, projectsData) {
            pdps.splice(0, pdps.length);
            policies.splice(0, policies.length);
            projects.splice(0, projects.length);
            util.cleanObject(pdpsMap);
            util.cleanObject(policiesMap);
            util.cleanObject(projectsMap)

            util.createInternal(policiesData.policies, policies, policiesMap);
            util.pushAll(projects, projectsData.items);
            util.addToMap(projects, projectsMap);
            createPdpInternal(pdpsData.pdps);
        }

        function mapPdp(pdp) {
            util.mapIdToItem(pdp.security_pipeline, policiesMap);
            pdp.project = null;
            if (pdp.keystone_project_id) {
                pdp.project = projectsMap[pdp.keystone_project_id];
            }
        }

        function createPdpInternal(data) {
            return util.createInternal(data, pdps, pdpsMap, mapPdp);
        }

        function updatePdpInternal(data) {
            return util.updateInternal(data, pdpsMap, mapPdp);
        }

        function removePdpInternal(id) {
            return util.removeInternal(id, pdps, pdpsMap);
        }

        return {
            initialize: loadPdps,
            createPdps: createPdps,
            pdps: pdps,
            policies: policies,
            projects: projects,
            createPdp: function createPdp(pdp) {
                pdp.keystone_project_id = null;
                pdp.security_pipeline = [];
                pdpResource.create(null, pdp, success, util.displayErrorFunction('Unable to create PDP'));

                function success(data) {
                    createPdpInternal(data.pdps);
                    util.displaySuccess('PDP created');
                }
            },
            removePdp: function removePdp(pdp) {
                pdpResource.remove({ id: pdp.id }, null, success, util.displayErrorFunction('Unable to remove PDP'));

                function success(data) {
                    removePdpInternal(pdp.id);
                    util.displaySuccess('PDP removed');
                }
            },
            updatePdp: function updatePdp(pdp) {
                util.mapItemToId(pdp.security_pipeline);
                pdp.keystone_project_id = pdp.project ? pdp.project.id : null;
                pdpResource.update({ id: pdp.id }, pdp, success, util.displayErrorFunction('Unable to update PDP'));

                function success(data) {
                    updatePdpInternal(data.pdps)
                    util.displaySuccess('PDP updated');
                }
            },
            getPolicy: function getPolicy(id) {
                return policiesMap[id];
            },
            getProject: function getProject(id) {
                return projectsMap[id];
            },
        }
 
    }
})();