tkserver 1.6.4 → 1.6.7
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 +32 -42
- package/package.json +2 -2
- package/server.js +0 -9
package/index.js
CHANGED
|
@@ -5,13 +5,14 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
const { version: VERSION } = require('./package.json')
|
|
8
|
+
const fs = require('fs')
|
|
9
|
+
const path = require('path')
|
|
8
10
|
const Loki = require('lokijs')
|
|
9
11
|
const Lfsa = require('lokijs/src/loki-fs-structured-adapter')
|
|
10
12
|
const { v4: uuidv4 } = require('uuid') // 用户 id 生成
|
|
11
13
|
const {
|
|
12
14
|
$,
|
|
13
15
|
JSDOM,
|
|
14
|
-
axios,
|
|
15
16
|
createDOMPurify,
|
|
16
17
|
md5,
|
|
17
18
|
xml2js
|
|
@@ -99,9 +100,6 @@ module.exports = async (request, response) => {
|
|
|
99
100
|
case 'COMMENT_SUBMIT':
|
|
100
101
|
res = await commentSubmit(event, request)
|
|
101
102
|
break
|
|
102
|
-
case 'POST_SUBMIT':
|
|
103
|
-
res = await postSubmit(event.comment, request)
|
|
104
|
-
break
|
|
105
103
|
case 'COUNTER_GET':
|
|
106
104
|
res = await counterGet(event)
|
|
107
105
|
break
|
|
@@ -168,6 +166,7 @@ function allowCors (request, response) {
|
|
|
168
166
|
'Access-Control-Allow-Headers',
|
|
169
167
|
'X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version'
|
|
170
168
|
)
|
|
169
|
+
response.setHeader('Access-Control-Max-Age', '600')
|
|
171
170
|
}
|
|
172
171
|
}
|
|
173
172
|
|
|
@@ -195,9 +194,14 @@ function anonymousSignIn (request) {
|
|
|
195
194
|
|
|
196
195
|
async function connectToDatabase () {
|
|
197
196
|
if (db) return db
|
|
197
|
+
const dataDir = path.resolve(process.cwd(), process.env.TWIKOO_DATA || './data')
|
|
198
|
+
if (!fs.existsSync(dataDir)) {
|
|
199
|
+
fs.mkdirSync(dataDir)
|
|
200
|
+
}
|
|
201
|
+
console.log(`Twikoo database stored at ${dataDir}`)
|
|
198
202
|
await new Promise((resolve) => {
|
|
199
203
|
console.log('Connecting to database...')
|
|
200
|
-
db = new Loki('
|
|
204
|
+
db = new Loki(path.resolve(dataDir, './db.json'), {
|
|
201
205
|
adapter: new Lfsa(),
|
|
202
206
|
autoload: true,
|
|
203
207
|
autoloadCallback: resolve,
|
|
@@ -396,17 +400,17 @@ async function commentSetForAdmin (event) {
|
|
|
396
400
|
const isAdminUser = isAdmin(event.accessToken)
|
|
397
401
|
if (isAdminUser) {
|
|
398
402
|
validate(event, ['id', 'set'])
|
|
399
|
-
|
|
403
|
+
db
|
|
400
404
|
.getCollection('comment')
|
|
401
405
|
.findAndUpdate({ _id: event.id }, (obj) => {
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
...event.set,
|
|
405
|
-
updated: Date.now()
|
|
406
|
+
for (const key of Object.keys(event.set)) {
|
|
407
|
+
obj[key] = event.set[key]
|
|
406
408
|
}
|
|
409
|
+
obj.updated = Date.now()
|
|
410
|
+
return obj
|
|
407
411
|
})
|
|
408
412
|
res.code = RES_CODE.SUCCESS
|
|
409
|
-
res.updated =
|
|
413
|
+
res.updated = 1
|
|
410
414
|
} else {
|
|
411
415
|
res.code = RES_CODE.NEED_LOGIN
|
|
412
416
|
res.message = '请先登录'
|
|
@@ -420,11 +424,11 @@ async function commentDeleteForAdmin (event) {
|
|
|
420
424
|
const isAdminUser = isAdmin(event.accessToken)
|
|
421
425
|
if (isAdminUser) {
|
|
422
426
|
validate(event, ['id'])
|
|
423
|
-
|
|
427
|
+
db
|
|
424
428
|
.getCollection('comment')
|
|
425
429
|
.findAndRemove({ _id: event.id })
|
|
426
430
|
res.code = RES_CODE.SUCCESS
|
|
427
|
-
res.deleted =
|
|
431
|
+
res.deleted = 1
|
|
428
432
|
} else {
|
|
429
433
|
res.code = RES_CODE.NEED_LOGIN
|
|
430
434
|
res.message = '请先登录'
|
|
@@ -566,21 +570,9 @@ async function commentSubmit (event, request) {
|
|
|
566
570
|
const comment = await save(data)
|
|
567
571
|
res.id = comment.id
|
|
568
572
|
// 异步垃圾检测、发送评论通知
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
await Promise.race([
|
|
573
|
-
axios.post(`http://${request.headers.host}`, {
|
|
574
|
-
event: 'POST_SUBMIT',
|
|
575
|
-
comment
|
|
576
|
-
}, { headers: { 'x-twikoo-recursion': config.ADMIN_PASS || 'true' } }),
|
|
577
|
-
// 如果超过 5 秒还没收到异步返回,直接继续,减少用户等待的时间
|
|
578
|
-
new Promise((resolve) => setTimeout(resolve, 5000))
|
|
579
|
-
])
|
|
580
|
-
console.timeEnd('POST_SUBMIT')
|
|
581
|
-
} catch (e) {
|
|
582
|
-
console.log('POST_SUBMIT 失败', e)
|
|
583
|
-
}
|
|
573
|
+
console.log('开始异步垃圾检测、发送评论通知')
|
|
574
|
+
// 私有部署支持直接异步调用
|
|
575
|
+
postSubmit(comment)
|
|
584
576
|
return res
|
|
585
577
|
}
|
|
586
578
|
|
|
@@ -601,14 +593,17 @@ async function getParentComment (currentComment) {
|
|
|
601
593
|
}
|
|
602
594
|
|
|
603
595
|
// 异步垃圾检测、发送评论通知
|
|
604
|
-
async function postSubmit (comment
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
596
|
+
async function postSubmit (comment) {
|
|
597
|
+
try {
|
|
598
|
+
console.log('POST_SUBMIT')
|
|
599
|
+
// 垃圾检测
|
|
600
|
+
const isSpam = await postCheckSpam(comment, config)
|
|
601
|
+
await saveSpamCheckResult(comment, isSpam)
|
|
602
|
+
// 发送通知
|
|
603
|
+
await sendNotice(comment, config, getParentComment)
|
|
604
|
+
} catch (e) {
|
|
605
|
+
console.log('POST_SUBMIT 失败', e)
|
|
606
|
+
}
|
|
612
607
|
}
|
|
613
608
|
|
|
614
609
|
// 将评论转为数据库存储格式
|
|
@@ -885,11 +880,6 @@ function isAdmin (accessToken) {
|
|
|
885
880
|
return config.ADMIN_PASS === md5(accessToken)
|
|
886
881
|
}
|
|
887
882
|
|
|
888
|
-
// 判断是否为递归调用(即云函数调用自身)
|
|
889
|
-
function isRecursion (request) {
|
|
890
|
-
return request.headers['x-twikoo-recursion'] === (config.ADMIN_PASS || 'true')
|
|
891
|
-
}
|
|
892
|
-
|
|
893
883
|
// 建立数据库 collections
|
|
894
884
|
async function createCollections () {
|
|
895
885
|
const collections = ['comment', 'config', 'counter']
|
|
@@ -910,4 +900,4 @@ function clearRequestTimes () {
|
|
|
910
900
|
requestTimes = {}
|
|
911
901
|
}
|
|
912
902
|
|
|
913
|
-
|
|
903
|
+
setInterval(clearRequestTimes, TWIKOO_REQ_TIMES_CLEAR_TIME)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tkserver",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.7",
|
|
4
4
|
"description": "A simple comment system.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"twikoo",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
27
|
"lokijs": "^1.5.12",
|
|
28
|
-
"twikoo-func": "1.6.
|
|
28
|
+
"twikoo-func": "1.6.7",
|
|
29
29
|
"uuid": "^8.3.2"
|
|
30
30
|
}
|
|
31
31
|
}
|
package/server.js
CHANGED
|
@@ -1,15 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
const fs = require('fs')
|
|
4
|
-
const path = require('path')
|
|
5
3
|
const http = require('http')
|
|
6
|
-
|
|
7
|
-
const dataDir = path.resolve(process.cwd(), process.env.TWIKOO_DATA || './data')
|
|
8
|
-
if (!fs.existsSync(dataDir)) {
|
|
9
|
-
fs.mkdirSync(dataDir)
|
|
10
|
-
}
|
|
11
|
-
console.log(`Twikoo database stored at ${dataDir}`)
|
|
12
|
-
|
|
13
4
|
const twikoo = require('./index')
|
|
14
5
|
const server = http.createServer()
|
|
15
6
|
|