@waline/vercel 1.17.2 → 1.18.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@waline/vercel",
3
- "version": "1.17.2",
3
+ "version": "1.18.0",
4
4
  "description": "vercel server for waline comment system",
5
5
  "keywords": [
6
6
  "waline",
@@ -31,7 +31,7 @@
31
31
  "markdown-it-sub": "^1.0.0",
32
32
  "markdown-it-sup": "^1.0.0",
33
33
  "mathjax-full": "^3.2.0",
34
- "nodemailer": "^6.7.4",
34
+ "nodemailer": "^6.7.5",
35
35
  "nunjucks": "^3.2.3",
36
36
  "phpass": "^0.1.1",
37
37
  "prismjs": "^1.28.0",
@@ -50,6 +50,7 @@ async function formatCmt(
50
50
  comment.addr = await think.ip2region(ip, { depth: isAdmin ? 3 : 1 });
51
51
  }
52
52
  comment.comment = markdownParser(comment.comment);
53
+ comment.like = Number(comment.like) || 0;
53
54
  return comment;
54
55
  }
55
56
 
@@ -97,6 +98,7 @@ module.exports = class extends BaseRest {
97
98
  'ip',
98
99
  'user_id',
99
100
  'sticky',
101
+ 'like',
100
102
  ],
101
103
  });
102
104
 
@@ -231,7 +233,7 @@ module.exports = class extends BaseRest {
231
233
  const where = { url };
232
234
  if (think.isEmpty(userInfo) || this.config('storage') === 'deta') {
233
235
  where.status = ['NOT IN', ['waiting', 'spam']];
234
- } else {
236
+ } else if (userInfo.type !== 'administrator') {
235
237
  where._complex = {
236
238
  _logic: 'or',
237
239
  status: ['NOT IN', ['waiting', 'spam']],
@@ -259,6 +261,7 @@ module.exports = class extends BaseRest {
259
261
  'ip',
260
262
  'user_id',
261
263
  'sticky',
264
+ 'like',
262
265
  ],
263
266
  };
264
267
 
@@ -365,7 +368,7 @@ module.exports = class extends BaseRest {
365
368
  });
366
369
  comments.forEach((cmt) => {
367
370
  const countItem = (counts || []).find(({ mail, user_id }) => {
368
- if (user_id) {
371
+ if (cmt.user_id) {
369
372
  return user_id === cmt.user_id;
370
373
  }
371
374
  return mail === cmt.mail;
@@ -568,13 +571,27 @@ module.exports = class extends BaseRest {
568
571
  }
569
572
 
570
573
  async putAction() {
571
- const data = this.post();
574
+ const { userInfo } = this.ctx.state;
575
+ let data = this.post();
572
576
  let oldData = await this.modelInstance.select({ objectId: this.id });
573
577
  if (think.isEmpty(oldData)) {
574
578
  return this.success();
575
579
  }
576
580
 
577
581
  oldData = oldData[0];
582
+ if (think.isEmpty(userInfo) || userInfo.type !== 'administrator') {
583
+ if (!think.isBoolean(data.like)) {
584
+ return this.success();
585
+ }
586
+
587
+ const likeIncMax = this.config('LIKE_INC_MAX') || 1;
588
+ data = {
589
+ like:
590
+ (Number(oldData.like) || 0) +
591
+ (data.like ? Math.ceil(Math.random() * likeIncMax) : -1),
592
+ };
593
+ }
594
+
578
595
  const preUpdateResp = await this.hook('preUpdate', {
579
596
  ...data,
580
597
  objectId: this.id,
package/src/logic/base.js CHANGED
@@ -65,6 +65,7 @@ module.exports = class extends think.Logic {
65
65
  'qq',
66
66
  'avatar',
67
67
  '2fa',
68
+ 'label',
68
69
  ],
69
70
  }
70
71
  );
@@ -4,9 +4,10 @@ module.exports = class extends Base {
4
4
  await super.__before();
5
5
 
6
6
  const { type, path } = this.get();
7
+ const { like } = this.post();
7
8
  const isAllowedGet = this.isGet && (type !== 'list' || path);
8
-
9
- if (this.isPost || isAllowedGet) {
9
+ const isAllowedPut = this.ctx.isMethod('PUT') && think.isBoolean(like);
10
+ if (this.isPost || isAllowedGet || isAllowedPut) {
10
11
  return;
11
12
  }
12
13
 
@@ -207,7 +208,7 @@ module.exports = class extends Base {
207
208
  }
208
209
 
209
210
  /**
210
- * @api {POST} /comment/:id update comment data
211
+ * @api {PUT} /comment/:id update comment data
211
212
  * @apiGroup Comment
212
213
  * @apiVersion 0.0.1
213
214
  *
@@ -216,11 +217,22 @@ module.exports = class extends Base {
216
217
  * @apiParam {String} [link] post comment user link
217
218
  * @apiParam {String} [comment] post comment text
218
219
  * @apiParam {String} [url] the artcile url path of comment
220
+ * @apiParam {Boolean} [like] like comment
219
221
  *
220
222
  * @apiSuccess (200) {Number} errno 0
221
223
  * @apiSuccess (200) {String} errmsg return error message if error
222
224
  */
223
- putAction() {}
225
+ putAction() {
226
+ const { userInfo } = this.ctx.state;
227
+ if (think.isEmpty(userInfo) || userInfo.type !== 'administrator') {
228
+ this.rules = {
229
+ like: {
230
+ required: true,
231
+ boolean: true,
232
+ },
233
+ };
234
+ }
235
+ }
224
236
 
225
237
  /**
226
238
  * @api {DELETE} /comment/:id delete comment
@@ -30,6 +30,7 @@ const CSV_HEADERS = {
30
30
  'type',
31
31
  'url',
32
32
  'avatar',
33
+ 'label',
33
34
  'github',
34
35
  'twitter',
35
36
  'facebook',
@@ -127,7 +127,11 @@ module.exports = class extends Base {
127
127
  }
128
128
 
129
129
  async _getCmtGroupByMailUserIdCache(key, where) {
130
- if (this.tableName !== 'Comment' || key !== 'user_id_mail') {
130
+ if (
131
+ this.tableName !== 'Comment' ||
132
+ key !== 'user_id_mail' ||
133
+ !think.isArray(think.config('levels'))
134
+ ) {
131
135
  return [];
132
136
  }
133
137
 
@@ -140,7 +144,11 @@ module.exports = class extends Base {
140
144
  }
141
145
 
142
146
  async _setCmtGroupByMailUserIdCache(key, data) {
143
- if (this.tableName !== 'Comment' || key !== 'user_id_mail') {
147
+ if (
148
+ this.tableName !== 'Comment' ||
149
+ key !== 'user_id_mail' ||
150
+ !think.isArray(think.config('levels'))
151
+ ) {
144
152
  return;
145
153
  }
146
154
 
@@ -161,7 +169,10 @@ module.exports = class extends Base {
161
169
  }
162
170
 
163
171
  async _updateCmtGroupByMailUserIdCache(data, method) {
164
- if (this.tableName !== 'Comment') {
172
+ if (
173
+ this.tableName !== 'Comment' ||
174
+ !think.isArray(think.config('levels'))
175
+ ) {
165
176
  return;
166
177
  }
167
178