w-web-api 1.0.23 → 1.0.25

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 (37) hide show
  1. package/.eslintrc.js +1 -0
  2. package/.vscode/launch.json +21 -0
  3. package/README.md +21 -4
  4. package/dist/css/{chunk-vendors.1474a727.css → chunk-vendors.ca61ed63.css} +1 -1
  5. package/dist/img/connecting.26511805.svg +10 -0
  6. package/dist/img/deny.e7b81b94.png +0 -0
  7. package/dist/index.tmp +1 -1
  8. package/dist/js/app-legacy.9ae046af.js +2 -0
  9. package/dist/js/app-legacy.9ae046af.js.map +1 -0
  10. package/dist/js/app.e95d00d5.js +2 -0
  11. package/dist/js/app.e95d00d5.js.map +1 -0
  12. package/dist/js/chunk-vendors-legacy.0023ac2c.js +14 -0
  13. package/dist/js/chunk-vendors-legacy.0023ac2c.js.map +1 -0
  14. package/dist/js/chunk-vendors.0023ac2c.js +14 -0
  15. package/dist/js/chunk-vendors.0023ac2c.js.map +1 -0
  16. package/dist/w-web-api.umd.js +2 -2
  17. package/dist/w-web-api.umd.js.map +1 -1
  18. package/docs/WWebApi.html +85 -13
  19. package/docs/WWebApi.mjs.html +149 -30
  20. package/docs/index.html +1 -1
  21. package/package.json +5 -4
  22. package/server/WWebApi.mjs +148 -29
  23. package/src/App.vue +43 -7
  24. package/src/components/LayoutState.vue +87 -0
  25. package/src/main.js +5 -2
  26. package/src/plugins/mUI.mjs +12 -0
  27. package/src/store/mutations.mjs +13 -6
  28. package/srv.mjs +21 -2
  29. package/tableTags-web-api.json +1 -1
  30. package/dist/js/app-legacy.c9a65a85.js +0 -2
  31. package/dist/js/app-legacy.c9a65a85.js.map +0 -1
  32. package/dist/js/app.c9a65a85.js +0 -2
  33. package/dist/js/app.c9a65a85.js.map +0 -1
  34. package/dist/js/chunk-vendors-legacy.bf09c4e2.js +0 -14
  35. package/dist/js/chunk-vendors-legacy.bf09c4e2.js.map +0 -1
  36. package/dist/js/chunk-vendors.bf09c4e2.js +0 -14
  37. package/dist/js/chunk-vendors.bf09c4e2.js.map +0 -1
package/docs/WWebApi.html CHANGED
@@ -64,7 +64,7 @@
64
64
 
65
65
 
66
66
 
