w-web-api 1.0.42 → 1.0.44
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/db/wapis/apis/data.mdb +0 -0
- package/db/wapis/apis/lock.mdb +0 -0
- package/dist/css/{app.02bbf3c6.css → app.e271a5ec.css} +1 -1
- package/dist/index.tmp +1 -1
- package/dist/js/app-legacy.cb986a90.js +2 -0
- package/dist/js/{app-legacy.d2226e7d.js.map → app-legacy.cb986a90.js.map} +1 -1
- package/dist/js/app.cb986a90.js +2 -0
- package/dist/js/{app.d2226e7d.js.map → app.cb986a90.js.map} +1 -1
- package/dist/js/chunk-vendors-legacy.6d32dea7.js +14 -0
- package/dist/js/chunk-vendors-legacy.6d32dea7.js.map +1 -0
- package/dist/js/chunk-vendors.6d32dea7.js +14 -0
- package/dist/js/chunk-vendors.6d32dea7.js.map +1 -0
- package/dist/w-web-api.umd.js +2 -2
- package/dist/w-web-api.umd.js.map +1 -1
- package/docs/WWebApi.html +2 -2
- package/docs/WWebApi.mjs.html +238 -167
- package/docs/index.html +1 -1
- package/g.provideApis.mjs +53 -0
- package/package.json +6 -6
- package/server/WWebApi.mjs +237 -166
- package/server/provideTabs.mjs +89 -0
- package/srv.mjs +2 -2
- package/tableTags.json +1 -1
- package/dist/js/app-legacy.d2226e7d.js +0 -2
- package/dist/js/app.d2226e7d.js +0 -2
- package/dist/js/chunk-vendors-legacy.10dbc55a.js +0 -14
- package/dist/js/chunk-vendors-legacy.10dbc55a.js.map +0 -1
- package/dist/js/chunk-vendors.10dbc55a.js +0 -14
- package/dist/js/chunk-vendors.10dbc55a.js.map +0 -1
- package/server/provideApis.mjs +0 -74
package/server/WWebApi.mjs
CHANGED
|
@@ -2,6 +2,7 @@ import path from 'path'
|
|
|
2
2
|
import fs from 'fs'
|
|
3
3
|
import get from 'lodash-es/get.js'
|
|
4
4
|
import each from 'lodash-es/each.js'
|
|
5
|
+
import map from 'lodash-es/map.js'
|
|
5
6
|
import keys from 'lodash-es/keys.js'
|
|
6
7
|
import j2o from 'wsemi/src/j2o.mjs'
|
|
7
8
|
import iseobj from 'wsemi/src/iseobj.mjs'
|
|
@@ -18,6 +19,7 @@ import strright from 'wsemi/src/strright.mjs'
|
|
|
18
19
|
import strdelright from 'wsemi/src/strdelright.mjs'
|
|
19
20
|
import pm2resolve from 'wsemi/src/pm2resolve.mjs'
|
|
20
21
|
import b642str from 'wsemi/src/b642str.mjs'
|
|
22
|
+
import ltdtmapping from 'wsemi/src/ltdtmapping.mjs'
|
|
21
23
|
import fsIsFolder from 'wsemi/src/fsIsFolder.mjs'
|
|
22
24
|
import fsIsFile from 'wsemi/src/fsIsFile.mjs'
|
|
23
25
|
import replace from 'wsemi/src/replace.mjs'
|
|
@@ -378,129 +380,139 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
|
|
|
378
380
|
}
|
|
379
381
|
|
|
380
382
|
|
|
381
|
-
//getAPIsList
|
|
382
|
-
let getAPIsList = async (query = {}) => {
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
}
|
|
383
|
+
// //getAPIsList
|
|
384
|
+
// let getAPIsList = async (query = {}) => {
|
|
385
|
+
// let rs = await woItems.apis.select(query)
|
|
386
|
+
// return rs
|
|
387
|
+
// }
|
|
386
388
|
|
|
387
389
|
|
|
388
390
|
//parsePayload
|
|
389
391
|
let parsePayload = async (req) => {
|
|
390
392
|
|
|
391
|
-
//
|
|
392
|
-
let
|
|
393
|
+
//payload
|
|
394
|
+
let payload = get(req, 'payload')
|
|
393
395
|
|
|
394
396
|
//to obj
|
|
395
|
-
if (isestr(
|
|
396
|
-
|
|
397
|
+
if (isestr(payload)) {
|
|
398
|
+
payload = j2o(payload)
|
|
397
399
|
}
|
|
398
400
|
|
|
399
401
|
//check
|
|
400
|
-
if (!iseobj(
|
|
401
|
-
console.log('
|
|
402
|
-
console.log(`invalid
|
|
403
|
-
return Promise.reject(`invalid
|
|
402
|
+
if (!iseobj(payload)) {
|
|
403
|
+
console.log('payload', payload)
|
|
404
|
+
console.log(`invalid payload in req`)
|
|
405
|
+
return Promise.reject(`invalid payload in req`)
|
|
404
406
|
}
|
|
405
407
|
|
|
406
408
|
//group
|
|
407
|
-
let group = get(
|
|
409
|
+
let group = get(payload, 'group', '')
|
|
408
410
|
|
|
409
411
|
//check
|
|
410
412
|
if (!isestr(group)) {
|
|
411
|
-
console.log('
|
|
412
|
-
console.log(
|
|
413
|
-
|
|
414
|
-
return Promise.reject(`invalid group from inp`)
|
|
413
|
+
console.log('payload', payload)
|
|
414
|
+
console.log(`invalid group in payload`)
|
|
415
|
+
return Promise.reject(`invalid group in payload`)
|
|
415
416
|
}
|
|
416
417
|
|
|
417
|
-
//
|
|
418
|
-
let
|
|
418
|
+
//rows
|
|
419
|
+
let rows = get(payload, 'rows', [])
|
|
419
420
|
|
|
420
421
|
//check
|
|
421
|
-
if (!isearr(
|
|
422
|
-
console.log('
|
|
423
|
-
console.log(
|
|
424
|
-
|
|
425
|
-
return Promise.reject(`invalid apis from inp`)
|
|
422
|
+
if (!isearr(rows)) {
|
|
423
|
+
console.log('payload', payload)
|
|
424
|
+
console.log(`invalid rows in payload`)
|
|
425
|
+
return Promise.reject(`invalid rows in payload`)
|
|
426
426
|
}
|
|
427
427
|
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
if (isestr(v)) {
|
|
434
|
-
if (strleft(v, 7) === 'base64:') {
|
|
435
|
-
// console.log(k, 'get base64')
|
|
436
|
-
v = strdelleft(v, 7)
|
|
437
|
-
v = b642str(v)
|
|
438
|
-
// console.log(v)
|
|
439
|
-
apis[kapi][k] = v
|
|
440
|
-
}
|
|
441
|
-
}
|
|
442
|
-
})
|
|
443
|
-
})
|
|
444
|
-
|
|
445
|
-
//save group
|
|
446
|
-
each(apis, (api, kapi) => {
|
|
447
|
-
apis[kapi].group = group
|
|
448
|
-
})
|
|
449
|
-
|
|
450
|
-
//resave
|
|
451
|
-
inp = { group, apis }
|
|
428
|
+
//r
|
|
429
|
+
let r = {
|
|
430
|
+
group,
|
|
431
|
+
rows,
|
|
432
|
+
}
|
|
452
433
|
|
|
453
|
-
return
|
|
434
|
+
return r
|
|
454
435
|
}
|
|
455
436
|
|
|
456
437
|
|
|
457
|
-
//updateAPIs
|
|
458
|
-
let updateAPIs = async (
|
|
438
|
+
// //updateAPIs
|
|
439
|
+
// let updateAPIs = async (inp = {}) => {
|
|
459
440
|
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
441
|
+
// //spread inp
|
|
442
|
+
// let { apis: rsApis } = inp
|
|
443
|
+
// // console.log('group', group)
|
|
444
|
+
// // console.log('rsApis', rsApis)
|
|
464
445
|
|
|
465
|
-
|
|
466
|
-
|
|
446
|
+
// //save
|
|
447
|
+
// let r = await woItems.apis.save(rsApis)
|
|
467
448
|
|
|
468
|
-
|
|
469
|
-
}
|
|
449
|
+
// return r
|
|
450
|
+
// }
|
|
470
451
|
|
|
471
452
|
|
|
472
|
-
//
|
|
473
|
-
let
|
|
453
|
+
//syncAndReplaceTabs
|
|
454
|
+
let syncAndReplaceTabs = async (userId, inp, keyTable) => {
|
|
474
455
|
|
|
475
456
|
//group
|
|
476
|
-
let group = get(
|
|
457
|
+
let group = get(inp, 'group', '')
|
|
477
458
|
// console.log('group', group)
|
|
478
459
|
|
|
479
460
|
//check
|
|
480
461
|
if (!isestr(group)) {
|
|
481
|
-
console.log('
|
|
462
|
+
console.log('inp', inp)
|
|
482
463
|
console.log('group', group)
|
|
483
464
|
console.log(`invalid group`)
|
|
484
465
|
return Promise.reject(`invalid group`)
|
|
485
466
|
}
|
|
486
467
|
|
|
487
|
-
//
|
|
488
|
-
let
|
|
489
|
-
// console.log('
|
|
468
|
+
//rows
|
|
469
|
+
let rows = get(inp, 'rows', [])
|
|
470
|
+
// console.log('rows', rows)
|
|
490
471
|
|
|
491
472
|
//check
|
|
492
|
-
if (!isearr(
|
|
493
|
-
console.log('
|
|
494
|
-
console.log('
|
|
495
|
-
|
|
496
|
-
return Promise.reject(`invalid apis`)
|
|
473
|
+
if (!isearr(rows)) {
|
|
474
|
+
console.log('inp', inp)
|
|
475
|
+
console.log('keyTable', keyTable)
|
|
476
|
+
return Promise.reject(`invalid rows`)
|
|
497
477
|
}
|
|
498
478
|
|
|
479
|
+
//save from
|
|
480
|
+
rows = map(rows, (v, k) => {
|
|
481
|
+
// v.order = k + 1 //order大部分由外部給予, 不能複寫
|
|
482
|
+
v.group = group
|
|
483
|
+
return v
|
|
484
|
+
})
|
|
485
|
+
|
|
486
|
+
//偵測b64自動恢復
|
|
487
|
+
if (keyTable === 'apis') {
|
|
488
|
+
each(rows, (row, krow) => {
|
|
489
|
+
// console.log(kapi, row.name)
|
|
490
|
+
each(row, (v, k) => {
|
|
491
|
+
// console.log(k, v)
|
|
492
|
+
if (isestr(v)) {
|
|
493
|
+
if (strleft(v, 7) === 'base64:') {
|
|
494
|
+
// console.log(k, 'get base64')
|
|
495
|
+
v = strdelleft(v, 7)
|
|
496
|
+
v = b642str(v)
|
|
497
|
+
// console.log(v)
|
|
498
|
+
rows[krow][k] = v
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
})
|
|
502
|
+
})
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
//ltdtmapping
|
|
506
|
+
rows = ltdtmapping(rows, ds[keyTable].keys)
|
|
507
|
+
// console.log('ltdtmapping rows', rows)
|
|
508
|
+
|
|
499
509
|
//delAll group
|
|
500
|
-
await woItems.
|
|
510
|
+
await woItems[keyTable].delAll({ group })
|
|
501
511
|
|
|
502
512
|
//insert
|
|
503
|
-
let r = await woItems.
|
|
513
|
+
// let r = await woItems[keyTable].insert(rows)
|
|
514
|
+
let r = await procOrm(userId, keyTable, 'insert', rows) //須使用procOrm才有辦法自動給予相關欄位
|
|
515
|
+
// console.log('r', r)
|
|
504
516
|
|
|
505
517
|
return r
|
|
506
518
|
}
|
|
@@ -542,21 +554,10 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
|
|
|
542
554
|
|
|
543
555
|
//apis
|
|
544
556
|
let apis = [
|
|
545
|
-
// {
|
|
546
|
-
// method: 'GET',
|
|
547
|
-
// path: '/api/someAPI',
|
|
548
|
-
// handler: async function (req, res) {
|
|
549
|
-
|
|
550
|
-
// // //token
|
|
551
|
-
// // let token = get(req, 'query.token', '')
|
|
552
|
-
|
|
553
|
-
// return 'someAPI'
|
|
554
|
-
// },
|
|
555
|
-
// },
|
|
556
557
|
|
|
557
558
|
{
|
|
558
559
|
method: 'GET',
|
|
559
|
-
path: '/api/getUserByToken',
|
|
560
|
+
path: '/api/getUserByToken', //未登入主頁時需先檢測token, getUserByToken為w-ui-loginout預設值, 若要更改兩邊須同時修改
|
|
560
561
|
handler: async function (req, res) {
|
|
561
562
|
// console.log('getUserByToken', req)
|
|
562
563
|
|
|
@@ -565,6 +566,15 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
|
|
|
565
566
|
//token
|
|
566
567
|
let token = get(req, 'query.token', '')
|
|
567
568
|
|
|
569
|
+
//check
|
|
570
|
+
if (!isestr(token)) {
|
|
571
|
+
console.log('req.query', get(req, 'query'))
|
|
572
|
+
console.log('token', token)
|
|
573
|
+
console.log('[API]getUserByToken/check token: invalid token')
|
|
574
|
+
console.log(`token does not have permission`)
|
|
575
|
+
return Promise.reject(`token does not have permission`)
|
|
576
|
+
}
|
|
577
|
+
|
|
568
578
|
//getAndVerifyClientUser
|
|
569
579
|
let user = await getAndVerifyClientUser(token, 'getUserByToken')
|
|
570
580
|
|
|
@@ -589,49 +599,112 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
|
|
|
589
599
|
return r
|
|
590
600
|
},
|
|
591
601
|
},
|
|
592
|
-
{
|
|
593
|
-
method: 'GET',
|
|
594
|
-
path: '/getAPIsList',
|
|
595
|
-
handler: async function (req, res) {
|
|
596
|
-
// console.log('getAPIsList', req)
|
|
597
|
-
|
|
598
|
-
async function core() {
|
|
599
|
-
|
|
600
|
-
//token
|
|
601
|
-
let token = get(req, 'query.token', '')
|
|
602
|
-
|
|
603
|
-
//getAndVerifyClientUser
|
|
604
|
-
let user = await getAndVerifyClientUser(token, 'getAPIsList')
|
|
605
|
-
|
|
606
|
-
//check
|
|
607
|
-
if (!iseobj(user)) {
|
|
608
|
-
console.log('token', token)
|
|
609
|
-
console.log('[API]getAPIsList/check user: invalid user')
|
|
610
|
-
console.log(`token does not have permission`)
|
|
611
|
-
return Promise.reject(`token does not have permission`)
|
|
612
|
-
}
|
|
613
|
-
|
|
614
|
-
//getAPIsList
|
|
615
|
-
let r = await getAPIsList({ isActive: 'y' })
|
|
616
602
|
|
|
617
|
-
|
|
618
|
-
|
|
603
|
+
// {
|
|
604
|
+
// method: 'GET',
|
|
605
|
+
// path: '/getAPIsList',
|
|
606
|
+
// handler: async function (req, res) {
|
|
607
|
+
// // console.log('getAPIsList', req)
|
|
608
|
+
|
|
609
|
+
// async function core() {
|
|
610
|
+
|
|
611
|
+
// //token
|
|
612
|
+
// let token = get(req, 'query.token', '')
|
|
613
|
+
|
|
614
|
+
// //check
|
|
615
|
+
// if (!isestr(token)) {
|
|
616
|
+
// console.log('req.query', get(req, 'query'))
|
|
617
|
+
// console.log('token', token)
|
|
618
|
+
// console.log('[API]getAPIsList/check token: invalid token')
|
|
619
|
+
// console.log(`token does not have permission`)
|
|
620
|
+
// return Promise.reject(`token does not have permission`)
|
|
621
|
+
// }
|
|
622
|
+
|
|
623
|
+
// //getAndVerifyClientUser
|
|
624
|
+
// let user = await getAndVerifyClientUser(token, 'getAPIsList')
|
|
625
|
+
|
|
626
|
+
// //check
|
|
627
|
+
// if (!iseobj(user)) {
|
|
628
|
+
// console.log('token', token)
|
|
629
|
+
// console.log('[API]getAPIsList/check user: invalid user')
|
|
630
|
+
// console.log(`token does not have permission`)
|
|
631
|
+
// return Promise.reject(`token does not have permission`)
|
|
632
|
+
// }
|
|
633
|
+
|
|
634
|
+
// //getAPIsList
|
|
635
|
+
// let r = await getAPIsList({ isActive: 'y' })
|
|
636
|
+
|
|
637
|
+
// return r
|
|
638
|
+
// }
|
|
639
|
+
|
|
640
|
+
// //pm2resolve core
|
|
641
|
+
// let r = await pm2resolve(core)()
|
|
642
|
+
// if (isErr(r.msg)) {
|
|
643
|
+
// r.msg = r.msg.message
|
|
644
|
+
// }
|
|
645
|
+
// // console.log('getAPIsList', r)
|
|
646
|
+
|
|
647
|
+
// return r
|
|
648
|
+
// },
|
|
649
|
+
// },
|
|
619
650
|
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
651
|
+
// {
|
|
652
|
+
// method: 'POST',
|
|
653
|
+
// path: '/updateAPIs',
|
|
654
|
+
// handler: async function (req, res) {
|
|
655
|
+
// // console.log('updateAPIs', req)
|
|
656
|
+
// // console.log('payload', req.payload)
|
|
657
|
+
|
|
658
|
+
// async function core() {
|
|
659
|
+
|
|
660
|
+
// //token
|
|
661
|
+
// let token = get(req, 'query.token', '')
|
|
662
|
+
|
|
663
|
+
// //check
|
|
664
|
+
// if (!isestr(token)) {
|
|
665
|
+
// console.log('req.query', get(req, 'query'))
|
|
666
|
+
// console.log('token', token)
|
|
667
|
+
// console.log('[API]updateAPIs/check token: invalid token')
|
|
668
|
+
// console.log(`token does not have permission`)
|
|
669
|
+
// return Promise.reject(`token does not have permission`)
|
|
670
|
+
// }
|
|
671
|
+
|
|
672
|
+
// //getAndVerifyClientUser
|
|
673
|
+
// let user = await getAndVerifyClientUser(token, 'updateAPIs')
|
|
674
|
+
|
|
675
|
+
// //check
|
|
676
|
+
// if (!iseobj(user)) {
|
|
677
|
+
// console.log('token', token)
|
|
678
|
+
// console.log('[API]updateAPIs/check user: invalid user')
|
|
679
|
+
// console.log(`token does not have permission`)
|
|
680
|
+
// return Promise.reject(`token does not have permission`)
|
|
681
|
+
// }
|
|
682
|
+
|
|
683
|
+
// //parsePayload
|
|
684
|
+
// let inp = await parsePayload(req)
|
|
685
|
+
|
|
686
|
+
// //updateAPIs
|
|
687
|
+
// let r = await updateAPIs(inp)
|
|
688
|
+
|
|
689
|
+
// return r
|
|
690
|
+
// }
|
|
691
|
+
|
|
692
|
+
// //pm2resolve core
|
|
693
|
+
// let r = await pm2resolve(core)()
|
|
694
|
+
// if (isErr(r.msg)) {
|
|
695
|
+
// r.msg = r.msg.message
|
|
696
|
+
// }
|
|
697
|
+
// // console.log('updateAPIs', r)
|
|
698
|
+
|
|
699
|
+
// return r
|
|
700
|
+
// },
|
|
701
|
+
// },
|
|
626
702
|
|
|
627
|
-
return r
|
|
628
|
-
},
|
|
629
|
-
},
|
|
630
703
|
{
|
|
631
704
|
method: 'POST',
|
|
632
|
-
path: '/
|
|
705
|
+
path: '/syncAndReplaceTabs',
|
|
633
706
|
handler: async function (req, res) {
|
|
634
|
-
// console.log('
|
|
707
|
+
// console.log('syncAndReplaceTabs', req)
|
|
635
708
|
// console.log('payload', req.payload)
|
|
636
709
|
|
|
637
710
|
async function core() {
|
|
@@ -639,55 +712,53 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
|
|
|
639
712
|
//token
|
|
640
713
|
let token = get(req, 'query.token', '')
|
|
641
714
|
|
|
642
|
-
//getAndVerifyClientUser
|
|
643
|
-
let user = await getAndVerifyClientUser(token, 'updateAPIs')
|
|
644
|
-
|
|
645
715
|
//check
|
|
646
|
-
if (!
|
|
716
|
+
if (!isestr(token)) {
|
|
717
|
+
console.log('req.query', get(req, 'query'))
|
|
647
718
|
console.log('token', token)
|
|
648
|
-
console.log('[API]
|
|
719
|
+
console.log('[API]syncAndReplaceTabs/check token: invalid token')
|
|
649
720
|
console.log(`token does not have permission`)
|
|
650
721
|
return Promise.reject(`token does not have permission`)
|
|
651
722
|
}
|
|
652
723
|
|
|
653
|
-
//
|
|
654
|
-
let
|
|
655
|
-
|
|
656
|
-
//updateAPIs
|
|
657
|
-
let r = await updateAPIs(inp)
|
|
658
|
-
|
|
659
|
-
return r
|
|
660
|
-
}
|
|
661
|
-
|
|
662
|
-
//pm2resolve core
|
|
663
|
-
let r = await pm2resolve(core)()
|
|
664
|
-
if (isErr(r.msg)) {
|
|
665
|
-
r.msg = r.msg.message
|
|
666
|
-
}
|
|
667
|
-
// console.log('updateAPIs', r)
|
|
668
|
-
|
|
669
|
-
return r
|
|
670
|
-
},
|
|
671
|
-
},
|
|
672
|
-
{
|
|
673
|
-
method: 'POST',
|
|
674
|
-
path: '/syncAndReplaceApis',
|
|
675
|
-
handler: async function (req, res) {
|
|
676
|
-
// console.log('syncAndReplaceApis', req)
|
|
677
|
-
// console.log('payload', req.payload)
|
|
724
|
+
//keyTable
|
|
725
|
+
let keyTable = get(req, 'query.keyTable', '')
|
|
678
726
|
|
|
679
|
-
|
|
727
|
+
//check
|
|
728
|
+
if (!isestr(keyTable)) {
|
|
729
|
+
console.log('req.query', get(req, 'query'))
|
|
730
|
+
console.log('keyTable', keyTable)
|
|
731
|
+
console.log('[API]syncAndReplaceTabs/check keyTable: invalid keyTable')
|
|
732
|
+
console.log(`token does not have permission`)
|
|
733
|
+
return Promise.reject(`token does not have permission`)
|
|
734
|
+
}
|
|
680
735
|
|
|
681
|
-
//
|
|
682
|
-
let
|
|
736
|
+
//check keyTable
|
|
737
|
+
let allowedTables = ['apis']
|
|
738
|
+
if (!allowedTables.includes(keyTable)) {
|
|
739
|
+
console.log('[API]syncAndReplaceTabs/check keyTable: unexpected keyTable', keyTable)
|
|
740
|
+
return Promise.reject(`invalid keyTable: ${keyTable}`)
|
|
741
|
+
}
|
|
683
742
|
|
|
684
743
|
//getAndVerifyAppUser
|
|
685
|
-
let user = await getAndVerifyAppUser(token, '
|
|
744
|
+
let user = await getAndVerifyAppUser(token, 'syncAndReplaceTabs')
|
|
686
745
|
|
|
687
746
|
//check
|
|
688
747
|
if (!iseobj(user)) {
|
|
689
748
|
console.log('token', token)
|
|
690
|
-
console.log('[API]
|
|
749
|
+
console.log('[API]syncAndReplaceTabs/check user: invalid user')
|
|
750
|
+
console.log(`token does not have permission`)
|
|
751
|
+
return Promise.reject(`token does not have permission`)
|
|
752
|
+
}
|
|
753
|
+
|
|
754
|
+
//userId
|
|
755
|
+
let userId = get(user, 'id', '')
|
|
756
|
+
|
|
757
|
+
//check userId
|
|
758
|
+
if (!isestr(userId)) {
|
|
759
|
+
console.log('token', token)
|
|
760
|
+
console.log('user', user)
|
|
761
|
+
console.log('[API]syncAndReplaceTabs/check userId: invalid userId')
|
|
691
762
|
console.log(`token does not have permission`)
|
|
692
763
|
return Promise.reject(`token does not have permission`)
|
|
693
764
|
}
|
|
@@ -695,8 +766,8 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
|
|
|
695
766
|
//parsePayload
|
|
696
767
|
let inp = await parsePayload(req)
|
|
697
768
|
|
|
698
|
-
//
|
|
699
|
-
let r = await
|
|
769
|
+
//syncAndReplaceTabs
|
|
770
|
+
let r = await syncAndReplaceTabs(userId, inp, keyTable)
|
|
700
771
|
|
|
701
772
|
return r
|
|
702
773
|
}
|
|
@@ -706,11 +777,12 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
|
|
|
706
777
|
if (isErr(r.msg)) {
|
|
707
778
|
r.msg = r.msg.message
|
|
708
779
|
}
|
|
709
|
-
// console.log('
|
|
780
|
+
// console.log('syncAndReplaceTabs', r)
|
|
710
781
|
|
|
711
782
|
return r
|
|
712
783
|
},
|
|
713
784
|
},
|
|
785
|
+
|
|
714
786
|
]
|
|
715
787
|
|
|
716
788
|
|
|
@@ -772,11 +844,10 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
|
|
|
772
844
|
|
|
773
845
|
getWebInfor,
|
|
774
846
|
|
|
775
|
-
getAPIsList: (userId, query = {}) => {
|
|
776
|
-
|
|
777
|
-
},
|
|
778
|
-
|
|
779
|
-
// updateApis: (userId, rows) => {
|
|
847
|
+
// getAPIsList: (userId, query = {}) => { //待提供api管理系統界面使用
|
|
848
|
+
// return getAPIsList(query)
|
|
849
|
+
// },
|
|
850
|
+
// updateApis: (userId, rows) => { //待提供api管理系統界面使用
|
|
780
851
|
// return updateApis(rows)
|
|
781
852
|
// },
|
|
782
853
|
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import axios from 'axios'
|
|
2
|
+
import get from 'lodash-es/get.js'
|
|
3
|
+
import genPm from 'wsemi/src/genPm.mjs'
|
|
4
|
+
import haskey from 'wsemi/src/haskey.mjs'
|
|
5
|
+
import ltdtpick from 'wsemi/src/ltdtpick.mjs'
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
//kpKs
|
|
9
|
+
let ks_apis = [
|
|
10
|
+
'id', //'id-for-apis-pets-guineapigs-1'
|
|
11
|
+
'order', //0
|
|
12
|
+
'name', //'取得天竺鼠清單資訊'
|
|
13
|
+
'description', //'取得天竺鼠清單資訊'
|
|
14
|
+
'url', //指api網址, 例如 http://localhost:11005/getDogsList
|
|
15
|
+
'method', //'get'
|
|
16
|
+
'version', //'v1'
|
|
17
|
+
'group', //'寵物'
|
|
18
|
+
'levels', //'寵物.天竺鼠'
|
|
19
|
+
'keywords', //'pets;guineapigs'
|
|
20
|
+
'state', //'ok'
|
|
21
|
+
'creator', //'pets-system'
|
|
22
|
+
'dataSource', //'pets-data'
|
|
23
|
+
'mdInputParams', //輸入方式說明, markdown格式
|
|
24
|
+
'inputExample', //輸入範例數據
|
|
25
|
+
'mdOutputParams', //輸出方式說明, markdown格式
|
|
26
|
+
'outputExample', //輸出範例數據, json格式
|
|
27
|
+
]
|
|
28
|
+
let kpKs = {
|
|
29
|
+
ks_apis,
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
async function provideTabs(url, keyTable, group, rows) {
|
|
34
|
+
//url: 伺服器提供的接入網址, 例如 http://localhost:11005/syncAndReplaceTabs?token={token}&keyTable={keyTable}
|
|
35
|
+
//keyTable: 資料表名
|
|
36
|
+
//group: 指陣列數據所屬群組
|
|
37
|
+
//rows: 陣列數據
|
|
38
|
+
|
|
39
|
+
//pm
|
|
40
|
+
let pm = genPm()
|
|
41
|
+
|
|
42
|
+
//ks
|
|
43
|
+
if (!haskey(kpKs, `ks_${keyTable}`)) {
|
|
44
|
+
return Promise.reject(`invalid keyTable[${keyTable}]`)
|
|
45
|
+
}
|
|
46
|
+
let ks = kpKs[`ks_${keyTable}`]
|
|
47
|
+
// console.log('ks', ks)
|
|
48
|
+
|
|
49
|
+
//ltdtpick
|
|
50
|
+
rows = ltdtpick(rows, ks)
|
|
51
|
+
// console.log('rows', rows)
|
|
52
|
+
|
|
53
|
+
//rin
|
|
54
|
+
let rin = {
|
|
55
|
+
group,
|
|
56
|
+
rows,
|
|
57
|
+
}
|
|
58
|
+
// console.log('rin', rin)
|
|
59
|
+
|
|
60
|
+
//axios
|
|
61
|
+
await axios({
|
|
62
|
+
method: 'post',
|
|
63
|
+
url,
|
|
64
|
+
headers: { 'Content-Type': 'application/json; charset=utf-8' },
|
|
65
|
+
data: rin,
|
|
66
|
+
})
|
|
67
|
+
.then((res) => {
|
|
68
|
+
// console.log('then', res)
|
|
69
|
+
let data = get(res, 'data')
|
|
70
|
+
let state = get(data, 'state')
|
|
71
|
+
let msg = get(data, 'msg', '')
|
|
72
|
+
if (state === 'success') {
|
|
73
|
+
pm.resolve(msg)
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
pm.reject(msg)
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
})
|
|
80
|
+
.catch((err) => {
|
|
81
|
+
// console.log('catch', err)
|
|
82
|
+
pm.reject(err)
|
|
83
|
+
})
|
|
84
|
+
|
|
85
|
+
return pm
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
export default provideTabs
|
package/srv.mjs
CHANGED
|
@@ -55,15 +55,15 @@ let getUserByToken = async (token) => {
|
|
|
55
55
|
|
|
56
56
|
let verifyClientUser = (user, from) => {
|
|
57
57
|
console.log('verifyClientUser/user', user)
|
|
58
|
-
// return false //測試無法登入
|
|
59
58
|
console.log('於生產環境時得加入限制瀏覽器使用者身份機制')
|
|
59
|
+
// return false //測試無法登入
|
|
60
60
|
return user.isAdmin === 'y' //測試僅系統管理者使用
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
let verifyAppUser = (user, from) => {
|
|
64
64
|
console.log('verifyAppUser/user', user)
|
|
65
|
-
// return false //測試無法登入
|
|
66
65
|
console.log('於生產環境時得加入限制應用程式使用者身份機制')
|
|
66
|
+
// return false //測試無法登入
|
|
67
67
|
return user.isAdmin === 'y' //測試僅系統管理者使用
|
|
68
68
|
}
|
|
69
69
|
|
package/tableTags.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"apis":"2025-07-
|
|
1
|
+
{"apis":"2025-07-20T22:07:21+08:00|DSiCoa"}
|