@plusscommunities/pluss-maintenance-aws 2.0.3-auth.0 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/createJob.js CHANGED
@@ -5,7 +5,7 @@ const { getBody } = require("@plusscommunities/pluss-core-aws/helper");
5
5
  const generateJsonResponse = require("@plusscommunities/pluss-core-aws/helper/generateJsonResponse");
6
6
  const addMaintenanceJob = require("./db/maintenance/addMaintenanceJob");
7
7
  const validateSiteAccess = require("@plusscommunities/pluss-core-aws/helper/auth/validateSiteAccess");
8
- const getUserPreviewFromHeader = require("@plusscommunities/pluss-core-aws/helper/getUserPreviewFromHeader");
8
+ const getUserPreviewFromReq = require("@plusscommunities/pluss-core-aws/helper/getUserPreviewFromReq");
9
9
  const publishActivity = require("@plusscommunities/pluss-core-aws/db/activity/publishActivity");
10
10
  const sendJobEmail = require("./sendJobEmail");
11
11
  const logAnalyticsActivity = require("@plusscommunities/pluss-core-aws/db/analytics/logAnalyticsActivity");
@@ -19,7 +19,7 @@ module.exports.createJob = (event, context, callback) => {
19
19
  if (!authorised) {
20
20
  return callback(
21
21
  null,
22
- generateJsonResponse(422, { fail: true, error: "not authorised" })
22
+ generateJsonResponse(403, { fail: true, error: "not authorised" })
23
23
  );
24
24
  }
25
25
  if (
@@ -28,13 +28,13 @@ module.exports.createJob = (event, context, callback) => {
28
28
  _.isUndefined(data.room) ||
29
29
  _.isUndefined(data.description)
30
30
  ) {
31
- console.error("insufficient input -- maintenance request", data.userID);
31
+ console.error("insufficient input", data.userID);
32
32
  return callback(
33
33
  null,
34
34
  generateJsonResponse(422, { error: "Insufficient input" })
35
35
  );
36
36
  }
37
- const user = await getUserPreviewFromHeader(event.headers.authkey);
37
+ const user = await getUserPreviewFromReq(event);
38
38
 
39
39
  addMaintenanceJob(
40
40
  user.id,
@@ -85,6 +85,7 @@ module.exports.createJob = (event, context, callback) => {
85
85
  null,
86
86
  generateJsonResponse(200, {
87
87
  success: true,
88
+ id,
88
89
  searchResult: id,
89
90
  })
90
91
  );
package/deleteJob.js CHANGED
@@ -5,8 +5,8 @@ const generateJsonResponse = require("@plusscommunities/pluss-core-aws/helper/ge
5
5
  const deleteRef = require("@plusscommunities/pluss-core-aws/db/common/deleteRef");
6
6
  const getRef = require("@plusscommunities/pluss-core-aws/db/common/getRef");
7
7
  const validateMasterAuth = require("@plusscommunities/pluss-core-aws/helper/auth/validateMasterAuth");
8
- const getUserPreviewFromHeader = require("@plusscommunities/pluss-core-aws/helper/getUserPreviewFromHeader");
9
8
  const publishActivity = require("@plusscommunities/pluss-core-aws/db/activity/publishActivity");
9
+ const getUserPreviewFromReq = require("@plusscommunities/pluss-core-aws/helper/getUserPreviewFromReq");
10
10
 
11
11
  module.exports.deleteJob = (event, context, callback) => {
12
12
  init(config);
@@ -25,7 +25,7 @@ module.exports.deleteJob = (event, context, callback) => {
25
25
  console.error("Authorization not valid");
26
26
  callback(
27
27
  null,
28
- generateJsonResponse(422, {
28
+ generateJsonResponse(403, {
29
29
  error: {
30
30
  message: "Authorization not valid.",
31
31
  },
@@ -47,7 +47,7 @@ module.exports.deleteJob = (event, context, callback) => {
47
47
  }
48
48
  deleteRef("maintenance", "id", data.id)
49
49
  .then(() => {
50
- getUserPreviewFromHeader(event.headers.authkey).then((user) => {
50
+ getUserPreviewFromReq(event).then((user) => {
51
51
  publishActivity("DeleteMaintenanceJob", data.site, data.id, user, {
52
52
  title: result.title,
53
53
  description: result.description,
package/editJob.js CHANGED
@@ -2,14 +2,14 @@ const _ = require("lodash");
2
2
  const config = require("./config.json");
3
3
  const { init } = require("@plusscommunities/pluss-core-aws/config");
4
4
  const { getBody } = require("@plusscommunities/pluss-core-aws/helper");
5
- const validateMasterAuth = require("@plusscommunities/pluss-core-aws/helper/auth/validateMasterAuth");
6
5
  const generateJsonResponse = require("@plusscommunities/pluss-core-aws/helper/generateJsonResponse");
7
6
  const sendJobEmail = require("./sendJobEmail");
8
7
  const getRef = require("@plusscommunities/pluss-core-aws/db/common/getRef");
9
8
  const publishActivity = require("@plusscommunities/pluss-core-aws/db/activity/publishActivity");
10
- const getUserPreviewFromHeader = require("@plusscommunities/pluss-core-aws/helper/getUserPreviewFromHeader");
11
9
  const editMaintenanceJob = require("./db/maintenance/editMaintenanceJob");
12
10
  const { getConfig } = require("@plusscommunities/pluss-core-aws/config");
11
+ const hasRequestPermission = require("./requests/helper/hasRequestPermission");
12
+ const getUserPreviewFromReq = require("@plusscommunities/pluss-core-aws/helper/getUserPreviewFromReq");
13
13
 
14
14
  module.exports.editJob = (event, context, callback) => {
15
15
  init(config);
@@ -24,55 +24,50 @@ module.exports.editJob = (event, context, callback) => {
24
24
 
25
25
  getRef("maintenance", "id", data.job.id)
26
26
  .then((prevData) => {
27
- validateMasterAuth(event, "maintenanceTracking", prevData.site).then(
28
- (authorised) => {
29
- if (!authorised) {
30
- console.error("Authorization not valid");
31
- return callback(
32
- null,
33
- generateJsonResponse(422, {
34
- error: { message: "not authorized." },
35
- })
36
- );
37
- }
38
- getUserPreviewFromHeader(event.headers.authkey).then((user) => {
39
- editMaintenanceJob(data.job)
40
- .then((result) => {
41
- if (!getConfig().maintenanceInstantComplete) {
42
- sendJobEmail(data.job, true);
43
- publishActivity(
44
- "EditMaintenanceJob",
45
- data.site,
46
- data.job.id,
47
- user,
48
- { title: result.title, description: result.description }
49
- );
50
- }
51
-
52
- return callback(
53
- null,
54
- generateJsonResponse(200, {
55
- success: true,
56
- job: result,
57
- })
58
- );
59
- })
60
- .catch((error) => {
61
- console.log(error);
62
- console.error(
63
- "Failed to edit maintenance node -->",
64
- data.job.id
65
- );
66
- return callback(
67
- null,
68
- generateJsonResponse(422, {
69
- error,
70
- })
71
- );
72
- });
73
- });
27
+ hasRequestPermission(event, prevData).then((authorised) => {
28
+ if (!authorised) {
29
+ console.error("Authorization not valid");
30
+ return callback(
31
+ null,
32
+ generateJsonResponse(422, {
33
+ error: { message: "not authorized." },
34
+ })
35
+ );
74
36
  }
75
- );
37
+ getUserPreviewFromReq(event).then((user) => {
38
+ editMaintenanceJob(data.job)
39
+ .then((result) => {
40
+ if (!getConfig().maintenanceInstantComplete) {
41
+ sendJobEmail(data.job, true);
42
+ publishActivity(
43
+ "EditMaintenanceJob",
44
+ data.site,
45
+ data.job.id,
46
+ user,
47
+ { title: result.title, description: result.description }
48
+ );
49
+ }
50
+
51
+ return callback(
52
+ null,
53
+ generateJsonResponse(200, {
54
+ success: true,
55
+ job: result,
56
+ })
57
+ );
58
+ })
59
+ .catch((error) => {
60
+ console.log(error);
61
+ console.error("Failed to edit maintenance node -->", data.job.id);
62
+ return callback(
63
+ null,
64
+ generateJsonResponse(422, {
65
+ error,
66
+ })
67
+ );
68
+ });
69
+ });
70
+ });
76
71
  })
77
72
  .catch((error) => {
78
73
  console.log("Fail on edit job authentication");
package/editJobStatus.js CHANGED
@@ -5,12 +5,12 @@ const { init } = require("@plusscommunities/pluss-core-aws/config");
5
5
  const { getBody } = require("@plusscommunities/pluss-core-aws/helper");
6
6
  const generateJsonResponse = require("@plusscommunities/pluss-core-aws/helper/generateJsonResponse");
7
7
  const getRef = require("@plusscommunities/pluss-core-aws/db/common/getRef");
8
- const validateMasterAuth = require("@plusscommunities/pluss-core-aws/helper/auth/validateMasterAuth");
9
- const getUserPreviewFromHeader = require("@plusscommunities/pluss-core-aws/helper/getUserPreviewFromHeader");
8
+ const getUserPreviewFromReq = require("@plusscommunities/pluss-core-aws/helper/getUserPreviewFromReq");
10
9
  const publishActivity = require("@plusscommunities/pluss-core-aws/db/activity/publishActivity");
11
10
  const publishNotifications = require("@plusscommunities/pluss-core-aws/db/notifications/publishNotifications");
12
11
  const editMaintenanceJob = require("./db/maintenance/editMaintenanceJob");
13
12
  const logAnalyticsActivity = require("@plusscommunities/pluss-core-aws/db/analytics/logAnalyticsActivity");
13
+ const hasRequestPermission = require("./requests/helper/hasRequestPermission");
14
14
 
15
15
  module.exports.editJobStatus = async (event, context, callback) => {
16
16
  init(config);
@@ -18,16 +18,12 @@ module.exports.editJobStatus = async (event, context, callback) => {
18
18
 
19
19
  try {
20
20
  const job = await getRef("maintenance", "id", data.id);
21
- const authorised = await validateMasterAuth(
22
- event,
23
- "maintenanceTracking",
24
- job.site || job.location
25
- );
21
+ const authorised = await hasRequestPermission(event, job);
26
22
  if (!authorised) {
27
23
  console.error("Authorization not valid");
28
24
  return callback(
29
25
  null,
30
- generateJsonResponse(422, {
26
+ generateJsonResponse(403, {
31
27
  error: {
32
28
  message: "Authorization not valid.",
33
29
  },
@@ -35,7 +31,7 @@ module.exports.editJobStatus = async (event, context, callback) => {
35
31
  );
36
32
  }
37
33
 
38
- const user = await getUserPreviewFromHeader(event.headers.authkey);
34
+ const user = await getUserPreviewFromReq(event);
39
35
 
40
36
  // Update history
41
37
  if (!job.history) job.history = [];
package/editNote.js CHANGED
@@ -4,12 +4,12 @@ const moment = require("moment");
4
4
  const config = require("./config.json");
5
5
  const { init } = require("@plusscommunities/pluss-core-aws/config");
6
6
  const { getBody } = require("@plusscommunities/pluss-core-aws/helper");
7
- const validateMasterAuth = require("@plusscommunities/pluss-core-aws/helper/auth/validateMasterAuth");
8
7
  const generateJsonResponse = require("@plusscommunities/pluss-core-aws/helper/generateJsonResponse");
9
8
  const getRef = require("@plusscommunities/pluss-core-aws/db/common/getRef");
10
9
  const updateRef = require("@plusscommunities/pluss-core-aws/db/common/updateRef");
11
10
  const publishActivity = require("@plusscommunities/pluss-core-aws/db/activity/publishActivity");
12
- const getUserPreviewFromHeader = require("@plusscommunities/pluss-core-aws/helper/getUserPreviewFromHeader");
11
+ const getUserPreviewFromReq = require("@plusscommunities/pluss-core-aws/helper/getUserPreviewFromReq");
12
+ const hasRequestPermission = require("./requests/helper/hasRequestPermission");
13
13
 
14
14
  module.exports.editNote = (event, context, callback) => {
15
15
  init(config);
@@ -51,18 +51,18 @@ module.exports.editNote = (event, context, callback) => {
51
51
  }
52
52
 
53
53
  getRef("maintenance", "id", data.id).then((job) => {
54
- validateMasterAuth(event, "maintenanceTracking", job.site)
54
+ hasRequestPermission(event, job)
55
55
  .then((authorised) => {
56
56
  if (!authorised) {
57
57
  console.error("Authorization not valid");
58
58
  return callback(
59
59
  null,
60
- generateJsonResponse(422, {
60
+ generateJsonResponse(403, {
61
61
  error: { message: "not authorized." },
62
62
  })
63
63
  );
64
64
  }
65
- getUserPreviewFromHeader(event.headers.authkey).then((user) => {
65
+ getUserPreviewFromReq(event).then((user) => {
66
66
  let activityAction = "";
67
67
  switch (data.action) {
68
68
  case "AddNote":
@@ -91,7 +91,7 @@ module.exports.editNote = (event, context, callback) => {
91
91
  if (!note) {
92
92
  return callback(
93
93
  null,
94
- generateJsonResponse(422, {
94
+ generateJsonResponse(404, {
95
95
  error: { message: "Note not found" },
96
96
  })
97
97
  );
package/feature.config.js CHANGED
@@ -1,4 +1,8 @@
1
- exports.permissions = ["maintenanceTracking", "maintenanceTypes"];
1
+ exports.permissions = [
2
+ "maintenanceTracking",
3
+ "maintenanceAssignment",
4
+ "maintenanceTypes",
5
+ ];
2
6
 
3
7
  exports.entity = {
4
8
  key: "maintenancerequest",
@@ -120,51 +124,6 @@ exports.serverless = {
120
124
  path: "requests/note",
121
125
  method: "post",
122
126
  },
123
- {
124
- name: "addTicket",
125
- file: "ticketing/addTicket",
126
- function: "addTicket",
127
- memorySize: 256,
128
- timeout: 10,
129
- path: "tickets/add",
130
- method: "post",
131
- },
132
- {
133
- name: "editTicketStatus",
134
- file: "ticketing/editTicketStatus",
135
- function: "editTicketStatus",
136
- memorySize: 256,
137
- timeout: 10,
138
- path: "tickets/status",
139
- method: "post",
140
- },
141
- {
142
- name: "deleteTicket",
143
- file: "ticketing/deleteTicket",
144
- function: "deleteTicket",
145
- memorySize: 256,
146
- timeout: 10,
147
- path: "tickets/delete",
148
- method: "post",
149
- },
150
- {
151
- name: "getTickets",
152
- file: "ticketing/getTickets",
153
- function: "getTickets",
154
- memorySize: 256,
155
- timeout: 10,
156
- path: "tickets/get",
157
- method: "get",
158
- },
159
- {
160
- name: "getTicket",
161
- file: "ticketing/getTicket",
162
- function: "getTicket",
163
- memorySize: 256,
164
- timeout: 10,
165
- path: "tickets/get/{id}",
166
- method: "get",
167
- },
168
127
  {
169
128
  name: "getData",
170
129
  file: "getData",
@@ -174,6 +133,15 @@ exports.serverless = {
174
133
  path: "get/{action}",
175
134
  method: "get",
176
135
  },
136
+ {
137
+ name: "updateData",
138
+ file: "updateData",
139
+ function: "updateData",
140
+ memorySize: 256,
141
+ timeout: 10,
142
+ path: "update/{action}",
143
+ method: "post",
144
+ },
177
145
  ],
178
146
  triggers: [
179
147
  {
package/getData.js CHANGED
@@ -1,91 +1,9 @@
1
- const indexQuery = require("@plusscommunities/pluss-core-aws/db/common/indexQuery");
2
1
  const config = require("./config.json");
3
2
  const { init } = require("@plusscommunities/pluss-core-aws/config");
4
3
  const { log } = require("@plusscommunities/pluss-core-aws/helper");
5
- const getSessionUser = require("@plusscommunities/pluss-core-aws/helper/auth/getSessionUser");
6
- const validateMasterAuth = require("@plusscommunities/pluss-core-aws/helper/auth/validateMasterAuth");
7
- const validateSiteAccess = require("@plusscommunities/pluss-core-aws/helper/auth/validateSiteAccess");
8
4
  const generateJsonResponse = require("@plusscommunities/pluss-core-aws/helper/generateJsonResponse");
9
-
10
- const getRequests = async (event) => {
11
- const qParams = event.queryStringParameters;
12
- const logId = log("getRequests", "Params", qParams);
13
-
14
- // insufficient input
15
- if (!qParams.site) {
16
- return { status: 422, data: { error: "Insufficient input" } };
17
- }
18
- log("getRequests", "SufficientInput", true, logId);
19
-
20
- // no access to site
21
- const valid = await validateSiteAccess(event, qParams.site);
22
- log("getRequests", "valid", valid, logId);
23
- if (!valid) {
24
- return { status: 403, data: { error: "Not authorised" } };
25
- }
26
-
27
- // check auth level to determine whether to fetch all requests or only matching requests
28
- const authorised = await validateMasterAuth(
29
- event,
30
- "maintenanceTracking",
31
- qParams.site
32
- );
33
- log("getRequests", "authorised", authorised, logId);
34
- const userId = authorised
35
- ? null
36
- : await getSessionUser(event.headers.authkey);
37
-
38
- log("getRequests", "userId", userId, logId);
39
-
40
- const query = userId
41
- ? {
42
- IndexName: "MaintenanceSiteUserIdIndex",
43
- KeyConditionExpression: "site = :site AND userID = :userId",
44
- ExpressionAttributeValues: {
45
- ":site": qParams.site,
46
- ":userId": userId,
47
- },
48
- }
49
- : {
50
- IndexName: "MaintenanceSiteIndex",
51
- KeyConditionExpression: "site = :site",
52
- ExpressionAttributeValues: {
53
- ":site": qParams.site,
54
- },
55
- };
56
- log("getRequests", "query", query, logId);
57
-
58
- // check whether pagination is applied
59
- if (qParams.lastKey) {
60
- try {
61
- query.ExclusiveStartKey = JSON.parse(qParams.lastKey);
62
- } catch (e) {}
63
- }
64
-
65
- // get jobs
66
- const result = await indexQuery("maintenance", query);
67
- let jobs = result.Items;
68
-
69
- log("getRequests", "LastEvaluatedKey", result.LastEvaluatedKey, logId);
70
- log("getRequests", "JobsLength", jobs.length, logId);
71
-
72
- // filter on status
73
- if (qParams.status) {
74
- jobs = jobs.filter((j) => qParams.status.includes(j.status));
75
- log("getRequests", "FilteredOnStatus", jobs.length, logId);
76
- }
77
-
78
- // filter on type
79
- if (qParams.type) {
80
- jobs = jobs.filter((j) => qParams.type.includes(j.type));
81
- log("getRequests", "FilteredOnType", jobs.length, logId);
82
- }
83
-
84
- // compile results
85
- const results = { Items: jobs, LastKey: result.LastEvaluatedKey };
86
- log("getRequests", "Done", true, logId);
87
- return { status: 200, data: results };
88
- };
5
+ const getAssignees = require("./requests/getAssignees");
6
+ const getRequests = require("./requests/getRequests");
89
7
 
90
8
  module.exports.getData = async (event, context, callback) => {
91
9
  init(config);
@@ -98,17 +16,26 @@ module.exports.getData = async (event, context, callback) => {
98
16
  switch (action) {
99
17
  case "requests":
100
18
  response = await getRequests(event);
101
- log(action, "ResponseLength", response.data.Items.length, logId);
19
+ if (response.status === 200) {
20
+ log(action, "ResponseLength", response.data.Items.length, logId);
21
+ }
22
+ break;
23
+ case "assignees":
24
+ response = await getAssignees(event);
25
+ if (response.status === 200) {
26
+ log(action, "ResponseLength", response.data.Users.length, logId);
27
+ }
102
28
  break;
103
29
  default:
104
30
  break;
105
31
  }
106
32
  } catch (err) {
107
- log(action, "InternalError", err, logId);
33
+ log(action, "InternalError", err.toString(), logId);
108
34
  if (!response) {
109
35
  response = { status: 500, data: { error: "Internal Error" } };
110
36
  }
111
37
  }
38
+ log(action, "ResponseStatus", response.status, logId);
112
39
 
113
40
  return callback(null, generateJsonResponse(response.status, response.data));
114
41
  };
package/getJob.js CHANGED
@@ -6,6 +6,7 @@ const getRef = require("@plusscommunities/pluss-core-aws/db/common/getRef");
6
6
  const indexQuery = require("@plusscommunities/pluss-core-aws/db/common/indexQuery");
7
7
  const validateMasterAuth = require("@plusscommunities/pluss-core-aws/helper/auth/validateMasterAuth");
8
8
  const getSessionUser = require("@plusscommunities/pluss-core-aws/helper/auth/getSessionUser");
9
+ const isValidAssignee = require("./requests/helper/isValidAssignee");
9
10
 
10
11
  module.exports.getJob = async (event, context, callback) => {
11
12
  init(config);
@@ -43,22 +44,27 @@ module.exports.getJob = async (event, context, callback) => {
43
44
  "maintenanceTracking",
44
45
  result.site
45
46
  );
46
- if (!authorised) {
47
+ const assignAuthorised = await isValidAssignee(
48
+ event,
49
+ result.site,
50
+ result.AssigneeId
51
+ );
52
+ if (!authorised && !assignAuthorised) {
47
53
  // Check if the job belongs to the user
48
54
  const userId = await getSessionUser(event.headers.authkey);
49
55
  if (userId !== result.userID) {
50
56
  console.error("Authorization not valid");
51
57
  return callback(
52
58
  null,
53
- generateJsonResponse(422, {
54
- error: { message: "not authorized." },
59
+ generateJsonResponse(403, {
60
+ error: { message: "not authorised." },
55
61
  })
56
62
  );
57
63
  }
58
64
  }
59
65
  return callback(null, generateJsonResponse(200, result));
60
66
  } catch (error) {
61
- callback(null, generateJsonResponse(422, { fail: true, error }));
67
+ callback(null, generateJsonResponse(422, { fail: true }));
62
68
  }
63
69
  } catch (error1) {
64
70
  return callback(