w-web-api 1.0.30 → 1.0.32

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/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, getUserByToken, verifyUser, 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, verifyBrowserUser, verifyAppUser, 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#line115">line 115</a>
83
+ <a href="WWebApi.mjs.html">WWebApi.mjs</a>, <a href="WWebApi.mjs.html#line128">line 128</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-mongodb/src/WOrmMongodb.mjs' //自行選擇引用ORM, 使用Mongodb測試
131
130
  bCheckUser: false,
132
131
  getUserById: null,
133
132
  bExcludeWhenNotAdmin: false,
134
133
  serverPort: 11005,
135
134
  subfolder: '', //mapi
136
135
  webName: {
137
136
  'eng': 'API Service',
138
137
  'cht': 'API管理系統',
139
138
  },
140
139
  webDescription: {
141
140
  'eng': 'A web service package as methods to send requests to and receive responses from an API.',
142
141
  'cht': 'A web service package as methods to send requests to and receive responses from an API.',
143
142
  },
144
143
  webLogo: 'data:image/svg+xml;base64,...',
145
144
  // return {} //測試無法登入
146
145
  if (token === '{token-for-application}') { //提供外部應用系統作為存取使用者
147
146
  return {
148
147
  id: 'id-for-application',
149
148
  name: 'application',
150
149
  email: 'admin@example.com',
151
150
  isAdmin: 'y',
152
151
  }
153
152
  }
154
153
  if (token === 'sys') { //開發階段w-ui-loginout自動給予browser使用者(且位於localhost)的token為sys
155
154
  return {
156
155
  id: 'id-for-admin',
157
156
  name: '測試者',
158
157
  email: 'admin@example.com',
159
158
  isAdmin: 'y',
160
159
  }
161
160
  }
162
161
  console.log('invalid token', token)
163
162
  console.log('於生產環境時得加入SSO等驗證token機制')
164
163
  return {}
165
164
  console.log('於生產環境時得加入驗證user機制')
166
165
  return user.isAdmin === 'y' //測試僅系統管理者使用
167
166
  console.log(err)
167
+ <pre class="prettyprint"><code>import WOrm from 'w-orm-mongodb/src/WOrmMongodb.mjs' //自行選擇引用ORM, 使用Mongodb測試
168
168
  bCheckUser: false,
169
169
  getUserById: null,
170
170
  bExcludeWhenNotAdmin: false,
171
171
  serverPort: 11005,
172
172
  subfolder: '', //mapi
173
173
  urlRedirect: 'https://www.google.com/', //本機測試時得先編譯, 再瀏覽: http://localhost:11005/
174
174
  webName: {
175
175
  'eng': 'API Service',
176
176
  'cht': 'API管理系統',
177
177
  },
178
178
  webDescription: {
179
179
  'eng': 'A web service package as methods to send requests to and receive responses from an API.',
180
180
  'cht': 'A web service package as methods to send requests to and receive responses from an API.',
181
181
  },
182
182
  webLogo: 'data:image/svg+xml;base64,...',
183
183
  // return {} //測試無法登入
184
184
  if (token === '{token-for-application}') { //提供外部應用系統作為存取使用者
185
185
  return {
186
186
  id: 'id-for-application',
187
187
  name: 'application',
188
188
  email: 'application@example.com',
189
189
  isAdmin: 'y',
190
190
  }
191
191
  }
192
192
  if (token === 'sys') { //開發階段w-ui-loginout自動給予browser使用者(且位於localhost)的token為sys
193
193
  return {
194
194
  id: 'id-for-admin',
195
195
  name: '測試者',
196
196
  email: 'admin@example.com',
197
197
  isAdmin: 'y',
198
198
  }
199
199
  }
200
200
  console.log('invalid token', token)
201
201
  console.log('於生產環境時得加入SSO等驗證token機制')
202
202
  return {}
203
203
  console.log('verifyBrowserUser/user', user)
204
204
  // return false //測試無法登入
205
205
  console.log('於生產環境時得加入限制瀏覽器使用者身份機制')
