twikoo-func 1.7.8 → 1.7.10
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/index.js +24 -1
- package/package.json +1 -1
- package/utils/import.js +36 -11
- package/utils/index.js +13 -0
package/index.js
CHANGED
|
@@ -34,7 +34,8 @@ const {
|
|
|
34
34
|
checkCapCaptcha,
|
|
35
35
|
getConfig,
|
|
36
36
|
getConfigForAdmin,
|
|
37
|
-
validate
|
|
37
|
+
validate,
|
|
38
|
+
checkCommentOwnership
|
|
38
39
|
} = require('./utils')
|
|
39
40
|
const {
|
|
40
41
|
jsonParse,
|
|
@@ -146,6 +147,9 @@ exports.main = async (event, context) => {
|
|
|
146
147
|
case 'COMMENT_EXPORT_FOR_ADMIN': // >= 1.6.13
|
|
147
148
|
res = await commentExportForAdmin(event)
|
|
148
149
|
break
|
|
150
|
+
case 'COMMENT_DELETE_FOR_USER':
|
|
151
|
+
res = await commentDeleteForUser(event)
|
|
152
|
+
break
|
|
149
153
|
default:
|
|
150
154
|
if (event.event) {
|
|
151
155
|
res.code = RES_CODE.EVENT_NOT_EXIST
|
|
@@ -428,6 +432,25 @@ async function commentDeleteForAdmin (event) {
|
|
|
428
432
|
return res
|
|
429
433
|
}
|
|
430
434
|
|
|
435
|
+
// 用户删除自己的评论
|
|
436
|
+
async function commentDeleteForUser (event) {
|
|
437
|
+
const res = {}
|
|
438
|
+
try {
|
|
439
|
+
const uid = await getUid()
|
|
440
|
+
await checkCommentOwnership(event.id, uid, async (id) => {
|
|
441
|
+
const doc = await db.collection('comment').doc(id).get()
|
|
442
|
+
return doc.data && doc.data.length > 0 ? doc.data[0] : null
|
|
443
|
+
})
|
|
444
|
+
const data = await db.collection('comment').doc(event.id).delete()
|
|
445
|
+
res.code = RES_CODE.SUCCESS
|
|
446
|
+
res.deleted = data.deleted
|
|
447
|
+
} catch (e) {
|
|
448
|
+
res.code = RES_CODE.FAIL
|
|
449
|
+
res.message = e.message
|
|
450
|
+
}
|
|
451
|
+
return res
|
|
452
|
+
}
|
|
453
|
+
|
|
431
454
|
// 管理员导入评论
|
|
432
455
|
async function commentImportForAdmin (event) {
|
|
433
456
|
const res = {}
|
package/package.json
CHANGED
package/utils/import.js
CHANGED
|
@@ -3,6 +3,41 @@ const { getMarked, getDomPurify, getMd5 } = require('./lib')
|
|
|
3
3
|
const marked = getMarked()
|
|
4
4
|
const md5 = getMd5()
|
|
5
5
|
|
|
6
|
+
const ARRAY_FIELDS = ['like', 'ups', 'downs']
|
|
7
|
+
|
|
8
|
+
const parseJsonArrayField = (value) => {
|
|
9
|
+
if (Array.isArray(value)) return value
|
|
10
|
+
if (typeof value !== 'string') return value
|
|
11
|
+
const trimmed = value.trim()
|
|
12
|
+
if (!trimmed.startsWith('[')) return value
|
|
13
|
+
try {
|
|
14
|
+
const parsed = JSON.parse(trimmed)
|
|
15
|
+
return Array.isArray(parsed) ? parsed : value
|
|
16
|
+
} catch (e) {
|
|
17
|
+
return value
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const normalizeTwikooComment = (comment) => {
|
|
22
|
+
const parsed = { ...comment }
|
|
23
|
+
if (comment._id && comment._id.$oid) {
|
|
24
|
+
// 解决 id 历史数据问题
|
|
25
|
+
parsed._id = comment._id.$oid
|
|
26
|
+
}
|
|
27
|
+
if (comment.pid === null) {
|
|
28
|
+
delete parsed.pid
|
|
29
|
+
}
|
|
30
|
+
if (comment.rid === null) {
|
|
31
|
+
delete parsed.rid
|
|
32
|
+
}
|
|
33
|
+
for (const field of ARRAY_FIELDS) {
|
|
34
|
+
if (field in parsed) {
|
|
35
|
+
parsed[field] = parseJsonArrayField(parsed[field])
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return parsed
|
|
39
|
+
}
|
|
40
|
+
|
|
6
41
|
const fn = {
|
|
7
42
|
// 兼容 Leancloud 两种 JSON 导出格式
|
|
8
43
|
jsonParse (content) {
|
|
@@ -240,17 +275,7 @@ const fn = {
|
|
|
240
275
|
log(`共 ${arr.length} 条评论`)
|
|
241
276
|
for (const comment of arr) {
|
|
242
277
|
try {
|
|
243
|
-
const parsed = comment
|
|
244
|
-
if (comment._id.$oid) {
|
|
245
|
-
// 解决 id 历史数据问题
|
|
246
|
-
parsed._id = comment._id.$oid
|
|
247
|
-
}
|
|
248
|
-
if (comment.pid === null) {
|
|
249
|
-
delete comment.pid
|
|
250
|
-
}
|
|
251
|
-
if (comment.rid === null) {
|
|
252
|
-
delete comment.rid
|
|
253
|
-
}
|
|
278
|
+
const parsed = normalizeTwikooComment(comment)
|
|
254
279
|
comments.push(parsed)
|
|
255
280
|
log(`${comment._id} 解析成功`)
|
|
256
281
|
} catch (e) {
|
package/utils/index.js
CHANGED
|
@@ -99,6 +99,7 @@ const fn = {
|
|
|
99
99
|
ruser: fn.ruser(comment.pid, comments),
|
|
100
100
|
top: comment.top,
|
|
101
101
|
isSpam: comment.isSpam,
|
|
102
|
+
isOwner: comment.uid === uid,
|
|
102
103
|
created: comment.created,
|
|
103
104
|
updated: comment.updated
|
|
104
105
|
}
|
|
@@ -445,6 +446,18 @@ const fn = {
|
|
|
445
446
|
throw new Error(`参数"${requiredParam}"不合法`)
|
|
446
447
|
}
|
|
447
448
|
}
|
|
449
|
+
},
|
|
450
|
+
// 校验评论归属:确认评论存在且属于当前用户
|
|
451
|
+
async checkCommentOwnership (id, uid, getComment) {
|
|
452
|
+
fn.validate({ id }, ['id'])
|
|
453
|
+
const comment = await getComment(id)
|
|
454
|
+
if (!comment) {
|
|
455
|
+
throw new Error('评论不存在')
|
|
456
|
+
}
|
|
457
|
+
if (comment.uid !== uid) {
|
|
458
|
+
throw new Error('只能删除自己的评论')
|
|
459
|
+
}
|
|
460
|
+
return comment
|
|
448
461
|
}
|
|
449
462
|
}
|
|
450
463
|
|