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.
Files changed (3) hide show
  1. package/index.js +32 -42
  2. package/package.json +2 -2
  3. 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('data/db.json', {
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
- const data = db
403
+ db
400
404
  .getCollection('comment')
401
405
  .findAndUpdate({ _id: event.id }, (obj) => {
402
- return {
403
- ...obj,
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 = data
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
- const data = db
427
+ db
424
428
  .getCollection('comment')
425
429
  .findAndRemove({ _id: event.id })
426
430
  res.code = RES_CODE.SUCCESS
427
- res.deleted = data.deletedCount
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
- try {
570
- console.log('开始异步垃圾检测、发送评论通知')
571
- console.time('POST_SUBMIT')
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, request) {
605
- if (!isRecursion(request)) return { code: RES_CODE.FORBIDDEN }
606
- // 垃圾检测
607
- const isSpam = await postCheckSpam(comment, config)
608
- await saveSpamCheckResult(comment, isSpam)
609
- // 发送通知
610
- await sendNotice(comment, config, getParentComment)
611
- return { code: RES_CODE.SUCCESS }
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
- setTimeout(clearRequestTimes, TWIKOO_REQ_TIMES_CLEAR_TIME)
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.4",
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.4",
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