w-web-api 1.0.39 → 1.0.41
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/README.md +2 -2
- package/db/wapis/apis/data.mdb +0 -0
- package/db/wapis/apis/lock.mdb +0 -0
- package/dist/css/{app.99a58617.css → app.02bbf3c6.css} +1 -1
- package/dist/index.tmp +2 -2
- package/dist/js/app-legacy.d2226e7d.js +2 -0
- package/dist/js/app-legacy.d2226e7d.js.map +1 -0
- package/dist/js/app.d2226e7d.js +2 -0
- package/dist/js/app.d2226e7d.js.map +1 -0
- package/dist/js/{chunk-vendors.767ef893.js → chunk-vendors-legacy.10dbc55a.js} +3 -3
- package/dist/js/chunk-vendors-legacy.10dbc55a.js.map +1 -0
- package/dist/js/{chunk-vendors-legacy.767ef893.js → chunk-vendors.10dbc55a.js} +3 -3
- package/dist/js/chunk-vendors.10dbc55a.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 +3 -3
- package/docs/WWebApi.mjs.html +108 -22
- package/docs/index.html +1 -1
- package/package.json +6 -6
- package/public/index.html +1 -1
- package/script.txt +0 -1
- package/server/WWebApi.mjs +107 -21
- package/server/provideApis.mjs +15 -12
- package/src/App.vue +25 -4
- package/src/components/Layout.vue +56 -26
- package/src/components/LayoutContent.vue +51 -37
- package/src/components/LayoutState.vue +20 -8
- package/src/main.js +17 -20
- package/src/plugins/mLang.mjs +250 -0
- package/src/plugins/mUI.mjs +140 -51
- package/src/schema/tables/apis.mjs +6 -8
- package/src/store/mutations.mjs +8 -102
- package/src/store/types.mjs +1 -1
- package/srv.mjs +2 -2
- package/tableTags.json +1 -1
- package/dist/js/app-legacy.f7e293ef.js +0 -2
- package/dist/js/app-legacy.f7e293ef.js.map +0 -1
- package/dist/js/app.f7e293ef.js +0 -2
- package/dist/js/app.f7e293ef.js.map +0 -1
- package/dist/js/chunk-vendors-legacy.767ef893.js.map +0 -1
- package/dist/js/chunk-vendors.767ef893.js.map +0 -1
- package/src/plugins/mDataSupport.mjs +0 -66
package/docs/WWebApi.html
CHANGED
|
@@ -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#
|
|
83
|
+
<a href="WWebApi.mjs.html">WWebApi.mjs</a>, <a href="WWebApi.mjs.html#line129">line 129</a>
|
|
84
84
|
</li></ul></dd>
|
|
85
85
|
|
|
86
86
|
|
|
@@ -127,7 +127,7 @@
|
|
|
127
127
|
|
|
128
128
|
<h5 class="h5-examples">Example</h5>
|
|
129
129
|
|
|
130
|
-
<pre class="prettyprint"><code>import WOrm from 'w-orm-lmdb/src/WOrmLmdb.mjs'
|
|
131
130
|
useCheckUser: false,
|
|
132
131
|
getUserById: null,
|
|
133
132
|
useExcludeWhenNotAdmin: false,
|
|
134
133
|
serverPort: 11005,
|
|
135
134
|
subfolder: '', //mapi
|
|
136
135
|
urlRedirect: 'https://www.google.com/', //本機測試時得先編譯, 再瀏覽: http://localhost:11005/
|
|
137
136
|
webName: {
|
|
138
137
|
'eng': 'API Service',
|
|
139
138
|
'cht': 'API管理系統',
|
|
140
139
|
},
|
|
141
140
|
webDescription: {
|
|
142
141
|
'eng': 'A web service package as methods to send requests to and receive responses from an API.',
|
|
143
142
|
'cht': 'A web service package as methods to send requests to and receive responses from an API.',
|
|
144
143
|
},
|
|
145
144
|
webLogo: 'data:image/svg+xml;base64,...',
|
|
146
145
|
// return {} //測試無法登入
|
|
147
146
|
if (token === '{token-for-application}') { //提供外部應用系統作為存取使用者
|
|
148
147
|
return {
|
|
149
148
|
id: 'id-for-application',
|
|
150
149
|
name: 'application',
|
|
151
150
|
email: 'application@example.com',
|
|
152
151
|
isAdmin: 'y',
|
|
153
152
|
}
|
|
154
153
|
}
|
|
155
154
|
if (token === 'sys') { //開發階段w-ui-loginout自動給予browser使用者(且位於localhost)的token為sys
|
|
156
155
|
return {
|
|
157
156
|
id: 'id-for-admin',
|
|
158
157
|
name: '測試者',
|
|
159
158
|
email: 'admin@example.com',
|
|
160
159
|
isAdmin: 'y',
|
|
161
160
|
}
|
|
162
161
|
}
|
|
163
162
|
console.log('invalid token', token)
|
|
164
163
|
console.log('於生產環境時得加入SSO等驗證token機制')
|
|
165
164
|
return {}
|
|
166
165
|
console.log('verifyClientUser/user', user)
|
|
167
166
|
// return false //測試無法登入
|
|
168
167
|
console.log('於生產環境時得加入限制瀏覽器使用者身份機制')
|
|
169
168
|
return user.isAdmin === 'y' //測試僅系統管理者使用
|
|
170
169
|
console.log('verifyAppUser/user', user)
|
|
171
170
|
// return false //測試無法登入
|
|
172
171
|
console.log('於生產環境時得加入限制應用程式使用者身份機制')
|
|
173
172
|
return user.isAdmin === 'y' //測試僅系統管理者使用
|
|
174
173
|
console.log(err)
|
|
174
|
+
<pre class="prettyprint"><code>import WOrm from 'w-orm-lmdb/src/WOrmLmdb.mjs'
|
|
175
175
|
useCheckUser: false,
|
|
176
176
|
getUserById: null,
|
|
177
177
|
useExcludeWhenNotAdmin: false,
|
|
178
178
|
serverPort: 11005,
|
|
179
179
|
subfolder: '', //mapi
|
|
180
180
|
urlRedirect: 'https://www.google.com/', //本機測試時得先編譯, 再瀏覽: http://localhost:11005/
|
|
181
181
|
webName: {
|
|
182
182
|
'eng': 'API Service',
|
|
183
183
|
'cht': 'API管理系統',
|
|
184
184
|
},
|
|
185
185
|
webDescription: {
|
|
186
186
|
'eng': 'A web service package as methods to send requests to and receive responses from an API.',
|
|
187
187
|
'cht': 'A web service package as methods to send requests to and receive responses from an API.',
|
|
188
188
|
},
|
|
189
189
|
webLogo: 'data:image/svg+xml;base64,...',
|
|
190
190
|
// return {} //測試無法登入
|
|
191
191
|
if (token === '{token-for-application}') { //提供外部應用系統作為存取使用者
|
|
192
192
|
return {
|
|
193
193
|
id: 'id-for-application',
|
|
194
194
|
name: 'application',
|
|
195
195
|
email: 'application@example.com',
|
|
196
196
|
isAdmin: 'y',
|
|
197
197
|
}
|
|
198
198
|
}
|
|
199
199
|
if (token === 'sys') { //開發階段w-ui-loginout自動給予browser使用者(且位於localhost)的token為sys
|
|
200
200
|
return {
|
|
201
201
|
id: 'id-for-admin',
|
|
202
202
|
name: '測試者',
|
|
203
203
|
email: 'admin@example.com',
|
|
204
204
|
isAdmin: 'y',
|
|
205
205
|
}
|
|
206
206
|
}
|
|
207
207
|
console.log('invalid token', token)
|
|
208
208
|
console.log('於生產環境時得加入SSO等驗證token機制')
|
|
209
209
|
return {}
|
|
210
210
|
console.log('verifyClientUser/user', user)
|
|
211
211
|
// return false //測試無法登入
|
|
212
212
|
console.log('於生產環境時得加入限制瀏覽器使用者身份機制')
|
|
213
213
|
return user.isAdmin === 'y' //測試僅系統管理者使用
|
|
214
214
|
console.log('verifyAppUser/user', user)
|
|
215
215
|
// return false //測試無法登入
|
|
216
216
|
console.log('於生產環境時得加入限制應用程式使用者身份機制')
|
|
217
217
|
return user.isAdmin === 'y' //測試僅系統管理者使用
|
|
218
218
|
console.log(err)
|
|
219
219
|
|
|
220
220
|
|
|
221
221
|
|
|
@@ -885,7 +885,7 @@
|
|
|
885
885
|
<br class="clear">
|
|
886
886
|
|
|
887
887
|
<footer>
|
|
888
|
-
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on
|
|
888
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on Mon Jul 14 2025 20:28:27 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
|
889
889
|
</footer>
|
|
890
890
|
|
|
891
891
|
<script>prettyPrint();</script>
|
package/docs/WWebApi.mjs.html
CHANGED
|
@@ -55,6 +55,7 @@ import iseobj from 'wsemi/src/iseobj.mjs'
|
|
|
55
55
|
import isestr from 'wsemi/src/isestr.mjs'
|
|
56
56
|
import isearr from 'wsemi/src/isearr.mjs'
|
|
57
57
|
import ispint from 'wsemi/src/ispint.mjs'
|
|
58
|
+
import isErr from 'wsemi/src/isErr.mjs'
|
|
58
59
|
import isfun from 'wsemi/src/isfun.mjs'
|
|
59
60
|
import ispm from 'wsemi/src/ispm.mjs'
|
|
60
61
|
import cint from 'wsemi/src/cint.mjs'
|
|
@@ -150,14 +151,14 @@ import ds from '../src/schema/index.mjs'
|
|
|
150
151
|
* return {}
|
|
151
152
|
* }
|
|
152
153
|
*
|
|
153
|
-
* let verifyClientUser = (user,
|
|
154
|
+
* let verifyClientUser = (user, from) => {
|
|
154
155
|
* console.log('verifyClientUser/user', user)
|
|
155
156
|
* // return false //測試無法登入
|
|
156
157
|
* console.log('於生產環境時得加入限制瀏覽器使用者身份機制')
|
|
157
158
|
* return user.isAdmin === 'y' //測試僅系統管理者使用
|
|
158
159
|
* }
|
|
159
160
|
*
|
|
160
|
-
* let verifyAppUser = (user,
|
|
161
|
+
* let verifyAppUser = (user, from) => {
|
|
161
162
|
* console.log('verifyAppUser/user', user)
|
|
162
163
|
* // return false //測試無法登入
|
|
163
164
|
* console.log('於生產環境時得加入限制應用程式使用者身份機制')
|
|
@@ -292,6 +293,37 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
|
|
|
292
293
|
}
|
|
293
294
|
|
|
294
295
|
|
|
296
|
+
//checkUser
|
|
297
|
+
let checkUser = async(user) => {
|
|
298
|
+
let id = get(user, 'id', '')
|
|
299
|
+
if (!isestr(id)) {
|
|
300
|
+
console.log('user', user)
|
|
301
|
+
console.log('can not get the userId')
|
|
302
|
+
return Promise.reject(`can not get the userId`)
|
|
303
|
+
}
|
|
304
|
+
let email = get(user, 'email', '')
|
|
305
|
+
if (!isestr(email)) {
|
|
306
|
+
console.log('user', user)
|
|
307
|
+
console.log('can not get the email of user')
|
|
308
|
+
return Promise.reject(`can not get the email of user`)
|
|
309
|
+
}
|
|
310
|
+
let name = get(user, 'name', '')
|
|
311
|
+
if (!isestr(name)) {
|
|
312
|
+
console.log('user', user)
|
|
313
|
+
console.log('can not get userName')
|
|
314
|
+
return Promise.reject(`can not get userName`)
|
|
315
|
+
}
|
|
316
|
+
let isAdmin = get(user, 'isAdmin', '')
|
|
317
|
+
if (isAdmin !== 'y' && isAdmin !== 'n') {
|
|
318
|
+
console.log('user', user)
|
|
319
|
+
console.log('user.isAdmin is not y or n', user.isAdmin)
|
|
320
|
+
console.log('can not get the role of user')
|
|
321
|
+
return Promise.reject(`can not get the role of user`)
|
|
322
|
+
}
|
|
323
|
+
return true
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
|
|
295
327
|
//getTokenUser
|
|
296
328
|
let getTokenUser = async (token) => {
|
|
297
329
|
|
|
@@ -302,24 +334,43 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
|
|
|
302
334
|
}
|
|
303
335
|
|
|
304
336
|
//check
|
|
305
|
-
if (
|
|
306
|
-
|
|
307
|
-
console.log(`
|
|
308
|
-
|
|
337
|
+
if (true) {
|
|
338
|
+
// if (!iseobj(userSelf)) {
|
|
339
|
+
// console.log(`token`, token)
|
|
340
|
+
// console.log(`can not find the user from token`)
|
|
341
|
+
// return Promise.reject(`can not find the user from token`)
|
|
342
|
+
// }
|
|
343
|
+
await checkUser(userSelf)
|
|
309
344
|
}
|
|
310
345
|
|
|
311
346
|
return userSelf
|
|
312
347
|
}
|
|
313
348
|
|
|
314
349
|
|
|
350
|
+
//p
|
|
351
|
+
let p = {
|
|
352
|
+
checkToken: async(token) => {
|
|
353
|
+
|
|
354
|
+
//getUserByToken
|
|
355
|
+
let u = await getUserByToken(token)
|
|
356
|
+
// console.log('u', u)
|
|
357
|
+
|
|
358
|
+
//checkUser
|
|
359
|
+
await checkUser(u)
|
|
360
|
+
|
|
361
|
+
return true
|
|
362
|
+
},
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
|
|
315
366
|
//getAndVerifyBrowserTokenUser
|
|
316
|
-
let getAndVerifyBrowserTokenUser = async (token,
|
|
367
|
+
let getAndVerifyBrowserTokenUser = async (token, from = '') => {
|
|
317
368
|
|
|
318
369
|
//getTokenUser
|
|
319
370
|
let userSelf = await getTokenUser(token)
|
|
320
371
|
|
|
321
372
|
//verifyClientUser
|
|
322
|
-
let b = verifyClientUser(userSelf,
|
|
373
|
+
let b = verifyClientUser(userSelf, from)
|
|
323
374
|
if (ispm(b)) {
|
|
324
375
|
b = await b
|
|
325
376
|
}
|
|
@@ -336,13 +387,13 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
|
|
|
336
387
|
|
|
337
388
|
|
|
338
389
|
//getAndVerifyAppTokenUser
|
|
339
|
-
let getAndVerifyAppTokenUser = async (token,
|
|
390
|
+
let getAndVerifyAppTokenUser = async (token, from = '') => {
|
|
340
391
|
|
|
341
392
|
//getTokenUser
|
|
342
393
|
let userSelf = await getTokenUser(token)
|
|
343
394
|
|
|
344
395
|
//verifyAppUser
|
|
345
|
-
let b = verifyAppUser(userSelf,
|
|
396
|
+
let b = verifyAppUser(userSelf, from)
|
|
346
397
|
if (ispm(b)) {
|
|
347
398
|
b = await b
|
|
348
399
|
}
|
|
@@ -533,13 +584,7 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
|
|
|
533
584
|
// return 'someAPI'
|
|
534
585
|
// },
|
|
535
586
|
// },
|
|
536
|
-
|
|
537
|
-
method: 'GET',
|
|
538
|
-
path: '/getWebInfor',
|
|
539
|
-
handler: async function (req, res) {
|
|
540
|
-
return getWebInfor()
|
|
541
|
-
},
|
|
542
|
-
},
|
|
587
|
+
|
|
543
588
|
{
|
|
544
589
|
method: 'GET',
|
|
545
590
|
path: '/api/getUserByToken', //未登入界面需先檢測token是否為系統管理員, 確認後回傳為系統管理員資訊物件, getUserByToken為w-ui-loginout預設值, 若要更改兩邊須同時修改
|
|
@@ -567,6 +612,9 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
|
|
|
567
612
|
|
|
568
613
|
//pm2resolve core
|
|
569
614
|
let r = await pm2resolve(core)() //w-ui-loginout接收已預設格式用pm2resolve轉過, 會提取state進行判斷
|
|
615
|
+
if (isErr(r.msg)) {
|
|
616
|
+
r.msg = r.msg.message
|
|
617
|
+
}
|
|
570
618
|
// console.log('getUserByToken', r)
|
|
571
619
|
|
|
572
620
|
return r
|
|
@@ -602,7 +650,10 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
|
|
|
602
650
|
|
|
603
651
|
//pm2resolve core
|
|
604
652
|
let r = await pm2resolve(core)()
|
|
605
|
-
|
|
653
|
+
if (isErr(r.msg)) {
|
|
654
|
+
r.msg = r.msg.message
|
|
655
|
+
}
|
|
656
|
+
// console.log('getAPIsList', r)
|
|
606
657
|
|
|
607
658
|
return r
|
|
608
659
|
},
|
|
@@ -641,7 +692,10 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
|
|
|
641
692
|
|
|
642
693
|
//pm2resolve core
|
|
643
694
|
let r = await pm2resolve(core)()
|
|
644
|
-
|
|
695
|
+
if (isErr(r.msg)) {
|
|
696
|
+
r.msg = r.msg.message
|
|
697
|
+
}
|
|
698
|
+
// console.log('updateAPIs', r)
|
|
645
699
|
|
|
646
700
|
return r
|
|
647
701
|
},
|
|
@@ -680,7 +734,10 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
|
|
|
680
734
|
|
|
681
735
|
//pm2resolve core
|
|
682
736
|
let r = await pm2resolve(core)()
|
|
683
|
-
|
|
737
|
+
if (isErr(r.msg)) {
|
|
738
|
+
r.msg = r.msg.message
|
|
739
|
+
}
|
|
740
|
+
// console.log('syncAndReplaceApis', r)
|
|
684
741
|
|
|
685
742
|
return r
|
|
686
743
|
},
|
|
@@ -700,7 +757,30 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
|
|
|
700
757
|
instWServHapiServer = new WServHapiServer({
|
|
701
758
|
port: opt.serverPort,
|
|
702
759
|
pathStaticFiles,
|
|
760
|
+
apiName: 'api',
|
|
703
761
|
apis,
|
|
762
|
+
tokenType: 'Bearer',
|
|
763
|
+
verifyConn: async ({ apiType, authorization, query, headers, req }) => {
|
|
764
|
+
// console.log('verifyConn', `apiType[${apiType}]`, `authorization[${authorization}]`)
|
|
765
|
+
|
|
766
|
+
//token
|
|
767
|
+
let token = strdelleft(authorization, 7) //刪除Bearer
|
|
768
|
+
// console.log('token', token)
|
|
769
|
+
|
|
770
|
+
//check
|
|
771
|
+
if (!isestr(token)) {
|
|
772
|
+
console.log('apiType', apiType)
|
|
773
|
+
console.log('authorization', authorization)
|
|
774
|
+
console.log('invalid token')
|
|
775
|
+
return false
|
|
776
|
+
}
|
|
777
|
+
|
|
778
|
+
//checkToken
|
|
779
|
+
let b = await p.checkToken(token)
|
|
780
|
+
// console.log('b', b)
|
|
781
|
+
|
|
782
|
+
return b
|
|
783
|
+
},
|
|
704
784
|
getUserIdByToken: async (token) => { //可使用async或sync函數
|
|
705
785
|
// console.log('getUserIdByToken', token)
|
|
706
786
|
return ''
|
|
@@ -720,11 +800,17 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
|
|
|
720
800
|
methodsExec: ['select', 'insert', 'save', 'del'], //mix需於procOrm內註冊以提供
|
|
721
801
|
tableNamesSync,
|
|
722
802
|
kpFunExt: { //接收參數第1個為userId, 之後才是前端給予參數
|
|
803
|
+
|
|
723
804
|
getWebInfor,
|
|
805
|
+
|
|
724
806
|
getAPIsList: (userId, query = {}) => {
|
|
725
807
|
return getAPIsList(query)
|
|
726
808
|
},
|
|
727
|
-
|
|
809
|
+
|
|
810
|
+
// updateApis: (userId, rows) => {
|
|
811
|
+
// return updateApis(rows)
|
|
812
|
+
// },
|
|
813
|
+
|
|
728
814
|
},
|
|
729
815
|
fnTableTags: 'tableTags-web-api.json',
|
|
730
816
|
})
|
|
@@ -749,7 +835,7 @@ export default WWebApi
|
|
|
749
835
|
<br class="clear">
|
|
750
836
|
|
|
751
837
|
<footer>
|
|
752
|
-
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on
|
|
838
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on Mon Jul 14 2025 20:28:27 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
|
753
839
|
</footer>
|
|
754
840
|
|
|
755
841
|
<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
|
|
74
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on Mon Jul 14 2025 20:28:27 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,18 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "w-web-api",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.41",
|
|
4
4
|
"main": "dist/w-web-api.umd.js",
|
|
5
5
|
"dependencies": {
|
|
6
6
|
"@mdi/js": "^7.4.47",
|
|
7
7
|
"axios": "^1.9.0",
|
|
8
8
|
"lodash-es": "^4.17.21",
|
|
9
9
|
"showdown": "^2.1.0",
|
|
10
|
-
"w-component-vue": "^2.4.
|
|
10
|
+
"w-component-vue": "^2.4.22",
|
|
11
11
|
"w-data-collector": "^1.0.22",
|
|
12
|
-
"w-serv-hapi": "^1.0.
|
|
13
|
-
"w-serv-orm": "^1.0.
|
|
12
|
+
"w-serv-hapi": "^1.0.60",
|
|
13
|
+
"w-serv-orm": "^1.0.29",
|
|
14
14
|
"w-ui-loginout": "^1.0.9",
|
|
15
|
-
"wsemi": "^1.
|
|
15
|
+
"wsemi": "^1.8.15"
|
|
16
16
|
},
|
|
17
17
|
"devDependencies": {
|
|
18
18
|
"@vue/cli-plugin-babel": "^5.0.8",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"eslint-plugin-vue": "^9.10.0",
|
|
29
29
|
"vue": "^2.6.14",
|
|
30
30
|
"vuex": "^3.6.2",
|
|
31
|
-
"w-orm-lmdb": "^1.0.
|
|
31
|
+
"w-orm-lmdb": "^1.0.2",
|
|
32
32
|
"w-package-tools": "^1.1.2"
|
|
33
33
|
},
|
|
34
34
|
"scripts": {
|
package/public/index.html
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
<title></title>
|
|
8
8
|
|
|
9
9
|
<!-- mdi font -->
|
|
10
|
-
<link href="https://cdn.jsdelivr.net/npm/@mdi/font/css/materialdesignicons.min.css" rel="stylesheet">
|
|
10
|
+
<link href="https://cdn.jsdelivr.net/npm/@mdi/font@7.4.47/css/materialdesignicons.min.css" rel="stylesheet">
|
|
11
11
|
|
|
12
12
|
<!-- fontawesome -->
|
|
13
13
|
<link href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.4.2/css/all.min.css" rel="stylesheet">
|
package/script.txt
CHANGED
package/server/WWebApi.mjs
CHANGED
|
@@ -8,6 +8,7 @@ import iseobj from 'wsemi/src/iseobj.mjs'
|
|
|
8
8
|
import isestr from 'wsemi/src/isestr.mjs'
|
|
9
9
|
import isearr from 'wsemi/src/isearr.mjs'
|
|
10
10
|
import ispint from 'wsemi/src/ispint.mjs'
|
|
11
|
+
import isErr from 'wsemi/src/isErr.mjs'
|
|
11
12
|
import isfun from 'wsemi/src/isfun.mjs'
|
|
12
13
|
import ispm from 'wsemi/src/ispm.mjs'
|
|
13
14
|
import cint from 'wsemi/src/cint.mjs'
|
|
@@ -103,14 +104,14 @@ import ds from '../src/schema/index.mjs'
|
|
|
103
104
|
* return {}
|
|
104
105
|
* }
|
|
105
106
|
*
|
|
106
|
-
* let verifyClientUser = (user,
|
|
107
|
+
* let verifyClientUser = (user, from) => {
|
|
107
108
|
* console.log('verifyClientUser/user', user)
|
|
108
109
|
* // return false //測試無法登入
|
|
109
110
|
* console.log('於生產環境時得加入限制瀏覽器使用者身份機制')
|
|
110
111
|
* return user.isAdmin === 'y' //測試僅系統管理者使用
|
|
111
112
|
* }
|
|
112
113
|
*
|
|
113
|
-
* let verifyAppUser = (user,
|
|
114
|
+
* let verifyAppUser = (user, from) => {
|
|
114
115
|
* console.log('verifyAppUser/user', user)
|
|
115
116
|
* // return false //測試無法登入
|
|
116
117
|
* console.log('於生產環境時得加入限制應用程式使用者身份機制')
|
|
@@ -245,6 +246,37 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
|
|
|
245
246
|
}
|
|
246
247
|
|
|
247
248
|
|
|
249
|
+
//checkUser
|
|
250
|
+
let checkUser = async(user) => {
|
|
251
|
+
let id = get(user, 'id', '')
|
|
252
|
+
if (!isestr(id)) {
|
|
253
|
+
console.log('user', user)
|
|
254
|
+
console.log('can not get the userId')
|
|
255
|
+
return Promise.reject(`can not get the userId`)
|
|
256
|
+
}
|
|
257
|
+
let email = get(user, 'email', '')
|
|
258
|
+
if (!isestr(email)) {
|
|
259
|
+
console.log('user', user)
|
|
260
|
+
console.log('can not get the email of user')
|
|
261
|
+
return Promise.reject(`can not get the email of user`)
|
|
262
|
+
}
|
|
263
|
+
let name = get(user, 'name', '')
|
|
264
|
+
if (!isestr(name)) {
|
|
265
|
+
console.log('user', user)
|
|
266
|
+
console.log('can not get userName')
|
|
267
|
+
return Promise.reject(`can not get userName`)
|
|
268
|
+
}
|
|
269
|
+
let isAdmin = get(user, 'isAdmin', '')
|
|
270
|
+
if (isAdmin !== 'y' && isAdmin !== 'n') {
|
|
271
|
+
console.log('user', user)
|
|
272
|
+
console.log('user.isAdmin is not y or n', user.isAdmin)
|
|
273
|
+
console.log('can not get the role of user')
|
|
274
|
+
return Promise.reject(`can not get the role of user`)
|
|
275
|
+
}
|
|
276
|
+
return true
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
|
|
248
280
|
//getTokenUser
|
|
249
281
|
let getTokenUser = async (token) => {
|
|
250
282
|
|
|
@@ -255,24 +287,43 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
|
|
|
255
287
|
}
|
|
256
288
|
|
|
257
289
|
//check
|
|
258
|
-
if (
|
|
259
|
-
|
|
260
|
-
console.log(`
|
|
261
|
-
|
|
290
|
+
if (true) {
|
|
291
|
+
// if (!iseobj(userSelf)) {
|
|
292
|
+
// console.log(`token`, token)
|
|
293
|
+
// console.log(`can not find the user from token`)
|
|
294
|
+
// return Promise.reject(`can not find the user from token`)
|
|
295
|
+
// }
|
|
296
|
+
await checkUser(userSelf)
|
|
262
297
|
}
|
|
263
298
|
|
|
264
299
|
return userSelf
|
|
265
300
|
}
|
|
266
301
|
|
|
267
302
|
|
|
303
|
+
//p
|
|
304
|
+
let p = {
|
|
305
|
+
checkToken: async(token) => {
|
|
306
|
+
|
|
307
|
+
//getUserByToken
|
|
308
|
+
let u = await getUserByToken(token)
|
|
309
|
+
// console.log('u', u)
|
|
310
|
+
|
|
311
|
+
//checkUser
|
|
312
|
+
await checkUser(u)
|
|
313
|
+
|
|
314
|
+
return true
|
|
315
|
+
},
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
|
|
268
319
|
//getAndVerifyBrowserTokenUser
|
|
269
|
-
let getAndVerifyBrowserTokenUser = async (token,
|
|
320
|
+
let getAndVerifyBrowserTokenUser = async (token, from = '') => {
|
|
270
321
|
|
|
271
322
|
//getTokenUser
|
|
272
323
|
let userSelf = await getTokenUser(token)
|
|
273
324
|
|
|
274
325
|
//verifyClientUser
|
|
275
|
-
let b = verifyClientUser(userSelf,
|
|
326
|
+
let b = verifyClientUser(userSelf, from)
|
|
276
327
|
if (ispm(b)) {
|
|
277
328
|
b = await b
|
|
278
329
|
}
|
|
@@ -289,13 +340,13 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
|
|
|
289
340
|
|
|
290
341
|
|
|
291
342
|
//getAndVerifyAppTokenUser
|
|
292
|
-
let getAndVerifyAppTokenUser = async (token,
|
|
343
|
+
let getAndVerifyAppTokenUser = async (token, from = '') => {
|
|
293
344
|
|
|
294
345
|
//getTokenUser
|
|
295
346
|
let userSelf = await getTokenUser(token)
|
|
296
347
|
|
|
297
348
|
//verifyAppUser
|
|
298
|
-
let b = verifyAppUser(userSelf,
|
|
349
|
+
let b = verifyAppUser(userSelf, from)
|
|
299
350
|
if (ispm(b)) {
|
|
300
351
|
b = await b
|
|
301
352
|
}
|
|
@@ -486,13 +537,7 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
|
|
|
486
537
|
// return 'someAPI'
|
|
487
538
|
// },
|
|
488
539
|
// },
|
|
489
|
-
|
|
490
|
-
method: 'GET',
|
|
491
|
-
path: '/getWebInfor',
|
|
492
|
-
handler: async function (req, res) {
|
|
493
|
-
return getWebInfor()
|
|
494
|
-
},
|
|
495
|
-
},
|
|
540
|
+
|
|
496
541
|
{
|
|
497
542
|
method: 'GET',
|
|
498
543
|
path: '/api/getUserByToken', //未登入界面需先檢測token是否為系統管理員, 確認後回傳為系統管理員資訊物件, getUserByToken為w-ui-loginout預設值, 若要更改兩邊須同時修改
|
|
@@ -520,6 +565,9 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
|
|
|
520
565
|
|
|
521
566
|
//pm2resolve core
|
|
522
567
|
let r = await pm2resolve(core)() //w-ui-loginout接收已預設格式用pm2resolve轉過, 會提取state進行判斷
|
|
568
|
+
if (isErr(r.msg)) {
|
|
569
|
+
r.msg = r.msg.message
|
|
570
|
+
}
|
|
523
571
|
// console.log('getUserByToken', r)
|
|
524
572
|
|
|
525
573
|
return r
|
|
@@ -555,7 +603,10 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
|
|
|
555
603
|
|
|
556
604
|
//pm2resolve core
|
|
557
605
|
let r = await pm2resolve(core)()
|
|
558
|
-
|
|
606
|
+
if (isErr(r.msg)) {
|
|
607
|
+
r.msg = r.msg.message
|
|
608
|
+
}
|
|
609
|
+
// console.log('getAPIsList', r)
|
|
559
610
|
|
|
560
611
|
return r
|
|
561
612
|
},
|
|
@@ -594,7 +645,10 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
|
|
|
594
645
|
|
|
595
646
|
//pm2resolve core
|
|
596
647
|
let r = await pm2resolve(core)()
|
|
597
|
-
|
|
648
|
+
if (isErr(r.msg)) {
|
|
649
|
+
r.msg = r.msg.message
|
|
650
|
+
}
|
|
651
|
+
// console.log('updateAPIs', r)
|
|
598
652
|
|
|
599
653
|
return r
|
|
600
654
|
},
|
|
@@ -633,7 +687,10 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
|
|
|
633
687
|
|
|
634
688
|
//pm2resolve core
|
|
635
689
|
let r = await pm2resolve(core)()
|
|
636
|
-
|
|
690
|
+
if (isErr(r.msg)) {
|
|
691
|
+
r.msg = r.msg.message
|
|
692
|
+
}
|
|
693
|
+
// console.log('syncAndReplaceApis', r)
|
|
637
694
|
|
|
638
695
|
return r
|
|
639
696
|
},
|
|
@@ -653,7 +710,30 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
|
|
|
653
710
|
instWServHapiServer = new WServHapiServer({
|
|
654
711
|
port: opt.serverPort,
|
|
655
712
|
pathStaticFiles,
|
|
713
|
+
apiName: 'api',
|
|
656
714
|
apis,
|
|
715
|
+
tokenType: 'Bearer',
|
|
716
|
+
verifyConn: async ({ apiType, authorization, query, headers, req }) => {
|
|
717
|
+
// console.log('verifyConn', `apiType[${apiType}]`, `authorization[${authorization}]`)
|
|
718
|
+
|
|
719
|
+
//token
|
|
720
|
+
let token = strdelleft(authorization, 7) //刪除Bearer
|
|
721
|
+
// console.log('token', token)
|
|
722
|
+
|
|
723
|
+
//check
|
|
724
|
+
if (!isestr(token)) {
|
|
725
|
+
console.log('apiType', apiType)
|
|
726
|
+
console.log('authorization', authorization)
|
|
727
|
+
console.log('invalid token')
|
|
728
|
+
return false
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
//checkToken
|
|
732
|
+
let b = await p.checkToken(token)
|
|
733
|
+
// console.log('b', b)
|
|
734
|
+
|
|
735
|
+
return b
|
|
736
|
+
},
|
|
657
737
|
getUserIdByToken: async (token) => { //可使用async或sync函數
|
|
658
738
|
// console.log('getUserIdByToken', token)
|
|
659
739
|
return ''
|
|
@@ -673,11 +753,17 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
|
|
|
673
753
|
methodsExec: ['select', 'insert', 'save', 'del'], //mix需於procOrm內註冊以提供
|
|
674
754
|
tableNamesSync,
|
|
675
755
|
kpFunExt: { //接收參數第1個為userId, 之後才是前端給予參數
|
|
756
|
+
|
|
676
757
|
getWebInfor,
|
|
758
|
+
|
|
677
759
|
getAPIsList: (userId, query = {}) => {
|
|
678
760
|
return getAPIsList(query)
|
|
679
761
|
},
|
|
680
|
-
|
|
762
|
+
|
|
763
|
+
// updateApis: (userId, rows) => {
|
|
764
|
+
// return updateApis(rows)
|
|
765
|
+
// },
|
|
766
|
+
|
|
681
767
|
},
|
|
682
768
|
fnTableTags: 'tableTags-web-api.json',
|
|
683
769
|
})
|