conjur-asset-ui 1.4.2 → 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (211) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +8 -3
  3. data/CHANGELOG.md +10 -0
  4. data/Makefile +19 -0
  5. data/README.md +0 -3
  6. data/Rakefile +22 -17
  7. data/TODO.md +0 -23
  8. data/app/.csscomb.json +304 -0
  9. data/app/.eslintignore +3 -0
  10. data/app/.eslintrc +265 -0
  11. data/app/config/preprocessor.js +19 -0
  12. data/app/config/webpack.js +124 -0
  13. data/app/gulpfile.js +96 -0
  14. data/app/package.json +86 -0
  15. data/app/src/actions.js +550 -0
  16. data/app/src/app.js +83 -0
  17. data/app/src/clients/audit.js +34 -0
  18. data/app/src/clients/auth.js +24 -0
  19. data/app/src/clients/generic.js +52 -0
  20. data/app/src/clients/graph.js +7 -0
  21. data/app/src/clients/layer_members.js +18 -0
  22. data/app/src/clients/list.js +31 -0
  23. data/app/src/clients/members.js +20 -0
  24. data/app/src/clients/request.js +531 -0
  25. data/app/src/clients/search.js +5 -0
  26. data/app/src/components/app/__tests__/app-test.js +22 -0
  27. data/app/src/components/app/app.js +36 -0
  28. data/app/src/components/app/wrapper.js +17 -0
  29. data/app/src/components/audit/__tests__/table_header-test.js +22 -0
  30. data/app/src/components/audit/box.js +9 -0
  31. data/app/src/components/audit/constants.js +5 -0
  32. data/app/src/components/audit/entry.js +105 -0
  33. data/app/src/components/audit/fields_mixin.js +11 -0
  34. data/app/src/components/audit/humanize_event.js +213 -0
  35. data/app/src/components/audit/table.js +64 -0
  36. data/app/src/components/audit/table_header.js +37 -0
  37. data/app/src/components/audit/timestamp.js +28 -0
  38. data/app/src/components/auth/login.js +177 -0
  39. data/app/src/components/auth/login.less +71 -0
  40. data/app/src/components/auth/logout.js +42 -0
  41. data/app/src/components/auth/logout.less +21 -0
  42. data/app/src/components/chart/chart.js +540 -0
  43. data/app/src/components/chart/chart_helper_mixin.js +78 -0
  44. data/app/src/components/custom/list.js +3 -0
  45. data/app/src/components/custom/view.js +81 -0
  46. data/app/src/components/dashboard/activity.js +144 -0
  47. data/app/src/components/dashboard/dashboard.js +46 -0
  48. data/app/src/components/flash/flash.js +98 -0
  49. data/app/src/components/flash/flash.less +3 -0
  50. data/app/src/components/generic/__tests__/time-test.js +42 -0
  51. data/app/src/components/generic/annotations.js +39 -0
  52. data/app/src/components/generic/breadcrumbs.js +57 -0
  53. data/app/src/components/generic/foldable_audit_section.js +204 -0
  54. data/app/src/components/generic/list.js +141 -0
  55. data/app/src/components/generic/list_factory.js +41 -0
  56. data/app/src/components/generic/resource_link.js +64 -0
  57. data/app/src/components/generic/role_link.js +66 -0
  58. data/app/src/components/generic/tab_mixin.js +146 -0
  59. data/app/src/components/generic/time.js +32 -0
  60. data/app/src/components/graph/__tests__/collapse-test.js +133 -0
  61. data/app/src/components/graph/__tests__/edges-from-vertices-test.js +48 -0
  62. data/app/src/components/graph/__tests__/new-vertex-set-test.js +16 -0
  63. data/app/src/components/graph/__tests__/next-id-test.js +27 -0
  64. data/app/src/components/graph/__tests__/role-kind-from-id-test.js +24 -0
  65. data/app/src/components/graph/__tests__/vertices-from-edges-test.js +72 -0
  66. data/app/src/components/graph/graph.js +449 -0
  67. data/app/src/components/graph/graph.less +39 -0
  68. data/app/src/components/graph/helpers.js +368 -0
  69. data/app/src/components/group/list.js +3 -0
  70. data/app/src/components/group/view.js +153 -0
  71. data/app/src/components/host/activity.js +111 -0
  72. data/app/src/components/host/details.js +28 -0
  73. data/app/src/components/host/executors.js +77 -0
  74. data/app/src/components/host/host_link.js +18 -0
  75. data/app/src/components/host/list.js +3 -0
  76. data/app/src/components/host/updaters.js +77 -0
  77. data/app/src/components/host/view.js +145 -0
  78. data/app/src/components/layer/list.js +3 -0
  79. data/app/src/components/layer/view.js +197 -0
  80. data/app/src/components/navbar/__tests__/navbar-test.js +21 -0
  81. data/app/src/components/navbar/nav_search_form.js +40 -0
  82. data/app/src/components/navbar/navbar.js +96 -0
  83. data/app/src/components/notfound/notfound.js +35 -0
  84. data/app/src/components/notfound/notfound.less +21 -0
  85. data/app/src/components/owned_resources/owned_resources.js +84 -0
  86. data/app/src/components/owned_resources/owned_resources_box.js +101 -0
  87. data/app/src/components/permissions/permissions.js +138 -0
  88. data/app/src/components/permissions/permissions_table.js +101 -0
  89. data/app/src/components/policy/list.js +3 -0
  90. data/app/src/components/policy/view.js +107 -0
  91. data/app/src/components/refresh/refresh.js +29 -0
  92. data/app/src/components/refresh/refresh.less +15 -0
  93. data/app/src/components/search/group.js +43 -0
  94. data/app/src/components/search/group_heading.js +50 -0
  95. data/app/src/components/search/group_title.js +37 -0
  96. data/app/src/components/search/result_item.js +55 -0
  97. data/app/src/components/search/search.js +118 -0
  98. data/app/src/components/user/activity.js +112 -0
  99. data/app/src/components/user/details.js +30 -0
  100. data/app/src/components/user/list.js +3 -0
  101. data/app/src/components/user/pubkeys.js +118 -0
  102. data/app/src/components/user/pubkeys.less +56 -0
  103. data/app/src/components/user/view.js +143 -0
  104. data/app/src/components/variable/activity.js +101 -0
  105. data/app/src/components/variable/details.js +46 -0
  106. data/app/src/components/variable/fetchers.js +77 -0
  107. data/app/src/components/variable/list.js +3 -0
  108. data/app/src/components/variable/updaters.js +77 -0
  109. data/app/src/components/variable/view.js +115 -0
  110. data/app/src/constants.js +36 -0
  111. data/{public → app/src}/images/conjur-logo.svg +0 -0
  112. data/{public → app/src}/images/icon-client-pc.svg +0 -0
  113. data/{public → app/src}/images/icon-environment.png +0 -0
  114. data/{public → app/src}/images/icon-person.svg +0 -0
  115. data/{public → app/src}/images/icon-policy.png +0 -0
  116. data/{public → app/src}/images/icon-resource.png +0 -0
  117. data/{public → app/src}/images/icon-service-dots.svg +0 -0
  118. data/{public → app/src}/images/icon-variable.png +0 -0
  119. data/app/src/pages/index.html +27 -0
  120. data/app/src/routes.js +64 -0
  121. data/app/src/stores/app_store.js +35 -0
  122. data/app/src/stores/audit_store.js +143 -0
  123. data/app/src/stores/graph_store.js +51 -0
  124. data/app/src/stores/group_store.js +104 -0
  125. data/app/src/stores/host_store.js +111 -0
  126. data/app/src/stores/layer_store.js +115 -0
  127. data/app/src/stores/policy_store.js +88 -0
  128. data/app/src/stores/resources_store.js +115 -0
  129. data/app/src/stores/route_store.js +21 -0
  130. data/app/src/stores/search_store.js +77 -0
  131. data/app/src/stores/user_store.js +109 -0
  132. data/app/src/stores/variable_store.js +93 -0
  133. data/app/src/styles/bootstrap.less +54 -0
  134. data/{public/css → app/src/styles}/styles.less +26 -82
  135. data/app/src/utils.js +38 -0
  136. data/app/src/vendor/pace.js +2 -0
  137. data/conjur-asset-ui.gemspec +3 -4
  138. data/docker/assets-build/Dockerfile +12 -0
  139. data/docker/conjur-ui/Dockerfile +33 -0
  140. data/docker/conjur-ui/README.md +38 -0
  141. data/docker/conjur-ui/mime.types +90 -0
  142. data/docker/conjur-ui/nginx.conf +110 -0
  143. data/docker/conjur-ui/start.py +72 -0
  144. data/docker/conjur-ui/start.sh +18 -0
  145. data/docker/conjur-ui/test.env +8 -0
  146. data/lib/conjur-asset-ui-version.rb +1 -1
  147. data/lib/conjur/command/ui.rb +10 -2
  148. data/lib/conjur/webserver/home.rb +3 -3
  149. data/lib/conjur/webserver/login.rb +1 -1
  150. data/lib/conjur/webserver/server.rb +16 -4
  151. data/public/js/views/roleGraph.js +91 -0
  152. metadata +167 -105
  153. data/.jshintrc +0 -41
  154. data/bower.json +0 -98
  155. data/gulpfile.js +0 -139
  156. data/package.json +0 -47
  157. data/preprocessor.js +0 -7
  158. data/public/_client_libs.html +0 -9
  159. data/public/index.html.erb +0 -63
  160. data/public/js/init.js +0 -196
  161. data/public/js/lib/pace.js +0 -2
  162. data/public/js/lib/sorted-set.no-require.js +0 -1145
  163. data/public/js/lib/sorted-set.no-require.js.txt +0 -6
  164. data/public/js/models/groupRecord.js +0 -72
  165. data/public/js/models/hostRecord.js +0 -60
  166. data/public/js/models/layerRecord.js +0 -79
  167. data/public/js/models/namespace.js +0 -12
  168. data/public/js/models/policyList.js +0 -16
  169. data/public/js/models/policyRecord.js +0 -54
  170. data/public/js/models/record.js +0 -117
  171. data/public/js/models/resourceList.js +0 -87
  172. data/public/js/models/userList.js +0 -25
  173. data/public/js/models/userRecord.js +0 -75
  174. data/public/js/models/variableList.js +0 -27
  175. data/public/js/models/variableRecord.js +0 -77
  176. data/public/js/routers.js +0 -242
  177. data/public/js/views/annotations.js +0 -47
  178. data/public/js/views/audit.js +0 -369
  179. data/public/js/views/breadcrumbs.js +0 -62
  180. data/public/js/views/chart.js +0 -617
  181. data/public/js/views/dashboard.js +0 -146
  182. data/public/js/views/generic.js +0 -122
  183. data/public/js/views/group.js +0 -109
  184. data/public/js/views/groups.js +0 -26
  185. data/public/js/views/host.js +0 -200
  186. data/public/js/views/hosts.js +0 -26
  187. data/public/js/views/layer.js +0 -146
  188. data/public/js/views/layers.js +0 -26
  189. data/public/js/views/mixins/search.js +0 -22
  190. data/public/js/views/mixins/tabs.js +0 -154
  191. data/public/js/views/namespaces.js +0 -40
  192. data/public/js/views/navSearch.js +0 -36
  193. data/public/js/views/owned.js +0 -184
  194. data/public/js/views/permissions.js +0 -254
  195. data/public/js/views/policies.js +0 -26
  196. data/public/js/views/policy.js +0 -70
  197. data/public/js/views/resource.js +0 -59
  198. data/public/js/views/role.js +0 -63
  199. data/public/js/views/searchResults.js +0 -212
  200. data/public/js/views/sections.js +0 -226
  201. data/public/js/views/time.js +0 -39
  202. data/public/js/views/user.js +0 -297
  203. data/public/js/views/users.js +0 -26
  204. data/public/js/views/variable.js +0 -310
  205. data/public/js/views/variables.js +0 -26
  206. data/spec/javascripts/helpers/.gitkeep +0 -0
  207. data/spec/javascripts/support/jasmine.yml +0 -112
  208. data/spec/javascripts/support/jasmine_helper.rb +0 -22
  209. data/spec/javascripts/support/run.html.erb +0 -23
  210. data/spec/javascripts/views/AuditSpec.js +0 -22
  211. data/spec/javascripts/views/AuditSpec.ls +0 -18