206
206
  return user.isAdmin === 'y' //測試僅系統管理者使用
207
207
  console.log('verifyAppUser/user', user)
208
208
  // return false //測試無法登入
209
209
  console.log('於生產環境時得加入限制應用程式使用者身份機制')
210
210
  return user.isAdmin === 'y' //測試僅系統管理者使用
211
211
  console.log(err)
212
212
 
213
213
 
214
214
 
@@ -305,7 +305,7 @@
305
305
 
306
306
  <tr>
307
307
 
308
- <td class="name"><code>verifyUser</code></td>
308
+ <td class="name"><code>verifyBrowserUser</code></td>
309
309
 
310
310
 
311
311
  <td class="type">
@@ -334,7 +334,43 @@
334
334
  </td>
335
335
 
336
336
 
337
- <td class="description last"><p>輸入處理函數,函數會傳入使用者資訊物件,通過此函數識別後回傳布林值,允許使用者回傳true,反之回傳false</p></td>
337
+ <td class="description last"><p>輸入驗證瀏覽使用者身份之處理函數,函數會傳入使用者資訊物件,通過此函數識別後回傳布林值,允許使用者回傳true,反之回傳false</p></td>
338
+ </tr>
339
+
340
+
341
+
342
+ <tr>
343
+
344
+ <td class="name"><code>verifyAppUser</code></td>
345
+
346
+
347
+ <td class="type">
348
+
349
+
350
+ <span class="param-type">function</span>
351
+
352
+
353
+
354
+
355
+ </td>
356
+
357
+
358
+ <td class="attributes">
359
+
360
+
361
+
362
+
363
+
364
+ </td>
365
+
366
+
367
+
368
+ <td class="default">
369
+
370
+ </td>
371
+
372
+
373
+ <td class="description last"><p>輸入驗證應用程序使用者身份之處理函數,函數會傳入使用者資訊物件,通過此函數識別後回傳布林值,允許使用者回傳true,反之回傳false</p></td>
338
374
  </tr>
339
375
 
340
376
 
@@ -849,7 +885,7 @@
849
885
  <br class="clear">
850
886
 
851
887
  <footer>
852
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on Thu Nov 02 2023 22:58:48 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
888
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on Fri Nov 03 2023 14:51:38 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
853
889
  </footer>
854
890
 
855
891
  <script>prettyPrint();</script>
@@ -80,7 +80,8 @@ import ds from '../src/schema/index.mjs'
80
80
  * @param {String} url 輸入資料庫連線字串,例如'mongodb://sername:password@$127.0.0.1:27017'
81
81
  * @param {String} db 輸入資料庫名稱字串
82
82
  * @param {Function} getUserByToken 輸入處理函數,函數會傳入使用者token,通過此函數處理後並回傳使用者資訊物件,並至少須提供'id'、'email'、'name'、'isAdmin'欄位,且'isAdmin'限輸入'y'或'n',且輸入'y'時會複寫權限系統該使用者之'isAdmin'欄位值
83
- * @param {Function} verifyUser 輸入處理函數,函數會傳入使用者資訊物件,通過此函數識別後回傳布林值,允許使用者回傳true,反之回傳false
83
+ * @param {Function} verifyBrowserUser 輸入驗證瀏覽使用者身份之處理函數,函數會傳入使用者資訊物件,通過此函數識別後回傳布林值,允許使用者回傳true,反之回傳false
84
+ * @param {Function} verifyAppUser 輸入驗證應用程序使用者身份之處理函數,函數會傳入使用者資訊物件,通過此函數識別後回傳布林值,允許使用者回傳true,反之回傳false
84
85
  * @param {Object} [opt={}] 輸入設定物件,預設{}
85
86
  * @param {Integer} [opt.serverPort=11005] 輸入伺服器通訊port,預設11005
86
87
  * @param {Boolean} [opt.bCheckUser=false] 輸入是否檢查使用者資訊布林值,預設false
@@ -93,10 +94,12 @@ import ds from '../src/schema/index.mjs'
93
94
  * @param {String} [opt.urlRedirect=''] 輸入錯誤時自動轉址字串,提供站台例如無法登入或驗證失敗時須自動轉址,預設''
