@plusscommunities/pluss-newsletter-aws-sharing 1.3.4 → 1.3.5

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.
@@ -0,0 +1,3 @@
1
+ const filterByAudienceType = require("@plusscommunities/pluss-core-aws/helper/audience/filterByAudienceType");
2
+
3
+ module.exports = filterByAudienceType;
@@ -5,9 +5,9 @@ const generateJsonResponse = require("./common/helper/generateJsonResponse");
5
5
  const { thisOrDefault } = require("./common/helper");
6
6
  const indexQuery = require("./common/db/common/indexQuery");
7
7
  const validateUserLoggedIn = require("./common/helper/auth/validateUserLoggedIn");
8
+ const validateMasterAuth = require("./common/helper/auth/validateMasterAuth");
8
9
  const checkUpdateSource = require("./helper/checkUpdateSource");
9
- const getMatchingAudienceTypes = require("./common/helper/audience/getMatchingAudienceTypes");
10
- const filterOnAudienceType = require("./common/helper/audience/filterOnAudienceType");
10
+ const filterByAudienceType = require("./common/helper/audience/filterByAudienceType");
11
11
  const { values } = require("./feature.config");
12
12
 
13
13
  module.exports.getFeaturedNewsletterEntries = (event, context, callback) => {
@@ -23,69 +23,64 @@ module.exports.getFeaturedNewsletterEntries = (event, context, callback) => {
23
23
  );
24
24
 
25
25
  validateUserLoggedIn(event)
26
- .then((authorised) => {
26
+ .then(async (authorised) => {
27
27
  if (!authorised) {
28
28
  return callback(
29
29
  null,
30
30
  generateJsonResponse(422, { fail: true, error: "not authorised" })
31
31
  );
32
32
  }
33
- getMatchingAudienceTypes(event.headers.authkey)
34
- .then((types) => {
35
- const query = {
36
- IndexName: "NewsletterEntriesSiteFeaturedExpiryIndex",
37
- KeyConditionExpression: "Site = :site and FeaturedExpiry > :time",
38
- FilterExpression: "IsFeatured = :featured",
39
- ExpressionAttributeValues: {
40
- ":site": site,
41
- ":time": time,
42
- ":featured": true,
43
- },
44
- };
45
- const hqQuery = _.cloneDeep(query);
46
- hqQuery.ExpressionAttributeValues[":site"] = "hq";
47
- console.log(`running query - ${JSON.stringify(query)}`);
48
33
 
49
- const promises = [];
50
- promises.push(indexQuery(values.tableNameNewsletterEntries, query));
51
- if (!params.noHQ) {
52
- promises.push(
53
- indexQuery(values.tableNameNewsletterEntries, hqQuery)
34
+ const canManage = await validateMasterAuth(event, "newsletter", site);
35
+
36
+ const query = {
37
+ IndexName: "NewsletterEntriesSiteFeaturedExpiryIndex",
38
+ KeyConditionExpression: "Site = :site and FeaturedExpiry > :time",
39
+ FilterExpression: "IsFeatured = :featured",
40
+ ExpressionAttributeValues: {
41
+ ":site": site,
42
+ ":time": time,
43
+ ":featured": true,
44
+ },
45
+ };
46
+ const hqQuery = _.cloneDeep(query);
47
+ hqQuery.ExpressionAttributeValues[":site"] = "hq";
48
+ console.log(`running query - ${JSON.stringify(query)}`);
49
+
50
+ const promises = [];
51
+ promises.push(indexQuery(values.tableNameNewsletterEntries, query));
52
+ if (!params.noHQ) {
53
+ promises.push(indexQuery(values.tableNameNewsletterEntries, hqQuery));
54
+ }
55
+ Promise.all(promises)
56
+ .then(async (responses) => {
57
+ console.log("successful query");
58
+ const result = [];
59
+ responses.forEach((data) => {
60
+ result.push.apply(result, data.Items);
61
+ });
62
+ let filteredResult = _.filter(result, (entry) => {
63
+ return (
64
+ !entry.Private && entry.UnixTimestamp < time && !entry.Deleted
65
+ );
66
+ });
67
+ if (!canManage) {
68
+ filteredResult = await filterByAudienceType(
69
+ filteredResult,
70
+ event.headers.authkey,
71
+ site
54
72
  );
55
73
  }
56
- Promise.all(promises)
57
- .then(async (responses) => {
58
- console.log("successful query");
59
- const result = [];
60
- responses.forEach((data) => {
61
- result.push.apply(result, data.Items);
62
- });
63
- const filteredResult = await filterOnAudienceType(
64
- _.filter(result, (entry) => {
65
- return (
66
- !entry.Private &&
67
- entry.UnixTimestamp < time &&
68
- !entry.Deleted
69
- );
70
- }),
71
- types,
72
- event.headers.authkey,
73
- site
74
- );
75
- const randomResults = _.shuffle(filteredResult).slice(0, count);
74
+ const randomResults = _.shuffle(filteredResult).slice(0, count);
76
75
 
77
- checkUpdateSource(randomResults);
76
+ checkUpdateSource(randomResults);
78
77
 
79
- callback(null, generateJsonResponse(200, randomResults));
80
- })
81
- .catch((error) => {
82
- console.log("query failed");
83
- console.log(error);
84
- callback(null, generateJsonResponse(422, { error }));
85
- });
78
+ callback(null, generateJsonResponse(200, randomResults));
86
79
  })
87
80
  .catch((error) => {
88
- callback(null, generateJsonResponse(422, { fail: true, error }));
81
+ console.log("query failed");
82
+ console.log(error);
83
+ callback(null, generateJsonResponse(422, { error }));
89
84
  });
90
85
  })
91
86
  .catch((error) => {
@@ -4,9 +4,9 @@ const initConfig = require("./initConfig");
4
4
  const generateJsonResponse = require("./common/helper/generateJsonResponse");
5
5
  const { thisOrDefault } = require("./common/helper");
6
6
  const validateSiteAccess = require("./common/helper/auth/validateSiteAccess");
7
+ const validateMasterAuth = require("./common/helper/auth/validateMasterAuth");
7
8
  const checkUpdateSource = require("./helper/checkUpdateSource");
8
- const getMatchingAudienceTypes = require("./common/helper/audience/getMatchingAudienceTypes");
9
- const filterOnAudienceType = require("./common/helper/audience/filterOnAudienceType");
9
+ const filterByAudienceType = require("./common/helper/audience/filterByAudienceType");
10
10
  const indexQueryRecursive = require("./common/db/common/indexQueryRecursive");
11
11
  const { values } = require("./feature.config");
12
12
 
@@ -38,84 +38,79 @@ module.exports.getNewsletterEntries = (event, context, callback) => {
38
38
  console.log(`maxTime: ${maxTime}`);
39
39
 
40
40
  validateSiteAccess(event, site)
41
- .then((authorised) => {
41
+ .then(async (authorised) => {
42
42
  if (!authorised) {
43
43
  return callback(
44
44
  null,
45
45
  generateJsonResponse(422, { fail: true, error: "not authorised" })
46
46
  );
47
47
  }
48
- getMatchingAudienceTypes(event.headers.authkey)
49
- .then((types) => {
50
- const query = {
51
- IndexName: "NewsletterEntriesSiteTimestampIndex",
52
- KeyConditionExpression:
53
- "Site = :site and UnixTimestampReverse BETWEEN :minTime and :maxTime",
54
- ExpressionAttributeValues: {
55
- ":site": site,
56
- ":minTime": minTime,
57
- ":maxTime": maxTime,
58
- },
59
- };
60
- const hqQuery = _.cloneDeep(query);
61
- hqQuery.ExpressionAttributeValues[":site"] = "hq";
62
- console.log("running query");
63
- console.log(query);
64
- const promises = [];
65
- promises.push(
66
- indexQueryRecursive(values.tableNameNewsletterEntries, query)
67
- );
68
- if (!params.noHQ) {
69
- promises.push(
70
- indexQueryRecursive(values.tableNameNewsletterEntries, hqQuery)
48
+
49
+ const canManage = await validateMasterAuth(event, "newsletter", site);
50
+
51
+ const query = {
52
+ IndexName: "NewsletterEntriesSiteTimestampIndex",
53
+ KeyConditionExpression:
54
+ "Site = :site and UnixTimestampReverse BETWEEN :minTime and :maxTime",
55
+ ExpressionAttributeValues: {
56
+ ":site": site,
57
+ ":minTime": minTime,
58
+ ":maxTime": maxTime,
59
+ },
60
+ };
61
+ const hqQuery = _.cloneDeep(query);
62
+ hqQuery.ExpressionAttributeValues[":site"] = "hq";
63
+ console.log("running query");
64
+ console.log(query);
65
+ const promises = [];
66
+ promises.push(
67
+ indexQueryRecursive(values.tableNameNewsletterEntries, query)
68
+ );
69
+ if (!params.noHQ) {
70
+ promises.push(
71
+ indexQueryRecursive(values.tableNameNewsletterEntries, hqQuery)
72
+ );
73
+ }
74
+ Promise.all(promises)
75
+ .then(async (responses) => {
76
+ console.log("successful query");
77
+ const result = [];
78
+ responses.forEach((data) => {
79
+ result.push.apply(result, data);
80
+ });
81
+ let filteredResult = params.noFilter
82
+ ? result
83
+ : _.filter(result, (entry) => !entry.Private);
84
+ if (!params.noFilter && !canManage) {
85
+ filteredResult = await filterByAudienceType(
86
+ filteredResult,
87
+ event.headers.authkey,
88
+ site
71
89
  );
72
90
  }
73
- Promise.all(promises)
74
- .then(async (responses) => {
75
- console.log("successful query");
76
- const result = [];
77
- responses.forEach((data) => {
78
- result.push.apply(result, data);
79
- });
80
- const filteredResult = params.noFilter
81
- ? result
82
- : await filterOnAudienceType(
83
- _.filter(result, (entry) => {
84
- return !entry.Private;
85
- }),
86
- types,
87
- event.headers.authkey,
88
- site
89
- );
90
- const sortedResult = _.sortBy(
91
- filteredResult,
92
- "UnixTimestampReverse"
93
- );
94
91
 
95
- checkUpdateSource(sortedResult);
92
+ const sortedResult = _.sortBy(filteredResult, "UnixTimestampReverse");
96
93
 
97
- if (count) {
98
- return callback(
99
- null,
100
- generateJsonResponse(200, {
101
- items: sortedResult.slice(skip, skip + count),
102
- skip,
103
- count,
104
- totalCount: sortedResult.length,
105
- })
106
- );
107
- }
94
+ checkUpdateSource(sortedResult);
95
+
96
+ if (count) {
97
+ return callback(
98
+ null,
99
+ generateJsonResponse(200, {
100
+ items: sortedResult.slice(skip, skip + count),
101
+ skip,
102
+ count,
103
+ totalCount: sortedResult.length,
104
+ })
105
+ );
106
+ }
108
107
 
109
- callback(null, generateJsonResponse(200, sortedResult));
110
- })
111
- .catch((error) => {
112
- console.log("query failed");
113
- console.log(error);
114
- callback(null, generateJsonResponse(422, { error }));
115
- });
108
+ callback(null, generateJsonResponse(200, sortedResult));
116
109
  })
117
110
  .catch((error) => {
118
- callback(null, generateJsonResponse(422, { fail: true, error }));
111
+ console.log("query failed");
112
+ console.log(error);
113
+ callback(null, generateJsonResponse(422, { error }));
119
114
  });
120
115
  })
121
116
  .catch((error) => {
@@ -5,9 +5,9 @@ const generateJsonResponse = require("./common/helper/generateJsonResponse");
5
5
  const { thisOrDefault } = require("./common/helper");
6
6
  const indexQuery = require("./common/db/common/indexQuery");
7
7
  const validateSiteAccess = require("./common/helper/auth/validateSiteAccess");
8
+ const validateMasterAuth = require("./common/helper/auth/validateMasterAuth");
8
9
  const checkUpdateSource = require("./helper/checkUpdateSource");
9
- const getMatchingAudienceTypes = require("./common/helper/audience/getMatchingAudienceTypes");
10
- const filterOnAudienceType = require("./common/helper/audience/filterOnAudienceType");
10
+ const filterByAudienceType = require("./common/helper/audience/filterByAudienceType");
11
11
  const { values } = require("./feature.config");
12
12
 
13
13
  module.exports.getRecentNewsletterEntries = (event, context, callback) => {
@@ -36,68 +36,65 @@ module.exports.getRecentNewsletterEntries = (event, context, callback) => {
36
36
  }
37
37
 
38
38
  validateSiteAccess(event, site)
39
- .then((authorised) => {
39
+ .then(async (authorised) => {
40
40
  if (!authorised) {
41
41
  return callback(
42
42
  null,
43
43
  generateJsonResponse(422, { fail: true, error: "not authorised" })
44
44
  );
45
45
  }
46
- getMatchingAudienceTypes(event.headers.authkey)
47
- .then((types) => {
48
- const query = {
49
- IndexName: "NewsletterEntriesSiteTimestampIndex",
50
- KeyConditionExpression:
51
- "Site = :site and UnixTimestampReverse > :maxTime",
52
- ExpressionAttributeValues: {
53
- ":site": site,
54
- ":maxTime": maxTime,
55
- },
56
- Limit: limit,
57
- };
58
- const hqQuery = _.cloneDeep(query);
59
- hqQuery.ExpressionAttributeValues[":site"] = "hq";
60
- console.log("running query");
61
- console.log(query);
62
- const promises = [];
63
- promises.push(indexQuery(values.tableNameNewsletterEntries, query));
64
- if (!params.noHQ) {
65
- promises.push(
66
- indexQuery(values.tableNameNewsletterEntries, hqQuery)
46
+
47
+ const canManage = await validateMasterAuth(event, "newsletter", site);
48
+
49
+ const query = {
50
+ IndexName: "NewsletterEntriesSiteTimestampIndex",
51
+ KeyConditionExpression:
52
+ "Site = :site and UnixTimestampReverse > :maxTime",
53
+ ExpressionAttributeValues: {
54
+ ":site": site,
55
+ ":maxTime": maxTime,
56
+ },
57
+ Limit: limit,
58
+ };
59
+ const hqQuery = _.cloneDeep(query);
60
+ hqQuery.ExpressionAttributeValues[":site"] = "hq";
61
+ console.log("running query");
62
+ console.log(query);
63
+ const promises = [];
64
+ promises.push(indexQuery(values.tableNameNewsletterEntries, query));
65
+ if (!params.noHQ) {
66
+ promises.push(indexQuery(values.tableNameNewsletterEntries, hqQuery));
67
+ }
68
+ Promise.all(promises)
69
+ .then(async (responses) => {
70
+ console.log("successful query");
71
+ const result = [];
72
+ responses.forEach((data) => {
73
+ result.push.apply(result, data.Items);
74
+ });
75
+ let filteredResult = _.filter(result, (entry) => {
76
+ return !entry.Private && (!tvMode || entry.TVMode);
77
+ });
78
+ if (!canManage) {
79
+ filteredResult = await filterByAudienceType(
80
+ filteredResult,
81
+ event.headers.authkey,
82
+ site
67
83
  );
68
84
  }
69
- Promise.all(promises)
70
- .then(async (responses) => {
71
- console.log("successful query");
72
- const result = [];
73
- responses.forEach((data) => {
74
- result.push.apply(result, data.Items);
75
- });
76
- const filteredResult = await filterOnAudienceType(
77
- _.filter(result, (entry) => {
78
- return !entry.Private && (!tvMode || entry.TVMode);
79
- }),
80
- types,
81
- event.headers.authkey,
82
- site
83
- );
84
- const sortedResult = _.take(
85
- _.sortBy(filteredResult, "UnixTimestampReverse"),
86
- limit
87
- );
85
+ const sortedResult = _.take(
86
+ _.sortBy(filteredResult, "UnixTimestampReverse"),
87
+ limit
88
+ );
88
89
 
89
- checkUpdateSource(sortedResult);
90
+ checkUpdateSource(sortedResult);
90
91
 
91
- callback(null, generateJsonResponse(200, sortedResult));
92
- })
93
- .catch((error) => {
94
- console.log("query failed");
95
- console.log(error);
96
- callback(null, generateJsonResponse(200, { error }));
97
- });
92
+ callback(null, generateJsonResponse(200, sortedResult));
98
93
  })
99
94
  .catch((error) => {
100
- callback(null, generateJsonResponse(422, { fail: true, error }));
95
+ console.log("query failed");
96
+ console.log(error);
97
+ callback(null, generateJsonResponse(200, { error }));
101
98
  });
102
99
  })
103
100
  .catch((error) => {
package/package-lock.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plusscommunities/pluss-newsletter-aws",
3
- "version": "1.3.4",
3
+ "version": "1.3.5",
4
4
  "lockfileVersion": 1,
5
5
  "requires": true,
6
6
  "dependencies": {
@@ -13,9 +13,9 @@
13
13
  }
14
14
  },
15
15
  "@plusscommunities/pluss-core-aws": {
16
- "version": "1.2.5",
17
- "resolved": "https://registry.npmjs.org/@plusscommunities/pluss-core-aws/-/pluss-core-aws-1.2.5.tgz",
18
- "integrity": "sha512-qYVluCMkSAcNDJOESBmamaTrkvBCoil/GGykep8MfntJ4jMfV5FwW1aEgstu8k9AoBJ8OcRKdtNiGItH0RzzYw==",
16
+ "version": "1.2.6",
17
+ "resolved": "https://registry.npmjs.org/@plusscommunities/pluss-core-aws/-/pluss-core-aws-1.2.6.tgz",
18
+ "integrity": "sha512-GCBa9UaJCdQ3qyDL8KwgT8f4DwG7voomKdBYUs5DpyDspQvuKt+vrlsJ2d2xrzGLNlrKxw6aL9wcWjCM+nrbBA==",
19
19
  "requires": {
20
20
  "@aws/dynamodb-auto-marshaller": "^0.7.1",
21
21
  "amazon-cognito-identity-js": "^2.0.19",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plusscommunities/pluss-newsletter-aws-sharing",
3
- "version": "1.3.4",
3
+ "version": "1.3.5",
4
4
  "description": "Extension package to enable newsletter on Pluss Communities Platform",
5
5
  "scripts": {
6
6
  "gc": "node ../../tools/gc ./",
@@ -22,7 +22,7 @@
22
22
  "license": "ISC",
23
23
  "dependencies": {
24
24
  "@aws/dynamodb-auto-marshaller": "^0.7.1",
25
- "@plusscommunities/pluss-core-aws": "^1.2.5",
25
+ "@plusscommunities/pluss-core-aws": "^1.2.6",
26
26
  "amazon-cognito-identity-js": "^2.0.19",
27
27
  "axios": "^0.18.0",
28
28
  "expo-server-sdk": "^3.0.1",