@@ -0,0 +1,88 @@
1
+ import {createStore} from 'fluxxor';
2
+ import {POLICY as constants} from '../constants';
3
+
4
+ var fieldMapping = {
5
+ OWNED_RESOURCES: 'owned',
6
+ ALL_ROLES: 'roles',
7
+ RESOURCES: 'resources'
8
+ };
9
+
10
+ export default createStore({
11
+ initialize() {
12
+ this.data = this._fresh();
13
+
14
+ this.bindActions(
15
+ constants.LOAD, this.onLoad,
16
+ constants.LOAD_SUCCESS, this.onLoadSuccess,
17
+ constants.LOAD_FAIL, this.onLoadFail
18
+ );
19
+ },
20
+
21
+ _fresh() {
22
+ return {
23
+ loading: {
24
+ owned: true,
25
+ role: true,
26
+ resources: true
27
+ }
28
+ };
29
+ },
30
+
31
+ onLoad(payload) {
32
+ if (typeof payload.type === 'undefined') {
33
+ this.data = this._fresh();
34
+ this.data.identifier = payload.id;
35
+ this.emit('change');
36
+ } else if (payload.id === this.data.identifier) {
37
+ this.turn(payload.type, true);
38
+ this.emit('change');
39
+ }
40
+ },
41
+
42
+ onLoadSuccess(payload) {
43
+ if (payload.id === this.data.identifier) {
44
+ this.turn(payload.type, false);
45
+
46
+ this.setData(payload);
47
+ this.emit('change');
48
+ }
49
+ },
50
+
51
+ onLoadFail(payload) {
52
+ this.turn(payload.type, false);
53
+ },
54
+
55
+ turn(type, state) {
56
+ var fields = fieldMapping[type];
57
+
58
+ if (typeof fields === 'object') {
59
+ fields.forEach((field) => {
60
+ this.data.loading[field] = state;
61
+ });
62
+ } else {
63
+ this.data.loading[fields] = state;
64
+ }
65
+ },
66
+
67
+ setData(payload) {
68
+ switch (payload.type) {
69
+ case 'OWNED_RESOURCES':
70
+ this.data.owned = payload.res.body;
71
+ break;
72
+
73
+ case 'ALL_ROLES':
74
+ this.data.roles = payload.res.body;
75
+ break;
76
+
77
+ case 'RESOURCES':
78
+ this.data.resources = payload.res.body;
79
+ break;
80
+
81
+ default:
82
+ }
83
+ },
84
+
85
+ getData() {
86
+ return this.data;
87
+ }
88
+ });
@@ -0,0 +1,115 @@
1
+ import {createStore} from 'fluxxor';
2
+ import _ from 'lodash';
3
+ import c from '../constants';
4
+
5
+ export default createStore({
6
+ initialize() {
7
+ this.error = false;
8
+ this.loading = false;
9
+ this.resources = {};
10
+
11
+ this.bindActions(
12
+ c.RESOURCE.LOAD, this.onLoad,
13
+ c.RESOURCE.LOAD_SUCCESS, this.onLoadSuccessOne,
14
+ c.RESOURCE.LOAD_FAIL, this.onLoadFail,
15
+ c.RESOURCES.LOAD, this.onLoad,
16
+ c.RESOURCES.LOAD_SUCCESS, this.onLoadSuccess,
17
+ c.RESOURCES.LOAD_FAIL, this.onLoadFail
18
+ );
19
+ },
20
+
21
+ onLoad() {
22
+ this.error = false;
23
+ this.loading = true;
24
+ this.emit('change');
25
+ },
26
+
27
+ _parse(resource) {
28
+ var tokens = resource.id.split(':');
29
+
30
+ return {
31
+ id: resource.id,
32
+ kind: tokens[1],
33
+ identifier: tokens[tokens.length-1],
34
+ owner: resource.owner,
35
+ annotations: resource.annotations || [],
36
+ permission: resource.permission || []
37
+ };
38
+ },
39
+
40
+ onLoadSuccessOne(payload) {
41
+ var res = this._parse(payload.res.body),
42
+ i;
43
+
44
+ this.error = false;
45
+ this.loading = false;
46
+
47
+ if (!_.isArray(this.resources[res.kind])) {
48
+ this.resources[res.kind] = [];
49
+ }
50
+
51
+ i = _.findIndex(this.resources[res.kind], 'id', res.id);
52
+
53
+ if (i > -1) {
54
+ this.resources[res.kind][i] = res;
55
+ } else {
56
+ this.resources[res.kind].push(res);
57
+ }
58
+
59
+ this.emit('change');
60
+ },
61
+
62
+ onLoadSuccess(payload) {
63
+ var res = _.map(payload.res.body, (resource) => {
64
+ return this._parse(resource);
65
+ });
66
+
67
+ this.error = false;
68
+ this.loading = false;
69
+
70
+ res = _.groupBy(res, 'kind');
71
+
72
+ _.forIn(res, (value, key) => {
73
+ this.resources[key] = value;
74
+ });
75
+
76
+ this.emit('change');
77
+ },
78
+
79
+ onLoadFail() {
80
+ this.error = true;
81
+ this.loading = false;
82
+ },
83
+
84
+ getResources(kind) {
85
+ if (kind === 'custom-type') {
86
+ return this.getCustomResources();
87
+ } else {
88
+ return {
89
+ loading: this.loading,
90
+ error: this.error,
91
+ data: this.resources[kind] || []
92
+ };
93
+ }
94
+ },
95
+
96
+ getCustomResources() {
97
+ var knownTypes = ['user', 'group', 'host', 'layer', 'variable', 'policy'],
98
+ customTypes = _.difference(_.keys(this.resources), knownTypes),
99
+ resources = _.flatten(_.map(customTypes, _.propertyOf(this.resources)));
100
+
101
+ return {
102
+ loading: this.loading,
103
+ error: this.error,
104
+ data: resources || []
105
+ };
106
+ },
107
+
108
+ getResource(kind, id) {
109
+ return {
110
+ loading: this.loading,
111
+ error: this.error,
112
+ data: _.find(this.resources[kind], 'identifier', id) || {}
113
+ };
114
+ }
115
+ });
@@ -0,0 +1,21 @@
1
+ import {createStore} from 'fluxxor';
2
+ import constants from '../constants';
3
+
4
+ export default createStore({
5
+ initialize() {
6
+ this.params = {};
7
+
8
+ this.bindActions(
9
+ constants.ROUTES.TRANSITION, this.handleRouteTransition
10
+ );
11
+ },
12
+
13
+ handleRouteTransition(payload) {
14
+ this.params = payload.params;
15
+ this.emit('change');
16
+ },
17
+
18
+ getParam(param) {
19
+ return window.unescape(this.params[param]);
20
+ }
21
+ });
@@ -0,0 +1,77 @@
1
+ import {createStore} from 'fluxxor';
2
+ import {SEARCH as constants} from '../constants';
3
+
4
+ var fieldMapping = {
5
+ SEARCH_RESULT: 'results'
6
+ };
7
+
8
+ export default createStore({
9
+ initialize() {
10
+ this.data = this._fresh();
11
+
12
+ this.bindActions(
13
+ constants.LOAD, this.onLoad,
14
+ constants.LOAD_SUCCESS, this.onLoadSuccess,
15
+ constants.LOAD_FAIL, this.onLoadFail
16
+ );
17
+ },
18
+
19
+ _fresh() {
20
+ return {
21
+ results: [],
22
+ loading: {
23
+ results: true
24
+ }
25
+ };
26
+ },
27
+
28
+ onLoad(payload) {
29
+ if (typeof payload.type === 'undefined') {
30
+ this.data = this._fresh();
31
+ this.data.identifier = payload.id;
32
+ this.emit('change');
33
+ } else if (payload.id === this.data.identifier) {
34
+ this.turn(payload.type, true);
35
+ this.emit('change');
36
+ }
37
+ },
38
+
39
+ onLoadSuccess(payload) {
40
+ if (payload.id === this.data.identifier) {
41
+ this.turn(payload.type, false);
42
+
43
+ this.setData(payload);
44
+ this.emit('change');
45
+ }
46
+ },
47
+
48
+ onLoadFail(payload) {
49
+ this.turn(payload.type, false);
50
+ },
51
+
52
+ turn(type, state) {
53
+ var fields = fieldMapping[type];
54
+
55
+ if (typeof fields === 'object') {
56
+ fields.forEach((field) => {
57
+ this.data.loading[field] = state;
58
+ });
59
+ } else {
60
+ this.data.loading[fields] = state;
61
+ }
62
+ },
63
+
64
+ setData(payload) {
65
+ switch (payload.type) {
66
+ case 'SEARCH_RESULT':
67
+ this.data.results = payload.res.body;
68
+ break;
69
+
70
+ default:
71
+ }
72
+ },
73
+
74
+ getData() {
75
+ return this.data;
76
+ }
77
+ });
@@ -0,0 +1,109 @@
1
+ import {createStore} from 'fluxxor';
2
+ import {c as generic} from '../clients/generic';
3
+ import {USER as constants} from '../constants';
4
+
5
+ var fieldMapping = {
6
+ ATTRIBUTES: 'user',
7
+ OWNED_RESOURCES: 'owned',
8
+ ALL_ROLES: 'roles',
9
+ PUBLIC_KEYS: 'pubkeys',
10
+ RESOURCES: 'resources'
11
+ };
12
+
13
+ export default createStore({
14
+ initialize() {
15
+ this.data = this._fresh();
16
+
17
+ this.bindActions(
18
+ constants.LOAD, this.onLoad,
19
+ constants.LOAD_SUCCESS, this.onLoadSuccess,
20
+ constants.LOAD_FAIL, this.onLoadFail
21
+ );
22
+ },
23
+
24
+ _fresh() {
25
+ return {
26
+ userId: null,
27
+ user: {
28
+ login: '',
29
+ roleId: ''
30
+ },
31
+ pubkeys: [],
32
+ loading: {
33
+ user: true,
34
+ owned: true,
35
+ roles: true,
36
+ pubkeys: true,
37
+ resources: true
38
+ }
39
+ };
40
+ },
41
+
42
+ onLoad(payload) {
43
+ if (typeof payload.type === 'undefined') {
44
+ this.data = this._fresh();
45
+ this.data.identifier = payload.id;
46
+ this.emit('change');
47
+ } else if (payload.id === this.data.identifier) {
48
+ this.turn(payload.type, true);
49
+ this.emit('change');
50
+ }
51
+ },
52
+
53
+ onLoadSuccess(payload) {
54
+ if (payload.id === this.data.identifier) {
55
+ this.turn(payload.type, false);
56
+
57
+ this.setData(payload);
58
+ this.emit('change');
59
+ }
60
+ },
61
+
62
+ onLoadFail(payload) {
63
+ this.turn(payload.type, false);
64
+ },
65
+
66
+ turn(type, state) {
67
+ var fields = fieldMapping[type];
68
+
69
+ if (typeof fields === 'object') {
70
+ fields.forEach((field) => {
71
+ this.data.loading[field] = state;
72
+ });
73
+ } else {
74
+ this.data.loading[fields] = state;
75
+ }
76
+ },
77
+
78
+ setData(payload) {
79
+ switch (payload.type) {
80
+ case generic.ATTRIBUTES:
81
+ this.data.user = payload.res.body;
82
+ break;
83
+
84
+ case generic.OWNED_RESOURCES:
85
+ this.data.owned = payload.res.body;
86
+ break;
87
+
88
+ case generic.ALL_ROLES:
89
+ this.data.roles = payload.res.body;
90
+ break;
91
+
92
+ case generic.PUBLIC_KEYS:
93
+ this.data.pubkeys = payload.res.text.split('\n').filter(function(d) {
94
+ return d.trim().length > 0;
95
+ });
96
+ break;
97
+
98
+ case 'RESOURCES':
99
+ this.data.resources = payload.res.body;
100
+ break;
101
+
102
+ default:
103
+ }
104
+ },
105
+
106
+ getData() {
107
+ return this.data;
108
+ }
109
+ });
@@ -0,0 +1,93 @@
1
+ import {createStore} from 'fluxxor';
2
+ import {c as generic} from '../clients/generic';
3
+ import {c as members} from '../clients/members';
4
+ import {VARIABLE as constants} from '../constants';
5
+
6
+ var fieldMapping = {
7
+ ATTRIBUTES: 'variable',
8
+ MEMBERS_EXECUTE: 'fetchers',
9
+ MEMBERS_UPDATE: 'updaters'
10
+ };
11
+
12
+ export default createStore({
13
+ initialize() {
14
+ this.data = this._fresh();
15
+
16
+ this.bindActions(
17
+ constants.LOAD, this.onLoad,
18
+ constants.LOAD_SUCCESS, this.onLoadSuccess,
19
+ constants.LOAD_FAIL, this.onLoadFail
20
+ );
21
+ },
22
+
23
+ _fresh() {
24
+ return {
25
+ variable: {
26
+ userid: ''
27
+ },
28
+ loading: {
29
+ variable: true,
30
+ fetchers: true,
31
+ updaters: true
32
+ }
33
+ };
34
+ },
35
+
36
+ onLoad(payload) {
37
+ if (typeof payload.type === 'undefined') {
38
+ this.data = this._fresh();
39
+ this.data.identifier = payload.id;
40
+ this.emit('change');
41
+ } else if (payload.id === this.data.identifier) {
42
+ this.turn(payload.type, true);
43
+ this.emit('change');
44
+ }
45
+ },
46
+
47
+ onLoadSuccess(payload) {
48
+ if (payload.id === this.data.identifier) {
49
+ this.turn(payload.type, false);
50
+
51
+ this.setData(payload);
52
+ this.emit('change');
53
+ }
54
+ },
55
+
56
+ onLoadFail(payload) {
57
+ this.turn(payload.type, false);
58
+ },
59
+
60
+ turn(type, state) {
61
+ var fields = fieldMapping[type];
62
+
63
+ if (typeof fields === 'object') {
64
+ fields.forEach((field) => {
65
+ this.data.loading[field] = state;
66
+ });
67
+ } else {
68
+ this.data.loading[fields] = state;
69
+ }
70
+ },
71
+
72
+ setData(payload) {
73
+ switch (payload.type) {
74
+ case generic.ATTRIBUTES:
75
+ this.data.variable = payload.res.body;
76
+ break;
77
+
78
+ case members.MEMBERS_EXECUTE:
79
+ this.data.fetchers = payload.res.body;
80
+ break;
81
+
82
+ case members.MEMBERS_UPDATE:
83
+ this.data.updaters = payload.res.body;
84
+ break;
85
+
86
+ default:
87
+ }
88
+ },
89
+
90
+ getData() {
91
+ return this.data;
92
+ }
93
+ });