94
95
  * @returns {Object} 回傳物件,其內server為hapi伺服器實體,wsrv為w-converhp的伺服器事件物件,wsds為w-serv-webdata的伺服器事件物件,可監聽error事件
95
96
  * @example
97
+ *
96
98
  * import WOrm from 'w-orm-mongodb/src/WOrmMongodb.mjs' //自行選擇引用ORM, 使用Mongodb測試
97
99
  * import WWebApi from './server/WWebApi.mjs'
98
100
  * import getSettings from './g.getSettings.mjs'
99
101
  *
102
+ *
100
103
  * //st
101
104
  * let st = getSettings()
102
105
  *
@@ -110,6 +113,7 @@ import ds from '../src/schema/index.mjs'
110
113
  *
111
114
  * serverPort: 11005,
112
115
  * subfolder: '', //mapi
116
+ * urlRedirect: 'https://www.google.com/', //本機測試時得先編譯, 再瀏覽: http://localhost:11005/
113
117
  *
114
118
  * webName: {
115
119
  * 'eng': 'API Service',
@@ -123,13 +127,13 @@ import ds from '../src/schema/index.mjs'
123
127
  *
124
128
  * }
125
129
  *
126
- * let getUserByToken = (token) => {
130
+ * let getUserByToken = async (token) => {
127
131
  * // return {} //測試無法登入
128
132
  * if (token === '{token-for-application}') { //提供外部應用系統作為存取使用者
129
133
  * return {
130
134
  * id: 'id-for-application',
131
135
  * name: 'application',
132
- * email: 'admin@example.com',
136
+ * email: 'application@example.com',
133
137
  * isAdmin: 'y',
134
138
  * }
135
139
  * }
@@ -146,20 +150,29 @@ import ds from '../src/schema/index.mjs'
146
150
  * return {}
147
151
  * }
148
152
  *
149
- * let verifyUser = (user) => {
150
- * console.log('於生產環境時得加入驗證user機制')
153
+ * let verifyBrowserUser = (user, caller) => {
154
+ * console.log('verifyBrowserUser/user', user)
155
+ * // return false //測試無法登入
156
+ * console.log('於生產環境時得加入限制瀏覽器使用者身份機制')
157
+ * return user.isAdmin === 'y' //測試僅系統管理者使用
158
+ * }
159
+ *
160
+ * let verifyAppUser = (user, caller) => {
161
+ * console.log('verifyAppUser/user', user)
162
+ * // return false //測試無法登入
163
+ * console.log('於生產環境時得加入限制應用程式使用者身份機制')
151
164
  * return user.isAdmin === 'y' //測試僅系統管理者使用
152
165
  * }
153
166
  *
154
167
  * //WWebApi
155
- * let instWWebApi = WWebApi(WOrm, url, db, getUserByToken, verifyUser, opt)
168
+ * let instWWebApi = WWebApi(WOrm, url, db, getUserByToken, verifyBrowserUser, verifyAppUser, opt)
156
169
  *
157
170
  * instWWebApi.on('error', (err) => {
158
171
  * console.log(err)
159
172
  * })
160
173
  *
161
174
  */
162
- function WWebApi(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
175
+ function WWebApi(WOrm, url, db, getUserByToken, verifyBrowserUser, verifyAppUser, opt = {}) {
163
176
  let instWServHapiServer = null
164
177
 
165
178
 
@@ -191,10 +204,17 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
191
204
  }
192
205
 
193
206
 
194
- //check verifyUser
195
- if (!isfun(verifyUser)) {
196
- console.log('invalid verifyUser', verifyUser)
197
- throw new Error('invalid verifyUser')
207
+ //check verifyBrowserUser
208
+ if (!isfun(verifyBrowserUser)) {
209
+ console.log('invalid verifyBrowserUser', verifyBrowserUser)
210
+ throw new Error('invalid verifyBrowserUser')
211
+ }
212
+
213
+
214
+ //check verifyAppUser
215
+ if (!isfun(verifyAppUser)) {
216
+ console.log('invalid verifyAppUser', verifyAppUser)
217
+ throw new Error('invalid verifyAppUser')
198
218
  }
199
219
 
200
220
 
@@ -272,8 +292,8 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
272
292
  }
273
293
 
274
294
 
275
- //getTokenUserForSelf
276
- let getTokenUserForSelf = async (token) => {
295
+ //getTokenUser
296
+ let getTokenUser = async (token) => {
277
297
 
278
298
  //getUserByToken
279
299
  let userSelf = getUserByToken(token)
@@ -288,8 +308,41 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
288
308
  return Promise.reject(`can not find the user from token`)
289
309
  }
290
310
 
291
- //verifyUser
292
- let b = verifyUser(userSelf)
311
+ return userSelf
312
+ }
313
+
314
+
315
+ //getAndVerifyBrowserTokenUser
316
+ let getAndVerifyBrowserTokenUser = async (token, caller = '') => {
317
+
318
+ //getTokenUser
319
+ let userSelf = await getTokenUser(token)
320
+
321
+ //verifyBrowserUser
322
+ let b = verifyBrowserUser(userSelf, caller)
323
+ if (ispm(b)) {
324
+ b = await b
325
+ }
326
+
327
+ //check
328
+ if (!b) {
329
+ console.log('userSelf', userSelf)
330
+ console.log(`user does not have permission`)
331
+ return Promise.reject(`user does not have permission`)
332
+ }
333
+
334
+ return userSelf
335
+ }
336
+
337
+
338
+ //getAndVerifyAppTokenUser
339
+ let getAndVerifyAppTokenUser = async (token, caller = '') => {
340
+
341
+ //getTokenUser
342
+ let userSelf = await getTokenUser(token)
343
+
344
+ //verifyAppUser
345
+ let b = verifyAppUser(userSelf, caller)
293
346
  if (ispm(b)) {
294
347
  b = await b
295
348
  }
@@ -498,8 +551,8 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
498
551
  //token
499
552
  let token = get(req, 'query.token', '')
500
553
 
501
- //getTokenUserForSelf
502
- let user = await getTokenUserForSelf(token)
554
+ //getAndVerifyBrowserTokenUser
555
+ let user = await getAndVerifyBrowserTokenUser(token, 'getUserByToken')
503
556
 
504
557
  //check
505
558
  if (!iseobj(user)) {
@@ -530,8 +583,8 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
530
583
  //token
531
584
  let token = get(req, 'query.token', '')
532
585
 
533
- //getTokenUserForSelf
534
- let user = await getTokenUserForSelf(token)
586
+ //getAndVerifyBrowserTokenUser
587
+ let user = await getAndVerifyBrowserTokenUser(token, 'getAPIsList')
535
588
 
536
589
  //check
537
590
  if (!iseobj(user)) {
@@ -566,8 +619,8 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
566
619
  //token
567
620
  let token = get(req, 'query.token', '')
568
621
 
569
- //getTokenUserForSelf
570
- let user = await getTokenUserForSelf(token)
622
+ //getAndVerifyBrowserTokenUser
623
+ let user = await getAndVerifyBrowserTokenUser(token, 'updateAPIs')
571
624
 
572
625
  //check
573
626
  if (!iseobj(user)) {
@@ -605,8 +658,8 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
605
658
  //token
606
659
  let token = get(req, 'query.token', '')
607
660
 
608
- //getTokenUserForSelf
609
- let user = await getTokenUserForSelf(token)
661
+ //getAndVerifyAppTokenUser
662
+ let user = await getAndVerifyAppTokenUser(token, 'syncAndReplaceApis')
610
663
 
611
664
  //check
612
665
  if (!iseobj(user)) {
@@ -689,7 +742,7 @@ export default WWebApi
689
742
  <br class="clear">
690
743
 
691
744
  <footer>
692
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on Thu Nov 02 2023 22:58:48 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
745
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on Fri Nov 03 2023 14:51:38 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
693
746
  </footer>
694
747
 
695
748
  <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 Thu Nov 02 2023 22:58:48 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 Fri Nov 03 2023 14:51:38 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,6 +1,6 @@
1
1
  {
2
2
  "name": "w-web-api",
3
- "version": "1.0.30",
3
+ "version": "1.0.32",
4
4
  "main": "dist/w-web-api.umd.js",
5
5
  "dependencies": {
6
6
  "@mdi/js": "^7.2.96",
@@ -11,7 +11,7 @@
11
11
  "w-data-collector": "^1.0.19",
12
12
  "w-serv-hapi": "^1.0.11",
13
13
  "w-serv-orm": "^1.0.7",
14
- "w-ui-loginout": "^1.0.4",
14
+ "w-ui-loginout": "^1.0.6",
15
15
  "wsemi": "^1.7.38"
16
16
  },
17
17
  "devDependencies": {
@@ -33,7 +33,8 @@ import ds from '../src/schema/index.mjs'
33
33
  * @param {String} url 輸入資料庫連線字串,例如'mongodb://sername:password@$127.0.0.1:27017'
34
34
  * @param {String} db 輸入資料庫名稱字串
35
35
  * @param {Function} getUserByToken 輸入處理函數,函數會傳入使用者token,通過此函數處理後並回傳使用者資訊物件,並至少須提供'id'、'email'、'name'、'isAdmin'欄位,且'isAdmin'限輸入'y'或'n',且輸入'y'時會複寫權限系統該使用者之'isAdmin'欄位值
36
- * @param {Function} verifyUser 輸入處理函數,函數會傳入使用者資訊物件,通過此函數識別後回傳布林值,允許使用者回傳true,反之回傳false
36
+ * @param {Function} verifyBrowserUser 輸入驗證瀏覽使用者身份之處理函數,函數會傳入使用者資訊物件,通過此函數識別後回傳布林值,允許使用者回傳true,反之回傳false
37
+ * @param {Function} verifyAppUser 輸入驗證應用程序使用者身份之處理函數,函數會傳入使用者資訊物件,通過此函數識別後回傳布林值,允許使用者回傳true,反之回傳false
37
38
  * @param {Object} [opt={}] 輸入設定物件,預設{}
38
39
  * @param {Integer} [opt.serverPort=11005] 輸入伺服器通訊port,預設11005
39
40
  * @param {Boolean} [opt.bCheckUser=false] 輸入是否檢查使用者資訊布林值,預設false
@@ -46,10 +47,12 @@ import ds from '../src/schema/index.mjs'
46
47
  * @param {String} [opt.urlRedirect=''] 輸入錯誤時自動轉址字串,提供站台例如無法登入或驗證失敗時須自動轉址,預設''
47
48
  * @returns {Object} 回傳物件,其內server為hapi伺服器實體,wsrv為w-converhp的伺服器事件物件,wsds為w-serv-webdata的伺服器事件物件,可監聽error事件
48
49
  * @example
50
+ *
49
51
  * import WOrm from 'w-orm-mongodb/src/WOrmMongodb.mjs' //自行選擇引用ORM, 使用Mongodb測試
50
52
  * import WWebApi from './server/WWebApi.mjs'
51
53
  * import getSettings from './g.getSettings.mjs'
52
54
  *
55
+ *
53
56
  * //st
54
57
  * let st = getSettings()
55
58
  *
@@ -63,6 +66,7 @@ import ds from '../src/schema/index.mjs'
63
66
  *
64
67
  * serverPort: 11005,
65
68
  * subfolder: '', //mapi
69
+ * urlRedirect: 'https://www.google.com/', //本機測試時得先編譯, 再瀏覽: http://localhost:11005/
66
70
  *
67
71
  * webName: {
68
72
  * 'eng': 'API Service',
@@ -76,13 +80,13 @@ import ds from '../src/schema/index.mjs'
76
80
  *
77
81
  * }
78
82
  *
79
- * let getUserByToken = (token) => {
83
+ * let getUserByToken = async (token) => {
80
84
  * // return {} //測試無法登入
81
85
  * if (token === '{token-for-application}') { //提供外部應用系統作為存取使用者
82
86
  * return {
83
87
  * id: 'id-for-application',
84
88
  * name: 'application',
85
- * email: 'admin@example.com',
89
+ * email: 'application@example.com',
86
90
  * isAdmin: 'y',
87
91
  * }
88
92
  * }
@@ -99,20 +103,29 @@ import ds from '../src/schema/index.mjs'
99
103
  * return {}
100
104
  * }
101
105
  *
102
- * let verifyUser = (user) => {
103
- * console.log('於生產環境時得加入驗證user機制')
106
+ * let verifyBrowserUser = (user, caller) => {
107
+ * console.log('verifyBrowserUser/user', user)
108
+ * // return false //測試無法登入
109
+ * console.log('於生產環境時得加入限制瀏覽器使用者身份機制')
110
+ * return user.isAdmin === 'y' //測試僅系統管理者使用
111
+ * }
112
+ *
113
+ * let verifyAppUser = (user, caller) => {
114
+ * console.log('verifyAppUser/user', user)
115
+ * // return false //測試無法登入
116
+ * console.log('於生產環境時得加入限制應用程式使用者身份機制')
104
117
  * return user.isAdmin === 'y' //測試僅系統管理者使用
105
118
  * }
106
119
  *
107
120
  * //WWebApi
108
- * let instWWebApi = WWebApi(WOrm, url, db, getUserByToken, verifyUser, opt)
121
+ * let instWWebApi = WWebApi(WOrm, url, db, getUserByToken, verifyBrowserUser, verifyAppUser, opt)
109
122
  *
110
123
  * instWWebApi.on('error', (err) => {
111
124
  * console.log(err)
112
125
  * })
113
126
  *
114
127
  */
115
- function WWebApi(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
128
+ function WWebApi(WOrm, url, db, getUserByToken, verifyBrowserUser, verifyAppUser, opt = {}) {
116
129
  let instWServHapiServer = null
117
130
 
118
131
 
@@ -144,10 +157,17 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
144
157
  }
145
158
 
146
159
 
147
- //check verifyUser
148
- if (!isfun(verifyUser)) {
149
- console.log('invalid verifyUser', verifyUser)
150
- throw new Error('invalid verifyUser')
160
+ //check verifyBrowserUser
161
+ if (!isfun(verifyBrowserUser)) {
162
+ console.log('invalid verifyBrowserUser', verifyBrowserUser)
163
+ throw new Error('invalid verifyBrowserUser')
164
+ }
165
+
166
+
167
+ //check verifyAppUser
168
+ if (!isfun(verifyAppUser)) {
169
+ console.log('invalid verifyAppUser', verifyAppUser)
170
+ throw new Error('invalid verifyAppUser')
151
171
  }
152
172
 
153
173
 
@@ -225,8 +245,8 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
225
245
  }
226
246
 
227
247
 
228
- //getTokenUserForSelf
229
- let getTokenUserForSelf = async (token) => {
248
+ //getTokenUser
249
+ let getTokenUser = async (token) => {
230
250
 
231
251
  //getUserByToken
232
252
  let userSelf = getUserByToken(token)
@@ -241,8 +261,41 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
241
261
  return Promise.reject(`can not find the user from token`)
242
262
  }
243
263
 
244
- //verifyUser
245
- let b = verifyUser(userSelf)
264
+ return userSelf
265
+ }
266
+
267
+
268
+ //getAndVerifyBrowserTokenUser
269
+ let getAndVerifyBrowserTokenUser = async (token, caller = '') => {
270
+
271
+ //getTokenUser
272
+ let userSelf = await getTokenUser(token)
273
+
274
+ //verifyBrowserUser
275
+ let b = verifyBrowserUser(userSelf, caller)
276
+ if (ispm(b)) {
277
+ b = await b
278
+ }
279
+
280
+ //check
281
+ if (!b) {
282
+ console.log('userSelf', userSelf)
283
+ console.log(`user does not have permission`)
284
+ return Promise.reject(`user does not have permission`)
285
+ }
286
+
287
+ return userSelf
288
+ }
289
+
290
+
291
+ //getAndVerifyAppTokenUser
292
+ let getAndVerifyAppTokenUser = async (token, caller = '') => {
293
+
294
+ //getTokenUser
295
+ let userSelf = await getTokenUser(token)
296
+
297
+ //verifyAppUser
298
+ let b = verifyAppUser(userSelf, caller)
246
299
  if (ispm(b)) {
247
300
  b = await b
248
301
  }
@@ -451,8 +504,8 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
451
504
  //token
452
505
  let token = get(req, 'query.token', '')
453
506
 
454
- //getTokenUserForSelf
455
- let user = await getTokenUserForSelf(token)
507
+ //getAndVerifyBrowserTokenUser
508
+ let user = await getAndVerifyBrowserTokenUser(token, 'getUserByToken')
456
509
 
457
510
  //check
458
511
  if (!iseobj(user)) {
@@ -483,8 +536,8 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
483
536
  //token
484
537
  let token = get(req, 'query.token', '')
485
538
 
486
- //getTokenUserForSelf
487
- let user = await getTokenUserForSelf(token)
539
+ //getAndVerifyBrowserTokenUser
540
+ let user = await getAndVerifyBrowserTokenUser(token, 'getAPIsList')
488
541
 
489
542
  //check
490
543
  if (!iseobj(user)) {
@@ -519,8 +572,8 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
519
572
  //token
520
573
  let token = get(req, 'query.token', '')
521
574
 
522
- //getTokenUserForSelf
523
- let user = await getTokenUserForSelf(token)
575
+ //getAndVerifyBrowserTokenUser
576
+ let user = await getAndVerifyBrowserTokenUser(token, 'updateAPIs')
524
577
 
525
578
  //check
526
579
  if (!iseobj(user)) {
@@ -558,8 +611,8 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
558
611
  //token
559
612
  let token = get(req, 'query.token', '')
560
613
 
561
- //getTokenUserForSelf
562
- let user = await getTokenUserForSelf(token)
614
+ //getAndVerifyAppTokenUser
615
+ let user = await getAndVerifyAppTokenUser(token, 'syncAndReplaceApis')
563
616
 
564
617
  //check
565
618
  if (!iseobj(user)) {
package/srv.mjs CHANGED
@@ -30,7 +30,7 @@ let opt = {
30
30
 
31
31
  }
32
32
 
33
- let getUserByToken = (token) => {
33
+ let getUserByToken = async (token) => {
34
34
  // return {} //測試無法登入
35
35
  if (token === '{token-for-application}') { //提供外部應用系統作為存取使用者
36
36
  return {
@@ -53,14 +53,22 @@ let getUserByToken = (token) => {
53
53
  return {}
54
54
  }
55
55
 
56
- let verifyUser = (user) => {
56
+ let verifyBrowserUser = (user, caller) => {
57
+ console.log('verifyBrowserUser/user', user)
57
58
  // return false //測試無法登入
58
- console.log('於生產環境時得加入驗證user機制')
59
+ console.log('於生產環境時得加入限制瀏覽器使用者身份機制')
60
+ return user.isAdmin === 'y' //測試僅系統管理者使用
61
+ }
62
+
63
+ let verifyAppUser = (user, caller) => {
64
+ console.log('verifyAppUser/user', user)
65
+ // return false //測試無法登入
66
+ console.log('於生產環境時得加入限制應用程式使用者身份機制')
59
67
  return user.isAdmin === 'y' //測試僅系統管理者使用
60
68
  }
61
69
 
62
70
  //WWebApi
63
- let instWWebApi = WWebApi(WOrm, url, db, getUserByToken, verifyUser, opt)
71
+ let instWWebApi = WWebApi(WOrm, url, db, getUserByToken, verifyBrowserUser, verifyAppUser, opt)
64
72
 
65
73
  instWWebApi.on('error', (err) => {
66
74
  console.log(err)
@@ -1 +1 @@
1
- {"apis":"4rDZ5D"}
1
+ {"apis":"6FtLVT"}