67
- <h4 class="name" id="WWebApi"><span class="type-signature"></span>new WWebApi<span class="signature">(WOrm, url, db, opt<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {Object}</span></h4>
67
+ <h4 class="name" id="WWebApi"><span class="type-signature"></span>new WWebApi<span class="signature">(WOrm, url, db, getUserByToken, verifyUser, opt<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {Object}</span></h4>
68
68
 
69
69
 
70
70
 
@@ -80,7 +80,7 @@
80
80
 
81
81
  <dt class="tag-source">Source:</dt>
82
82
  <dd class="tag-source"><ul class="dummy"><li>
83
- <a href="WWebApi.mjs.html">WWebApi.mjs</a>, <a href="WWebApi.mjs.html#line78">line 78</a>
83
+ <a href="WWebApi.mjs.html">WWebApi.mjs</a>, <a href="WWebApi.mjs.html#line82">line 82</a>
84
84
  </li></ul></dd>
85
85
 
86
86
 
@@ -267,6 +267,78 @@
267
267
 
268
268
 
269
269
 
270
+ <tr>
271
+
272
+ <td class="name"><code>getUserByToken</code></td>
273
+
274
+
275
+ <td class="type">
276
+
277
+
278
+ <span class="param-type">function</span>
279
+
280
+
281
+
282
+
283
+ </td>
284
+
285
+
286
+ <td class="attributes">
287
+
288
+
289
+
290
+
291
+
292
+ </td>
293
+
294
+
295
+
296
+ <td class="default">
297
+
298
+ </td>
299
+
300
+
301
+ <td class="description last"><p>輸入處理函數,函數會傳入使用者token,通過此函數處理後並回傳使用者資訊物件,並至少須提供'id'、'email'、'name'、'isAdmin'欄位,且'isAdmin'限輸入'y'或'n',且輸入'y'時會複寫權限系統該使用者之'isAdmin'欄位值</p></td>
302
+ </tr>
303
+
304
+
305
+
306
+ <tr>
307
+
308
+ <td class="name"><code>verifyUser</code></td>
309
+
310
+
311
+ <td class="type">
312
+
313
+
314
+ <span class="param-type">function</span>
315
+
316
+
317
+
318
+
319
+ </td>
320
+
321
+
322
+ <td class="attributes">
323
+
324
+
325
+
326
+
327
+
328
+ </td>
329
+
330
+
331
+
332
+ <td class="default">
333
+
334
+ </td>
335
+
336
+
337
+ <td class="description last"><p>輸入處理函數,函數會傳入使用者資訊物件,通過此函數識別後回傳布林值,允許使用者回傳true,反之回傳false</p></td>
338
+ </tr>
339
+
340
+
341
+
270
342
  <tr>
271
343
 
272
344
  <td class="name"><code>opt</code></td>
@@ -372,13 +444,13 @@
372
444
 
373
445
  <tr>
374
446
 
375
- <td class="name"><code>getUserById</code></td>
447
+ <td class="name"><code>bCheckUser</code></td>
376
448
 
377
449
 
378
450
  <td class="type">
379
451
 
380
452
 
381
- <span class="param-type">function</span>
453
+ <span class="param-type">Boolean</span>
382
454
 
383
455
 
384
456
 
@@ -400,25 +472,25 @@
400
472
 
401
473
  <td class="default">
402
474
 
403
- <code>null</code>
475
+ <code>false</code>
404
476
 
405
477
  </td>
406
478
 
407
479
 
408
- <td class="description last"><p>輸入當bCheckUser=true時依照使用者ID取得使用者資訊物件函數,預設null</p></td>
480
+ <td class="description last"><p>輸入是否檢查使用者資訊布林值,預設false</p></td>
409
481
  </tr>
410
482
 
411
483
 
412
484
 
413
485
  <tr>
414
486
 
415
- <td class="name"><code>bCheckUser</code></td>
487
+ <td class="name"><code>getUserById</code></td>
416
488
 
417
489
 
418
490
  <td class="type">
419
491
 
420
492
 
421
- <span class="param-type">Boolean</span>
493
+ <span class="param-type">function</span>
422
494
 
423
495
 
424
496
 
@@ -440,12 +512,12 @@
440
512
 
441
513
  <td class="default">
442
514
 
443
- <code>true</code>
515
+ <code>null</code>
444
516
 
445
517
  </td>
446
518
 
447
519
 
448
- <td class="description last"><p>輸入是否檢查使用者資訊布林值,預設true</p></td>
520
+ <td class="description last"><p>輸入當bCheckUser=true時依照使用者ID取得使用者資訊物件函數,預設null</p></td>
449
521
  </tr>
450
522
 
451
523
 
@@ -480,12 +552,12 @@
480
552
 
481
553
  <td class="default">
482
554
 
483
- <code>true</code>
555
+ <code>false</code>
484
556
 
485
557
  </td>
486
558
 
487
559
 
488
- <td class="description last"><p>輸入使用ORM的select方法時是否自動刪除數據內isActive欄位之布林值,預設true</p></td>
560
+ <td class="description last"><p>輸入使用ORM的select方法時是否自動刪除數據內isActive欄位之布林值,預設false</p></td>
489
561
  </tr>
490
562
 
491
563
 
@@ -737,7 +809,7 @@
737
809
  <br class="clear">
738
810
 
739
811
  <footer>
740
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on Sun Apr 02 2023 18:21:09 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
812
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on Sun Jun 18 2023 21:26:11 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
741
813
  </footer>
742
814
 
743
815
  <script>prettyPrint();</script>
@@ -57,17 +57,19 @@ import iseobj from 'wsemi/src/iseobj.mjs'
57
57
  import isestr from 'wsemi/src/isestr.mjs'
58
58
  import ispint from 'wsemi/src/ispint.mjs'
59
59
  import isfun from 'wsemi/src/isfun.mjs'
60
+ import ispm from 'wsemi/src/ispm.mjs'
60
61
  import cint from 'wsemi/src/cint.mjs'
61
62
  import strleft from 'wsemi/src/strleft.mjs'
62
63
  import strdelleft from 'wsemi/src/strdelleft.mjs'
63
64
  import strright from 'wsemi/src/strright.mjs'
64
65
  import strdelright from 'wsemi/src/strdelright.mjs'
66
+ import pm2resolve from 'wsemi/src/pm2resolve.mjs'
65
67
  import b642str from 'wsemi/src/b642str.mjs'
66
68
  import fsIsFolder from 'wsemi/src/fsIsFolder.mjs'
67
69
  import replace from 'wsemi/src/replace.mjs'
68
70
  import WServHapiServer from 'w-serv-hapi/src/WServHapiServer.mjs'
69
- import ds from '../src/schema/index.mjs'
70
71
  import WServOrm from 'w-serv-orm/src/WServOrm.mjs'
72
+ import ds from '../src/schema/index.mjs'
71
73
 
72
74
 
73
75
  /**
@@ -77,11 +79,13 @@ import WServOrm from 'w-serv-orm/src/WServOrm.mjs'
77
79
  * @param {Function} WOrm 輸入資料庫ORM函數
78
80
  * @param {String} url 輸入資料庫連線字串,例如'mongodb://sername:password@$127.0.0.1:27017'
79
81
  * @param {String} db 輸入資料庫名稱字串
82
+ * @param {Function} getUserByToken 輸入處理函數,函數會傳入使用者token,通過此函數處理後並回傳使用者資訊物件,並至少須提供'id'、'email'、'name'、'isAdmin'欄位,且'isAdmin'限輸入'y'或'n',且輸入'y'時會複寫權限系統該使用者之'isAdmin'欄位值
83
+ * @param {Function} verifyUser 輸入處理函數,函數會傳入使用者資訊物件,通過此函數識別後回傳布林值,允許使用者回傳true,反之回傳false
80
84
  * @param {Object} [opt={}] 輸入設定物件,預設{}
81
85
  * @param {Integer} [opt.serverPort=11005] 輸入伺服器通訊port,預設11005
86
+ * @param {Boolean} [opt.bCheckUser=false] 輸入是否檢查使用者資訊布林值,預設false
82
87
  * @param {Function} [opt.getUserById=null] 輸入當bCheckUser=true時依照使用者ID取得使用者資訊物件函數,預設null
83
- * @param {Boolean} [opt.bCheckUser=true] 輸入是否檢查使用者資訊布林值,預設true
84
- * @param {Boolean} [opt.bExcludeWhenNotAdmin=true] 輸入使用ORM的select方法時是否自動刪除數據內isActive欄位之布林值,預設true
88
+ * @param {Boolean} [opt.bExcludeWhenNotAdmin=false] 輸入使用ORM的select方法時是否自動刪除數據內isActive欄位之布林值,預設false
85
89
  * @param {Object} [opt.webName={}] 輸入站台名稱物件,至少包含語系eng與cht鍵的名稱,預設{}
86
90
  * @param {Object} [opt.webDescription={}] 輸入站台描述物件,至少包含語系eng與cht鍵的名稱,預設{}
87
91
  * @param {String} [opt.webLogo=''] 輸入站台logo字串,採base64格式,預設''
@@ -122,7 +126,7 @@ import WServOrm from 'w-serv-orm/src/WServOrm.mjs'
122
126
  * })
123
127
  *
124
128
  */
125
- function WWebApi(WOrm, url, db, opt = {}) {
129
+ function WWebApi(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
126
130
  let instWServHapiServer = null
127
131
 
128
132
 
@@ -147,6 +151,20 @@ function WWebApi(WOrm, url, db, opt = {}) {
147
151
  }
148
152
 
149
153
 
154
+ //check getUserByToken
155
+ if (!isfun(getUserByToken)) {
156
+ console.log('invalid getUserByToken', getUserByToken)
157
+ throw new Error('invalid getUserByToken')
158
+ }
159
+
160
+
161
+ //check verifyUser
162
+ if (!isfun(verifyUser)) {
163
+ console.log('invalid verifyUser', verifyUser)
164
+ throw new Error('invalid verifyUser')
165
+ }
166
+
167
+
150
168
  //serverPort
151
169
  let serverPort = get(opt, 'serverPort')
152
170
  if (!ispint(serverPort)) {
@@ -217,9 +235,35 @@ function WWebApi(WOrm, url, db, opt = {}) {
217
235
  }
218
236
 
219
237
 
238
+ //verifyUserByToken
239
+ let verifyUserByToken = async (token) => {
240
+
241
+ //getUserByToken
242
+ let user = getUserByToken(token)
243
+ if (ispm(user)) {
244
+ user = await user
245
+ }
246
+ if (!iseobj(user)) {
247
+ return Promise.reject(`token does not have permission`)
248
+ }
249
+
250
+ //verifyUser
251
+ let b = verifyUser(user)
252
+ if (ispm(b)) {
253
+ b = await b
254
+ }
255
+
256
+ //check
257
+ if (!b) {
258
+ return Promise.reject(`user does not have permission`)
259
+ }
260
+
261
+ return user
262
+ }
263
+
220
264
  //getAPIsList
221
- let getAPIsList = async (userId, token) => {
222
- let rs = await woItems.apis.select()
265
+ let getAPIsList = async (query = {}) => {
266
+ let rs = await woItems.apis.select(query)
223
267
  return rs
224
268
  }
225
269
 
@@ -269,7 +313,7 @@ function WWebApi(WOrm, url, db, opt = {}) {
269
313
 
270
314
 
271
315
  //updateAPIs
272
- let updateAPIs = async (userId, params = {}) => {
316
+ let updateAPIs = async (params = {}) => {
273
317
 
274
318
  //spread params
275
319
  let { apis: rsApis } = params
@@ -284,7 +328,7 @@ function WWebApi(WOrm, url, db, opt = {}) {
284
328
 
285
329
 
286
330
  //replaceAPIsByLevels
287
- let replaceAPIsByLevels = async (userId, params = {}) => {
331
+ let replaceAPIsByLevels = async (params = {}) => {
288
332
 
289
333
  //spread params
290
334
  let { group, apis: rsApis } = params
@@ -313,11 +357,17 @@ function WWebApi(WOrm, url, db, opt = {}) {
313
357
  //subfolder
314
358
  let fnEntryIn = 'index.tmp'
315
359
  let fnEntryOut = 'index.html'
316
- let fpEntryIn = path.resolve(pathStaticFiles, fnEntryIn)
317
- let fpEntryOut = path.resolve(pathStaticFiles, fnEntryOut)
318
- let c = fs.readFileSync(fpEntryIn, 'utf8')
319
- c = replace(c, '{sfd}', subfolder)
320
- fs.writeFileSync(fpEntryOut, c, 'utf8')
360
+ try {
361
+ let fpEntryIn = path.resolve(pathStaticFiles, fnEntryIn)
362
+ let fpEntryOut = path.resolve(pathStaticFiles, fnEntryOut)
363
+ let c = fs.readFileSync(fpEntryIn, 'utf8')
364
+ c = replace(c, '{sfd}', subfolder)
365
+ fs.writeFileSync(fpEntryOut, c, 'utf8')
366
+ }
367
+ catch (err) {
368
+ console.log(err)
369
+ console.log(`can not generate ${fnEntryOut}`)
370
+ }
321
371
 
322
372
 
323
373
  //apis
@@ -340,16 +390,53 @@ function WWebApi(WOrm, url, db, opt = {}) {
340
390
  return getWebInfor()
341
391
  },
342
392
  },
393
+ {
394
+ method: 'GET',
395
+ path: '/api/getUserByToken', //未登入界面需先檢測token是否為系統管理員, 確認後回傳為系統管理員資訊物件, getUserByToken為w-ui-loginout預設值, 若要更改兩邊須同時修改
396
+ handler: async function (req, res) {
397
+ // console.log('getUserByToken', req)
398
+
399
+ async function core() {
400
+
401
+ //token
402
+ let token = get(req, 'query.token', '')
403
+
404
+ //verifyUserByToken
405
+ let user = await verifyUserByToken(token)
406
+
407
+ return user
408
+ }
409
+
410
+ //pm2resolve core
411
+ let r = await pm2resolve(core)() //w-ui-loginout接收已預設格式用pm2resolve轉過, 會提取state進行判斷
412
+ // console.log('getUserByToken', r)
413
+
414
+ return r
415
+ },
416
+ },
343
417
  {
344
418
  method: 'GET',
345
419
  path: '/getAPIsList',
346
420
  handler: async function (req, res) {
421
+ // console.log('getAPIsList', req)
422
+
423
+ async function core() {
424
+
425
+ //token
426
+ let token = get(req, 'query.token', '')
427
+
428
+ //verifyUserByToken
429
+ await verifyUserByToken(token)
347
430
 
348
- //token
349
- let token = get(req, 'query.token', '')
431
+ //getAPIsList
432
+ let r = await getAPIsList({ isActive: 'y' })
350
433
 
351
- //getAPIsList
352
- let r = await getAPIsList('', token)
434
+ return r
435
+ }
436
+
437
+ //pm2resolve core
438
+ let r = await pm2resolve(core)()
439
+ // console.log('verifyIdentity', r)
353
440
 
354
441
  return r
355
442
  },
@@ -358,14 +445,29 @@ function WWebApi(WOrm, url, db, opt = {}) {
358
445
  method: 'POST',
359
446
  path: '/updateAPIs',
360
447
  handler: async function (req, res) {
361
- // console.log(req, res)
448
+ // console.log('updateAPIs', req)
362
449
  // console.log('payload', req.payload)
363
450
 
364
- //parsePayload
365
- let inp = parsePayload(req)
451
+ async function core() {
452
+
453
+ //token
454
+ let token = get(req, 'query.token', '')
455
+
456
+ //verifyUserByToken
457
+ await verifyUserByToken(token)
458
+
459
+ //parsePayload
460
+ let inp = parsePayload(req)
461
+
462
+ //updateAPIs
463
+ let r = await updateAPIs(inp)
464
+
465
+ return r
466
+ }
366
467
 
367
- //updateAPIs
368
- let r = await updateAPIs('', inp)
468
+ //pm2resolve core
469
+ let r = await pm2resolve(core)()
470
+ // console.log('verifyIdentity', r)
369
471
 
370
472
  return r
371
473
  },
@@ -374,14 +476,29 @@ function WWebApi(WOrm, url, db, opt = {}) {
374
476
  method: 'POST',
375
477
  path: '/replaceAPIsByLevels',
376
478
  handler: async function (req, res) {
377
- // console.log(req, res)
479
+ // console.log('replaceAPIsByLevels', req)
378
480
  // console.log('payload', req.payload)
379
481
 
380
- //parsePayload
381
- let inp = parsePayload(req)
482
+ async function core() {
382
483
 
383
- //replaceAPIsByLevels
384
- let r = await replaceAPIsByLevels('', inp)
484
+ //token
485
+ let token = get(req, 'query.token', '')
486
+
487
+ //verifyUserByToken
488
+ await verifyUserByToken(token)
489
+
490
+ //parsePayload
491
+ let inp = parsePayload(req)
492
+
493
+ //replaceAPIsByLevels
494
+ let r = await replaceAPIsByLevels(inp)
495
+
496
+ return r
497
+ }
498
+
499
+ //pm2resolve core
500
+ let r = await pm2resolve(core)()
501
+ // console.log('verifyIdentity', r)
385
502
 
386
503
  return r
387
504
  },
@@ -403,7 +520,7 @@ function WWebApi(WOrm, url, db, opt = {}) {
403
520
  pathStaticFiles,
404
521
  apis,
405
522
  getUserIDFromToken: async (token) => { //可使用async或sync函數
406
- return 'id-for-admin'
523
+ return ''
407
524
  },
408
525
  useDbORM: true,
409
526
  dbORMs: woItems,
@@ -413,7 +530,9 @@ function WWebApi(WOrm, url, db, opt = {}) {
413
530
  tableNamesSync,
414
531
  extFuncs: { //接收參數第1個為userId, 之後才是前端給予參數
415
532
  getWebInfor,
416
- getAPIsList,
533
+ getAPIsList: (userId, query = {}) => {
534
+ return getAPIsList(query)
535
+ },
417
536
  //...
418
537
  },
419
538
  hookBefores: null,
@@ -441,7 +560,7 @@ export default WWebApi
441
560
  <br class="clear">
442
561
 
443
562
  <footer>
444
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on Sun Apr 02 2023 18:21:09 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
563
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on Sun Jun 18 2023 21:26:11 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
445
564
  </footer>
446
565
 
447
566
  <script>prettyPrint();</script>
package/docs/index.html CHANGED
@@ -71,7 +71,7 @@
71
71
  <br class="clear">
72
72
 
73
73
  <footer>
74
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on Sun Apr 02 2023 18:21:09 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
74
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on Sun Jun 18 2023 21:26:11 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
75
75
  </footer>
76
76
 
77
77
  <script>prettyPrint();</script>
package/package.json CHANGED
@@ -1,17 +1,18 @@
1
1
  {
2
2
  "name": "w-web-api",
3
- "version": "1.0.23",
3
+ "version": "1.0.25",
4
4
  "main": "dist/w-web-api.umd.js",
5
5
  "dependencies": {
6
6
  "@mdi/js": "^7.2.96",
7
7
  "axios": "^1.3.4",
8
8
  "lodash": "^4.17.21",
9
9
  "showdown": "^2.1.0",
10
- "w-component-vue": "^2.2.76",
10
+ "w-component-vue": "^2.3.0",
11
11
  "w-data-collector": "^1.0.19",
12
12
  "w-serv-hapi": "^1.0.11",
13
- "w-serv-orm": "^1.0.6",
14
- "wsemi": "^1.7.2"
13
+ "w-serv-orm": "^1.0.7",
14
+ "w-ui-loginout": "^1.0.2",
15
+ "wsemi": "^1.7.12"
15
16
  },
16
17
  "devDependencies": {
17
18
  "@vue/cli-plugin-babel": "^5.0.8",