strapi-plugin-comments 2.0.10 → 2.1.0
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/README.md +204 -124
- package/admin/src/components/ActionButton/styles.d.ts +2 -0
- package/admin/src/components/ActionButton/styles.js +13 -8
- package/admin/src/components/Avatar/index.d.ts +12 -0
- package/admin/src/components/Avatar/index.js +26 -0
- package/admin/src/components/ConfirmationDialog/index.d.ts +26 -0
- package/admin/src/components/ConfirmationDialog/index.js +36 -55
- package/admin/src/components/DiscussionStatus/index.d.ts +9 -0
- package/admin/src/components/DiscussionStatus/index.js +22 -31
- package/admin/src/components/DiscussionThread/index.d.ts +16 -0
- package/admin/src/components/DiscussionThread/index.js +39 -56
- package/admin/src/components/DiscussionThreadItem/index.d.ts +9 -0
- package/admin/src/components/DiscussionThreadItem/index.js +28 -52
- package/admin/src/components/DiscussionThreadItem/styles.d.ts +4 -0
- package/admin/src/components/DiscussionThreadItem/styles.js +16 -11
- package/admin/src/components/DiscussionThreadItemActions/index.d.ts +19 -0
- package/admin/src/components/DiscussionThreadItemActions/index.js +121 -158
- package/admin/src/components/DiscussionThreadItemActions/styles.d.ts +2 -0
- package/admin/src/components/DiscussionThreadItemActions/styles.js +13 -7
- package/admin/src/components/DiscussionThreadItemApprovalFlowActions/index.d.ts +17 -0
- package/admin/src/components/DiscussionThreadItemApprovalFlowActions/index.js +38 -48
- package/admin/src/components/DiscussionThreadItemApprovalFlowActions/styles.d.ts +2 -0
- package/admin/src/components/DiscussionThreadItemApprovalFlowActions/styles.js +12 -6
- package/admin/src/components/DiscussionThreadItemFooter/index.d.ts +16 -0
- package/admin/src/components/DiscussionThreadItemFooter/index.js +34 -42
- package/admin/src/components/DiscussionThreadItemFooter/styles.d.ts +3 -0
- package/admin/src/components/DiscussionThreadItemFooter/styles.js +17 -12
- package/admin/src/components/DiscussionThreadItemReviewAction/index.d.ts +30 -0
- package/admin/src/components/DiscussionThreadItemReviewAction/index.js +77 -91
- package/admin/src/components/FormSwitch/index.d.ts +7 -0
- package/admin/src/components/FormSwitch/index.js +15 -18
- package/admin/src/components/FormSwitch/styles.d.ts +2 -0
- package/admin/src/components/FormSwitch/styles.js +14 -8
- package/admin/src/components/IconButton/styles.d.ts +2 -0
- package/admin/src/components/IconButton/styles.js +16 -9
- package/admin/src/components/Initializer/index.d.ts +5 -0
- package/admin/src/components/Initializer/index.js +12 -24
- package/admin/src/components/LoadingIndicatorOverlay/index.d.ts +3 -0
- package/admin/src/components/LoadingIndicatorOverlay/index.js +12 -15
- package/admin/src/components/LoadingIndicatorOverlay/styles.d.ts +3 -0
- package/admin/src/components/LoadingIndicatorOverlay/styles.js +22 -17
- package/admin/src/components/Nav/index.d.ts +7 -0
- package/admin/src/components/Nav/index.js +25 -48
- package/admin/src/components/PluginIcon/index.d.ts +3 -0
- package/admin/src/components/PluginIcon/index.js +10 -12
- package/admin/src/components/ReportsReviewModal/index.d.ts +21 -0
- package/admin/src/components/ReportsReviewModal/index.js +31 -46
- package/admin/src/components/ReportsReviewTable/index.d.ts +21 -0
- package/admin/src/components/ReportsReviewTable/index.js +120 -140
- package/admin/src/components/StatusBadge/index.d.ts +7 -0
- package/admin/src/components/StatusBadge/index.js +12 -17
- package/admin/src/components/StatusBadge/styles.d.ts +2 -0
- package/admin/src/components/StatusBadge/styles.js +19 -13
- package/admin/src/components/TableFilters/index.d.ts +10 -0
- package/admin/src/components/TableFilters/index.js +52 -49
- package/admin/src/components/TablePagination/index.d.ts +17 -0
- package/admin/src/components/TablePagination/index.js +27 -29
- package/admin/src/components/icons/comments.d.ts +6 -0
- package/admin/src/components/icons/comments.js +11 -8
- package/admin/src/components/icons/index.d.ts +6 -0
- package/admin/src/components/icons/index.js +15 -6
- package/admin/src/components/icons/lock.d.ts +7 -0
- package/admin/src/components/icons/lock.js +11 -21
- package/admin/src/components/icons/review.d.ts +7 -0
- package/admin/src/components/icons/review.js +11 -17
- package/admin/src/components/icons/unlock.d.ts +7 -0
- package/admin/src/components/icons/unlock.js +11 -19
- package/admin/src/hooks/useConfig.d.ts +8 -0
- package/admin/src/hooks/useConfig.js +40 -45
- package/admin/src/index.d.ts +7 -0
- package/admin/src/index.js +98 -92
- package/admin/src/pages/App/index.d.ts +4 -0
- package/admin/src/pages/App/index.js +43 -67
- package/admin/src/pages/App/reducer/actions.d.ts +8 -0
- package/admin/src/pages/App/reducer/actions.js +11 -7
- package/admin/src/pages/App/reducer/constants.d.ts +4 -0
- package/admin/src/pages/App/reducer/constants.js +7 -4
- package/admin/src/pages/App/reducer/index.d.ts +9 -0
- package/admin/src/pages/App/reducer/index.js +24 -22
- package/admin/src/pages/App/reducer/init.d.ts +3 -0
- package/admin/src/pages/App/reducer/init.js +6 -4
- package/admin/src/pages/App/reducer/selectors.d.ts +6 -0
- package/admin/src/pages/App/reducer/selectors.js +17 -34
- package/admin/src/pages/App/utils/api.d.ts +2 -0
- package/admin/src/pages/App/utils/api.js +14 -11
- package/admin/src/pages/ComingSoonPage/index.d.ts +3 -0
- package/admin/src/pages/ComingSoonPage/index.js +42 -24
- package/admin/src/pages/Details/components/DetailsEntity/index.d.ts +18 -0
- package/admin/src/pages/Details/components/DetailsEntity/index.js +49 -77
- package/admin/src/pages/Details/components/DetailsFilters/index.d.ts +12 -0
- package/admin/src/pages/Details/components/DetailsFilters/index.js +19 -26
- package/admin/src/pages/Details/components/DetailsFilters/styles.d.ts +2 -0
- package/admin/src/pages/Details/components/DetailsFilters/styles.js +14 -8
- package/admin/src/pages/Details/index.d.ts +4 -0
- package/admin/src/pages/Details/index.js +94 -133
- package/admin/src/pages/Discover/components/DiscoverTableRow/index.d.ts +20 -0
- package/admin/src/pages/Discover/components/DiscoverTableRow/index.js +128 -139
- package/admin/src/pages/Discover/components/DiscoverTableRow/styles.d.ts +2 -0
- package/admin/src/pages/Discover/components/DiscoverTableRow/styles.js +14 -8
- package/admin/src/pages/Discover/index.d.ts +4 -0
- package/admin/src/pages/Discover/index.js +129 -170
- package/admin/src/pages/Discover/utils/api.d.ts +2 -0
- package/admin/src/pages/Discover/utils/api.js +15 -13
- package/admin/src/pages/Discover/utils/filtersSchema.d.ts +11 -0
- package/admin/src/pages/Discover/utils/filtersSchema.js +8 -6
- package/admin/src/pages/Settings/components/RestartAlert/styles.d.ts +2 -0
- package/admin/src/pages/Settings/components/RestartAlert/styles.js +14 -8
- package/admin/src/pages/Settings/index.d.ts +3 -0
- package/admin/src/pages/Settings/index.js +225 -391
- package/admin/src/pages/Settings/utils/api.d.ts +7 -0
- package/admin/src/pages/Settings/utils/api.js +60 -55
- package/admin/src/pages/utils/api.d.ts +12 -0
- package/admin/src/pages/utils/api.js +58 -53
- package/admin/src/permissions.d.ts +28 -0
- package/admin/src/permissions.js +31 -17
- package/admin/src/pluginId.d.ts +2 -0
- package/admin/src/pluginId.js +29 -5
- package/admin/src/reducers.d.ts +7 -0
- package/admin/src/reducers.js +10 -6
- package/admin/src/translations/en.json +131 -131
- package/admin/src/translations/fr.json +132 -1
- package/admin/src/translations/pt-BR.json +130 -130
- package/admin/src/utils/axiosInstance.d.ts +3 -0
- package/admin/src/utils/axiosInstance.js +21 -27
- package/admin/src/utils/constants.d.ts +25 -0
- package/admin/src/utils/constants.js +23 -22
- package/admin/src/utils/getApiUrl.d.ts +3 -0
- package/admin/src/utils/getApiUrl.js +6 -5
- package/admin/src/utils/getMessage.d.ts +4 -0
- package/admin/src/utils/getMessage.js +15 -15
- package/admin/src/utils/getRelatedGroups.d.ts +4 -0
- package/admin/src/utils/getRelatedGroups.js +5 -3
- package/admin/src/utils/getUrl.d.ts +3 -0
- package/admin/src/utils/getUrl.js +6 -5
- package/admin/src/utils/handleAPIError.d.ts +4 -0
- package/admin/src/utils/handleAPIError.js +12 -11
- package/admin/src/utils/index.d.ts +12 -0
- package/admin/src/utils/index.js +29 -11
- package/admin/src/utils/parseRegExp.d.ts +6 -0
- package/admin/src/utils/parseRegExp.js +6 -5
- package/admin/src/utils/renderEntryTitle.d.ts +4 -0
- package/admin/src/utils/renderEntryTitle.js +11 -12
- package/admin/src/utils/renderInitials.d.ts +3 -0
- package/admin/src/utils/renderInitials.js +10 -5
- package/admin/src/utils/resolveCommentStatus.d.ts +4 -0
- package/admin/src/utils/resolveCommentStatus.js +17 -21
- package/admin/src/utils/resolveCommentStatusColor.d.ts +4 -0
- package/admin/src/utils/resolveCommentStatusColor.js +19 -19
- package/content-types/comment.d.ts +91 -0
- package/content-types/comment.js +87 -88
- package/content-types/index.d.ts +143 -0
- package/content-types/index.js +15 -10
- package/content-types/report.d.ts +48 -0
- package/content-types/report.js +44 -49
- package/package.json +24 -19
- package/permissions.d.ts +18 -0
- package/permissions.js +12 -13
- package/server/bootstrap.d.ts +4 -0
- package/server/bootstrap.js +56 -62
- package/server/config/index.d.ts +4 -0
- package/server/config/index.js +17 -15
- package/server/controllers/admin.d.ts +4 -0
- package/server/controllers/admin.js +134 -167
- package/server/controllers/client.d.ts +4 -0
- package/server/controllers/client.js +120 -112
- package/server/controllers/index.d.ts +6 -0
- package/server/controllers/index.js +12 -8
- package/server/controllers/utils/functions.d.ts +7 -0
- package/server/controllers/utils/functions.js +22 -17
- package/server/controllers/utils/parsers.d.ts +10 -0
- package/server/controllers/utils/parsers.js +47 -19
- package/server/destroy.d.ts +3 -0
- package/server/destroy.js +3 -4
- package/server/graphql/index.d.ts +4 -0
- package/server/graphql/index.js +27 -25
- package/server/graphql/mutations/createAbuseReport.d.ts +11 -0
- package/server/graphql/mutations/createAbuseReport.js +22 -24
- package/server/graphql/mutations/createComment.d.ts +14 -0
- package/server/graphql/mutations/createComment.js +22 -24
- package/server/graphql/mutations/index.d.ts +4 -0
- package/server/graphql/mutations/index.js +24 -19
- package/server/graphql/mutations/removeComment.d.ts +11 -0
- package/server/graphql/mutations/removeComment.js +22 -24
- package/server/graphql/mutations/updateComment.d.ts +11 -0
- package/server/graphql/mutations/updateComment.js +22 -24
- package/server/graphql/queries/findAllFlat.d.ts +19 -0
- package/server/graphql/queries/findAllFlat.js +36 -34
- package/server/graphql/queries/findAllInHierarchy.d.ts +17 -0
- package/server/graphql/queries/findAllInHierarchy.js +30 -30
- package/server/graphql/queries/index.d.ts +4 -0
- package/server/graphql/queries/index.js +20 -17
- package/server/graphql/resolvers-config.d.ts +23 -0
- package/server/graphql/resolvers-config.js +11 -11
- package/server/graphql/types/comment-author.d.ts +4 -0
- package/server/graphql/types/comment-author.js +10 -8
- package/server/graphql/types/comment-nested.d.ts +4 -0
- package/server/graphql/types/comment-nested.js +17 -15
- package/server/graphql/types/comment.d.ts +4 -0
- package/server/graphql/types/comment.js +16 -14
- package/server/graphql/types/create-comment-author.d.ts +4 -0
- package/server/graphql/types/create-comment-author.js +10 -8
- package/server/graphql/types/create-comment.d.ts +4 -0
- package/server/graphql/types/create-comment.js +10 -8
- package/server/graphql/types/create-report.d.ts +4 -0
- package/server/graphql/types/create-report.js +10 -8
- package/server/graphql/types/id.d.ts +4 -0
- package/server/graphql/types/id.js +24 -23
- package/server/graphql/types/identify-comment-author.d.ts +4 -0
- package/server/graphql/types/identify-comment-author.js +7 -5
- package/server/graphql/types/index.d.ts +4 -0
- package/server/graphql/types/index.js +36 -17
- package/server/graphql/types/remove-comment.d.ts +4 -0
- package/server/graphql/types/remove-comment.js +9 -7
- package/server/graphql/types/report-reason.d.ts +4 -0
- package/server/graphql/types/report-reason.js +10 -8
- package/server/graphql/types/report.d.ts +4 -0
- package/server/graphql/types/report.js +12 -10
- package/server/graphql/types/response-find-all.d.ts +4 -0
- package/server/graphql/types/response-find-all.js +8 -6
- package/server/graphql/types/response-meta.d.ts +4 -0
- package/server/graphql/types/response-meta.js +7 -5
- package/server/graphql/types/response-pagination.d.ts +4 -0
- package/server/graphql/types/response-pagination.js +12 -10
- package/server/graphql/types/update-comment.d.ts +4 -0
- package/server/graphql/types/update-comment.js +10 -8
- package/server/index.d.ts +26 -0
- package/server/index.js +24 -21
- package/server/register.d.ts +3 -0
- package/server/register.js +3 -4
- package/server/routes/admin.d.ts +4 -0
- package/server/routes/admin.js +103 -109
- package/server/routes/client.d.ts +4 -0
- package/server/routes/client.js +84 -46
- package/server/routes/index.d.ts +11 -0
- package/server/routes/index.js +18 -14
- package/server/services/admin.d.ts +5 -0
- package/server/services/admin.js +134 -161
- package/server/services/client.d.ts +5 -0
- package/server/services/client.js +164 -168
- package/server/services/common.d.ts +5 -0
- package/server/services/common.js +192 -202
- package/server/services/graphql.d.ts +5 -0
- package/server/services/graphql.js +117 -182
- package/server/services/index.d.ts +8 -0
- package/server/services/index.js +15 -12
- package/server/services/utils/functions.d.ts +13 -0
- package/server/services/utils/functions.js +105 -109
- package/server/utils/constants.d.ts +9 -0
- package/server/utils/constants.js +19 -23
- package/server/utils/error.d.ts +19 -0
- package/server/utils/error.js +23 -18
- package/server/utils/functions.d.ts +6 -0
- package/server/utils/functions.js +35 -18
- package/strapi-admin.d.ts +3 -0
- package/strapi-admin.js +8 -3
- package/strapi-server.d.ts +177 -0
- package/strapi-server.js +43 -46
- package/tsconfig.tsbuildinfo +1 -0
- package/types/contentTypes.d.ts +48 -0
- package/types/contentTypes.js +3 -0
- package/.husky/pre-commit +0 -4
- package/LICENSE.md +0 -7
- package/__mocks__/initSetup.js +0 -108
- package/jest.config.js +0 -7
- package/server/controllers/utils/__tests__/functions.test.js +0 -43
- package/server/controllers/utils/__tests__/parsers.test.js +0 -94
- package/server/services/__tests__/common.test.js +0 -399
- package/server/services/utils/__tests__/functions.test.js +0 -53
- package/server/utils/__tests__/functions.test.js +0 -17
|
@@ -1,96 +1,90 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
getRelatedGroups,
|
|
11
|
-
resolveUserContextError,
|
|
12
|
-
} = require('./utils/functions');
|
|
13
|
-
const { APPROVAL_STATUS, REGEX, CONFIG_PARAMS } = require('./../utils/constants')
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Comments Plugin - Client services
|
|
17
|
-
*/
|
|
18
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
const functions_1 = require("./../utils/functions");
|
|
6
|
+
const lodash_1 = require("lodash");
|
|
7
|
+
const error_1 = __importDefault(require("./../utils/error"));
|
|
8
|
+
const functions_2 = require("./utils/functions");
|
|
9
|
+
const constants_1 = require("./../utils/constants");
|
|
19
10
|
module.exports = ({ strapi }) => ({
|
|
20
|
-
|
|
21
11
|
getCommonService() {
|
|
22
|
-
return getPluginService(
|
|
12
|
+
return (0, functions_1.getPluginService)("common");
|
|
23
13
|
},
|
|
24
|
-
|
|
25
|
-
// Create a comment
|
|
26
|
-
async create(relation, data, user = undefined) {
|
|
14
|
+
async create(relation, data, user) {
|
|
27
15
|
const { content, threadOf } = data;
|
|
28
|
-
const singleRelationFulfilled = relation && REGEX.relatedUid.test(relation);
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
throw new PluginError(400, `Field "related" got incorrect format, use format like "api::<collection name>.<content type name>:<entity id>"`);
|
|
16
|
+
const singleRelationFulfilled = relation && constants_1.REGEX.relatedUid.test(relation);
|
|
17
|
+
if (!singleRelationFulfilled) {
|
|
18
|
+
throw new error_1.default(400, `Field "related" got incorrect format, use format like "api::<collection name>.<content type name>:<entity id>"`);
|
|
32
19
|
}
|
|
33
|
-
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
20
|
+
const [uid, relatedId] = await this.getCommonService().parseRelationString(relation);
|
|
21
|
+
const isEnabledCollection = await this.getCommonService().isEnabledCollection(uid);
|
|
22
|
+
if (!isEnabledCollection) {
|
|
23
|
+
throw new error_1.default(400, `Field "related" refer to not enabled collection. Please amend the plugin settings and try again`);
|
|
24
|
+
}
|
|
25
|
+
const relatedEntity = await strapi.db
|
|
26
|
+
.query(uid)
|
|
27
|
+
.findOne(relatedId);
|
|
37
28
|
if (!relatedEntity) {
|
|
38
|
-
throw new
|
|
29
|
+
throw new error_1.default(400, `Relation for field "related" does not exist. Check your payload please.`);
|
|
39
30
|
}
|
|
40
|
-
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
if (!linkToThread) {
|
|
52
|
-
throw new PluginError(400, 'Thread does not exist');
|
|
31
|
+
const approvalFlow = await this.getCommonService().getConfig(constants_1.CONFIG_PARAMS.APPROVAL_FLOW, []);
|
|
32
|
+
const isApprovalFlowEnabled = approvalFlow.includes(uid) || relatedEntity.requireCommentsApproval;
|
|
33
|
+
let linkToThread;
|
|
34
|
+
try {
|
|
35
|
+
linkToThread = !(0, lodash_1.isNil)(threadOf)
|
|
36
|
+
? await this.getCommonService().findOne({
|
|
37
|
+
id: threadOf,
|
|
38
|
+
related: relation,
|
|
39
|
+
})
|
|
40
|
+
: null;
|
|
53
41
|
}
|
|
54
|
-
|
|
42
|
+
catch (e) {
|
|
43
|
+
throw new error_1.default(400, "Thread does not exist");
|
|
44
|
+
}
|
|
45
|
+
const validContext = this.getCommonService().isValidUserContext(user);
|
|
55
46
|
if (!validContext) {
|
|
56
|
-
throw resolveUserContextError(user);
|
|
47
|
+
throw (0, functions_2.resolveUserContextError)(user);
|
|
57
48
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
const { author
|
|
49
|
+
if ((await this.getCommonService().checkBadWords(content)) &&
|
|
50
|
+
singleRelationFulfilled) {
|
|
51
|
+
const { author, ...rest } = data;
|
|
61
52
|
let authorData = {};
|
|
62
53
|
if (validContext && user) {
|
|
63
54
|
authorData = {
|
|
64
55
|
authorUser: user?.id,
|
|
65
56
|
};
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
|
|
57
|
+
}
|
|
58
|
+
else if (author) {
|
|
59
|
+
if (author.email && !constants_1.REGEX.email.test(author.email)) {
|
|
60
|
+
throw new error_1.default(400, 'Field: "author.email". Author e-mail is not valid value. Check your payload');
|
|
69
61
|
}
|
|
70
|
-
|
|
71
62
|
authorData = {
|
|
72
63
|
authorId: author.id,
|
|
73
64
|
authorName: author.name,
|
|
74
65
|
authorEmail: author.email,
|
|
75
|
-
authorAvatar: author.avatar,
|
|
66
|
+
authorAvatar: (0, lodash_1.isString)(author.avatar) ? author.avatar : undefined,
|
|
76
67
|
};
|
|
77
68
|
}
|
|
78
|
-
|
|
79
|
-
if (
|
|
80
|
-
throw new
|
|
69
|
+
const authorNotProperlyProvided = !(0, lodash_1.isEmpty)(authorData) && !(authorData.authorId || authorData.authorUser);
|
|
70
|
+
if ((0, lodash_1.isEmpty)(authorData) || authorNotProperlyProvided) {
|
|
71
|
+
throw new error_1.default(400, `Not able to recognise author of a comment. Make sure you've provided "author" property in a payload or authenticated your request properly.`);
|
|
81
72
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
throw new
|
|
73
|
+
if (isApprovalFlowEnabled &&
|
|
74
|
+
!(0, lodash_1.isNil)(data.approvalStatus) &&
|
|
75
|
+
data.approvalStatus !== constants_1.APPROVAL_STATUS.PENDING) {
|
|
76
|
+
throw new error_1.default(400, "Invalid approval status");
|
|
86
77
|
}
|
|
87
|
-
|
|
88
|
-
|
|
78
|
+
const entity = await strapi.db
|
|
79
|
+
.query((0, functions_2.getModelUid)("comment"))
|
|
80
|
+
.create({
|
|
89
81
|
data: {
|
|
90
82
|
...rest,
|
|
91
83
|
...authorData,
|
|
92
84
|
related: relation,
|
|
93
|
-
approvalStatus: isApprovalFlowEnabled
|
|
85
|
+
approvalStatus: isApprovalFlowEnabled
|
|
86
|
+
? constants_1.APPROVAL_STATUS.PENDING
|
|
87
|
+
: null,
|
|
94
88
|
},
|
|
95
89
|
populate: {
|
|
96
90
|
authorUser: true,
|
|
@@ -98,38 +92,31 @@ module.exports = ({ strapi }) => ({
|
|
|
98
92
|
});
|
|
99
93
|
return this.getCommonService().sanitizeCommentEntity({
|
|
100
94
|
...entity,
|
|
101
|
-
threadOf:
|
|
95
|
+
threadOf: linkToThread,
|
|
102
96
|
});
|
|
103
97
|
}
|
|
104
|
-
throw new
|
|
98
|
+
throw new error_1.default(400, "No content received");
|
|
105
99
|
},
|
|
106
|
-
|
|
107
|
-
// Update a comment
|
|
108
|
-
async update(id, relation, data, user = undefined) {
|
|
100
|
+
async update(id, relation, data, user) {
|
|
109
101
|
const { content } = data;
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
if(!singleRelationFulfilled) {
|
|
114
|
-
throw new PluginError(400, `Request property "relation" got incorrect format, use format like "api::<collection name>.<content type name>:<entity id>"`);
|
|
102
|
+
const singleRelationFulfilled = relation && constants_1.REGEX.relatedUid.test(relation);
|
|
103
|
+
if (!singleRelationFulfilled) {
|
|
104
|
+
throw new error_1.default(400, `Request property "relation" got incorrect format, use format like "api::<collection name>.<content type name>:<entity id>"`);
|
|
115
105
|
}
|
|
116
|
-
|
|
117
106
|
await this.getCommonService().parseRelationString(relation);
|
|
118
|
-
|
|
119
107
|
const existingEntity = await this.getCommonService().findOne({
|
|
120
108
|
id,
|
|
121
109
|
related: relation,
|
|
122
110
|
});
|
|
123
|
-
|
|
124
111
|
const validContext = this.getCommonService().isValidUserContext(user);
|
|
125
|
-
|
|
126
112
|
if (!validContext) {
|
|
127
|
-
throw resolveUserContextError(user);
|
|
113
|
+
throw (0, functions_2.resolveUserContextError)(user);
|
|
128
114
|
}
|
|
129
|
-
|
|
130
|
-
if (isEqualEntity(existingEntity, data, user) && content) {
|
|
115
|
+
if ((0, functions_2.isEqualEntity)(existingEntity, data, user) && content) {
|
|
131
116
|
if (await this.getCommonService().checkBadWords(content)) {
|
|
132
|
-
const entity = await strapi.db
|
|
117
|
+
const entity = await strapi.db
|
|
118
|
+
.query((0, functions_2.getModelUid)("comment"))
|
|
119
|
+
.update({
|
|
133
120
|
where: { id },
|
|
134
121
|
data: { content },
|
|
135
122
|
populate: { threadOf: true, authorUser: true },
|
|
@@ -137,127 +124,136 @@ module.exports = ({ strapi }) => ({
|
|
|
137
124
|
return this.getCommonService().sanitizeCommentEntity(entity);
|
|
138
125
|
}
|
|
139
126
|
}
|
|
140
|
-
throw new
|
|
127
|
+
throw new error_1.default(403, `You're not allowed to take an action on that entity. Make sure you've provided "author" property in a payload or authenticated your request properly.`);
|
|
141
128
|
},
|
|
142
|
-
|
|
143
|
-
// Report abuse in comment
|
|
144
|
-
async reportAbuse(id, relation, payload, user = undefined) {
|
|
129
|
+
async reportAbuse(id, relation, payload, user) {
|
|
145
130
|
if (!this.getCommonService().isValidUserContext(user)) {
|
|
146
|
-
throw resolveUserContextError(user);
|
|
131
|
+
throw (0, functions_2.resolveUserContextError)(user);
|
|
147
132
|
}
|
|
148
|
-
|
|
149
133
|
await this.getCommonService().parseRelationString(relation);
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
});
|
|
155
|
-
if (reportAgainstEntity) {
|
|
156
|
-
const entity = await strapi.db.query(getModelUid('comment-report')).create({
|
|
157
|
-
data: {
|
|
158
|
-
...payload,
|
|
159
|
-
resolved: false,
|
|
160
|
-
related: id,
|
|
161
|
-
}
|
|
134
|
+
try {
|
|
135
|
+
const reportAgainstEntity = await this.getCommonService().findOne({
|
|
136
|
+
id,
|
|
137
|
+
related: relation,
|
|
162
138
|
});
|
|
163
|
-
|
|
164
|
-
const
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
139
|
+
if (reportAgainstEntity) {
|
|
140
|
+
const entity = await strapi.db
|
|
141
|
+
.query((0, functions_2.getModelUid)("comment-report"))
|
|
142
|
+
.create({
|
|
143
|
+
data: {
|
|
144
|
+
...payload,
|
|
145
|
+
resolved: false,
|
|
146
|
+
related: id,
|
|
147
|
+
},
|
|
148
|
+
});
|
|
149
|
+
if (entity) {
|
|
150
|
+
const response = {
|
|
151
|
+
...entity,
|
|
152
|
+
related: reportAgainstEntity,
|
|
153
|
+
};
|
|
154
|
+
try {
|
|
155
|
+
await this.sendAbuseReportEmail(entity.reason, entity.content);
|
|
156
|
+
return response;
|
|
157
|
+
}
|
|
158
|
+
catch (err) {
|
|
159
|
+
return response;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
throw new error_1.default(500, "Report cannot be created");
|
|
173
164
|
}
|
|
174
|
-
} else {
|
|
175
|
-
throw new PluginError(500, 'Report cannot be created');
|
|
176
165
|
}
|
|
166
|
+
throw new error_1.default(403, `You're not allowed to take an action on that entity. Make sure that comment exist or you've authenticated your request properly.`);
|
|
167
|
+
}
|
|
168
|
+
catch (e) {
|
|
169
|
+
throw new error_1.default(403, `You're not allowed to take an action on that entity. Make sure that comment exist or you've authenticated your request properly.`);
|
|
177
170
|
}
|
|
178
|
-
throw new PluginError(403, `You're not allowed to take an action on that entity. Make sure that comment exist or you've authenticated your request properly.`);
|
|
179
171
|
},
|
|
180
|
-
|
|
181
|
-
async markAsRemoved(id, relation, authorId, user = undefined){
|
|
172
|
+
async markAsRemoved(id, relation, authorId, user) {
|
|
182
173
|
if (!this.getCommonService().isValidUserContext(user)) {
|
|
183
|
-
throw resolveUserContextError(user);
|
|
174
|
+
throw (0, functions_2.resolveUserContextError)(user);
|
|
184
175
|
}
|
|
185
|
-
|
|
186
176
|
const author = user?.id || authorId;
|
|
187
|
-
|
|
188
177
|
if (!author) {
|
|
189
|
-
throw new
|
|
178
|
+
throw new error_1.default(403, `You're not allowed to take an action on that entity. Make sure that you've provided proper "authorId" or authenticated your request properly.`);
|
|
190
179
|
}
|
|
191
|
-
|
|
192
180
|
await this.getCommonService().parseRelationString(relation);
|
|
193
|
-
|
|
194
|
-
let entity;
|
|
195
181
|
try {
|
|
196
|
-
const byAuthor = user?.id
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
182
|
+
const byAuthor = user?.id
|
|
183
|
+
? {
|
|
184
|
+
authorUser: author,
|
|
185
|
+
}
|
|
186
|
+
: {
|
|
187
|
+
authorId: author,
|
|
188
|
+
};
|
|
189
|
+
const entity = await this.getCommonService().findOne({
|
|
202
190
|
id,
|
|
203
191
|
related: relation,
|
|
204
192
|
...byAuthor,
|
|
205
193
|
});
|
|
206
|
-
|
|
207
|
-
|
|
194
|
+
if (entity) {
|
|
195
|
+
const removedEntity = await strapi.db
|
|
196
|
+
.query((0, functions_2.getModelUid)("comment"))
|
|
197
|
+
.update({
|
|
198
|
+
where: {
|
|
199
|
+
id,
|
|
200
|
+
related: relation,
|
|
201
|
+
},
|
|
202
|
+
data: { removed: true },
|
|
203
|
+
populate: { threadOf: true, authorUser: true },
|
|
204
|
+
});
|
|
205
|
+
await this.markAsRemovedNested(id, true);
|
|
206
|
+
return this.getCommonService().sanitizeCommentEntity(removedEntity);
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
throw new error_1.default(404, `Entity does not exist or you're not allowed to take an action on it`);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
catch (e) {
|
|
213
|
+
throw new error_1.default(404, `Entity does not exist or you're not allowed to take an action on it`);
|
|
208
214
|
}
|
|
209
|
-
|
|
210
|
-
const removedEntity = await strapi.db.query(getModelUid('comment'))
|
|
211
|
-
.update({
|
|
212
|
-
where: {
|
|
213
|
-
id,
|
|
214
|
-
related: relation
|
|
215
|
-
},
|
|
216
|
-
data: { removed: true },
|
|
217
|
-
populate: { threadOf: true, authorUser: true },
|
|
218
|
-
})
|
|
219
|
-
await this.markAsRemovedNested(id, true);
|
|
220
|
-
|
|
221
|
-
return this.getCommonService().sanitizeCommentEntity(removedEntity);
|
|
222
215
|
},
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
where: {
|
|
216
|
+
async sendAbuseReportEmail(reason, content) {
|
|
217
|
+
const rolesToBeNotified = (await this.getCommonService().getConfig(constants_1.CONFIG_PARAMS.MODERATOR_ROLES)) || ["strapi-super-admin"];
|
|
218
|
+
const adminUserModel = strapi.db.query("admin::user");
|
|
219
|
+
const emails = await adminUserModel
|
|
220
|
+
.findMany({
|
|
221
|
+
where: {
|
|
230
222
|
roles: { code: rolesToBeNotified },
|
|
231
223
|
},
|
|
232
|
-
})
|
|
233
|
-
|
|
234
|
-
|
|
224
|
+
})
|
|
225
|
+
.then((items) => items.map((_) => _.email));
|
|
226
|
+
const superAdmin = await strapi.db
|
|
227
|
+
.query("admin::user")
|
|
235
228
|
.findOne({
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
if (emails.length > 0) {
|
|
229
|
+
where: {
|
|
230
|
+
roles: { code: "strapi-super-admin" },
|
|
231
|
+
},
|
|
232
|
+
});
|
|
233
|
+
if (emails.length > 0) {
|
|
242
234
|
try {
|
|
243
|
-
await strapi
|
|
235
|
+
await strapi
|
|
236
|
+
.plugin("email")
|
|
237
|
+
.service("email")
|
|
238
|
+
.send({
|
|
244
239
|
to: emails,
|
|
245
240
|
from: superAdmin.email,
|
|
246
|
-
subject:
|
|
241
|
+
subject: "New abuse report on comment",
|
|
247
242
|
text: `
|
|
248
243
|
There was a new abuse report on your app.
|
|
249
244
|
Reason: ${reason}
|
|
250
245
|
Message: ${content}
|
|
251
246
|
`,
|
|
252
247
|
});
|
|
253
|
-
}
|
|
248
|
+
}
|
|
249
|
+
catch (err) {
|
|
254
250
|
strapi.log.error(err);
|
|
255
251
|
throw err;
|
|
256
252
|
}
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
return this.getCommonService().modifiedNestedNestedComments(id, 'removed', status);
|
|
253
|
+
}
|
|
254
|
+
},
|
|
255
|
+
async markAsRemovedNested(id, status) {
|
|
256
|
+
return this.getCommonService().modifiedNestedNestedComments(id, "removed", status);
|
|
262
257
|
},
|
|
263
258
|
});
|
|
259
|
+
//# sourceMappingURL=client.js.map
|