w-web-sso 1.1.13 → 1.1.15

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 (43) hide show
  1. package/README.md +69 -0
  2. package/dist/css/{app.f000459f.css → app.c117e572.css} +1 -1
  3. package/dist/index.tmp +1 -1
  4. package/dist/js/app-legacy.7c861154.js +1 -0
  5. package/dist/js/app.7c861154.js +1 -0
  6. package/dist/js/{chunk-vendors.97013ddc.js → chunk-vendors-legacy.6cb51be5.js} +2 -2
  7. package/dist/js/{chunk-vendors-legacy.97013ddc.js → chunk-vendors.6cb51be5.js} +2 -2
  8. package/dist/w-web-sso.umd.js +4 -4
  9. package/dist/w-web-sso.umd.js.map +1 -1
  10. package/docs/WWebSso.html +1 -1
  11. package/docs/global.html +1 -1
  12. package/docs/index.html +1 -1
  13. package/docs/server_WWebSso.mjs.html +25 -1
  14. package/docs/server_getIgnoredOrmKeys.mjs.html +1 -1
  15. package/docs/server_lockSave.mjs.html +1 -1
  16. package/docs/server_ormWrite.mjs.html +1 -1
  17. package/docs/server_staLogs_resolveShellWorker.mjs.html +1 -1
  18. package/docs/server_wrapTimer.mjs.html +1 -1
  19. package/docs/src_components_Common_CheckYesNo.vue.html +1 -1
  20. package/docs/src_fetchSsoMsg.mjs.html +1 -1
  21. package/docs/src_httpGetJson.mjs.html +1 -1
  22. package/docs/src_maskUrl.mjs.html +1 -1
  23. package/docs/src_plugins_staUsage.mjs.html +1 -1
  24. package/docs/src_plugins_submitGuard.mjs.html +1 -1
  25. package/package.json +1 -1
  26. package/server/WWebSso.mjs +24 -0
  27. package/server/procCore.mjs +631 -179
  28. package/server/procLang.mjs +114 -4
  29. package/server/procStaInfor.mjs +18 -0
  30. package/src/appUsage.mjs +115 -0
  31. package/src/components/AppTokenAddDialog.vue +384 -0
  32. package/src/components/LayoutContentTokens.vue +147 -76
  33. package/src/components/LayoutContentUsers.vue +22 -17
  34. package/src/components/PageLogin.vue +3 -3
  35. package/src/getUserByToken.mjs +4 -1
  36. package/src/getUserByUserId.mjs +2 -1
  37. package/src/getUsersByToken.mjs +2 -1
  38. package/src/schema/tables/tokens.mjs +9 -1
  39. package/src/usersRedirCheck.mjs +68 -0
  40. package/src/writeContracts/tokens.mjs +4 -3
  41. package/src/writeContracts/tokensSession.mjs +1 -1
  42. package/dist/js/app-legacy.7c006893.js +0 -1
  43. package/dist/js/app.7c006893.js +0 -1
package/docs/WWebSso.html CHANGED
@@ -2492,7 +2492,7 @@ token發放/驗證/更新, 後台使用者/金鑰/IP管理與統計資訊, 以
2492
2492
  <br class="clear">
2493
2493
 
2494
2494
  <footer>
2495
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Fri Oct 23 2026 11:30:30 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
2495
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Sat Oct 24 2026 21:09:45 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
2496
2496
  </footer>
2497
2497
 
2498
2498
  <script>prettyPrint();</script>
package/docs/global.html CHANGED
@@ -3312,7 +3312,7 @@ why: 計時器之 async 回呼 reject 時無人接手, Node 預設即結束行
3312
3312
  <br class="clear">
3313
3313
 
3314
3314
  <footer>
3315
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Fri Oct 23 2026 11:30:30 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
3315
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Sat Oct 24 2026 21:09:45 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
3316
3316
  </footer>
3317
3317
 
3318
3318
  <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.5</a> on Fri Oct 23 2026 11:30:30 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.5</a> on Sat Oct 24 2026 21:09:45 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
75
75
  </footer>
76
76
 
77
77
  <script>prettyPrint();</script>
@@ -588,6 +588,17 @@ function WWebSso(WOrm, url, db, pathSettings, optExt = {}) {
588
588
  }
589
589
 
590
590
  let p = procCore(woItems, procOrm, { srLog, srEmail, salt, minExpired, kpLang, passwordPolicy, allowUserRegistration, siteUrl, verifyBaseUrl, withTabLocks, guardWrite })
591
+
592
+ //升級遷移 (ADR-095 補記): 啟動時對升級前建立之應用系統金鑰列一次性定案——升級前可用者視為系統服務用途(不設期限), 升級前即不可用者(已逾期、無 timeEnd、timeEnd 格式錯)標為已失效(retired), 不因「不設期限」而復活, 列不刪.
593
+ //冪等(已定案者不再處理); 不阻擋啟動——尚未定案之舊列(遷移進行中或失敗)讀取時依升級前規則判定, 永不比升級前更寬(已逾期者仍失效), 失敗者重啟後重試
594
+ p.migrateLegacyAppTokens()
595
+ .then((r) => {
596
+ logBoot('info', `應用系統金鑰升級遷移完成: 本次定案 ${r.marked} 筆(視為系統服務用途 ${r.system}、已失效 ${r.retired})`)
597
+ })
598
+ .catch((err) => {
599
+ logBoot('error', `應用系統金鑰升級遷移失敗(${err}): 尚未定案之舊列在重啟成功前依升級前規則判定(已逾期者仍失效, 未逾期者尚未改為不設期限)`)
600
+ })
601
+
591
602
  let pp = procProtect(woItems, p, {
592
603
  procOrm, //系統直寫(自動封鎖、計時器登錄 IP)經 procOrm 且在表鎖內, 更新者記 'system'
593
604
  withTabLocks,
@@ -1165,6 +1176,10 @@ function WWebSso(WOrm, url, db, pathSettings, optExt = {}) {
1165
1176
 
1166
1177
  return b
1167
1178
  },
1179
+ //身分驗證責任(跨套件原則, 見自有套件庫主控之 dspec「使用者身分驗證原則」): 框架(w-converhp、w-serv-hapi、w-serv-webdata)不驗證token, 一律由本套件負責.
1180
+ //本套件為token簽發方且資料通道不開表操作(useDbOrm:false): verifyConn只做IP封鎖與頻率, getUserIdByToken固定回空字串(不以本體token決定執行身分);
1181
+ //故kpFunExt各函數一律以明確之token參數自行驗證(含管理員與細部權限), 查詢他人時以tokenSelf驗查詢方、tokenTarget只解析對象(checkTokenAndGetUserByToken);
1182
+ //不帶token之公開入口只限列名者(登入、自助註冊〔須開啟〕、驗證信、重寄驗證信〔隨註冊開關〕、網站顯示資訊、密碼政策預檢), 新增函數不得省略token驗證.
1168
1183
  getUserIdByToken: async (token) => { //可使用async或sync函數
1169
1184
  return '' //不檢核, 查找與變更數據皆由kpFunExt內各函數各自檢核
1170
1185
  },
@@ -1343,6 +1358,15 @@ function WWebSso(WOrm, url, db, pathSettings, optExt = {}) {
1343
1358
  return rs
1344
1359
  },
1345
1360
 
1361
+ //createAppToken: 鑄造應用系統金鑰(ADR-095); data: { name, usage: 'user' | 'system', userId(使用者用途), perms(系統服務用途) }, 權杖字串由伺服端產生並於回傳值給予;
1362
+ //權限閘同 updateTokensList(管理者或具 writeTokens 之系統服務用途金鑰); 後台清單存檔不再新增列
1363
+ createAppToken: async (_t, token, lang, data) => {
1364
+ if (!_strictStr(token)) return Promise.reject('tokenExpired')
1365
+ srLog.info({ event: 'kpfun-createAppToken', token: maskToken(token), lang })
1366
+ let r = await p.checkTokenAndCreateAppToken(token, data, { fun: funCheckAdmin, perm: 'writeTokens' })
1367
+ return r
1368
+ },
1369
+
1346
1370
  getIpsList: async (_t, token) => {
1347
1371
  if (!_strictStr(token)) return Promise.reject('tokenExpired')
1348
1372
  srLog.info({ event: 'kpfun-getIpsList', token: maskToken(token) })
@@ -1457,7 +1481,7 @@ export default WWebSso
1457
1481
  <br class="clear">
1458
1482
 
1459
1483
  <footer>
1460
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Fri Oct 23 2026 11:30:30 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
1484
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Sat Oct 24 2026 21:09:45 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
1461
1485
  </footer>
1462
1486
 
1463
1487
  <script>prettyPrint();</script>
@@ -93,7 +93,7 @@ export default getIgnoredOrmKeys
93
93
  <br class="clear">
94
94
 
95
95
  <footer>
96
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Fri Oct 23 2026 11:30:30 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
96
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Sat Oct 24 2026 21:09:45 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
97
97
  </footer>
98
98
 
99
99
  <script>prettyPrint();</script>
@@ -102,7 +102,7 @@ export default createLockSave
102
102
  <br class="clear">
103
103
 
104
104
  <footer>
105
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Fri Oct 23 2026 11:30:30 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
105
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Sat Oct 24 2026 21:09:45 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
106
106
  </footer>
107
107
 
108
108
  <script>prettyPrint();</script>
@@ -108,7 +108,7 @@ export default ormWrite
108
108
  <br class="clear">
109
109
 
110
110
  <footer>
111
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Fri Oct 23 2026 11:30:30 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
111
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Sat Oct 24 2026 21:09:45 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
112
112
  </footer>
113
113
 
114
114
  <script>prettyPrint();</script>
@@ -167,7 +167,7 @@ export default resolveShellWorker
167
167
  <br class="clear">
168
168
 
169
169
  <footer>
170
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Fri Oct 23 2026 11:30:30 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
170
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Sat Oct 24 2026 21:09:45 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
171
171
  </footer>
172
172
 
173
173
  <script>prettyPrint();</script>
@@ -117,7 +117,7 @@ export default wrapTimer
117
117
  <br class="clear">
118
118
 
119
119
  <footer>
120
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Fri Oct 23 2026 11:30:30 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
120
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Sat Oct 24 2026 21:09:45 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
121
121
  </footer>
122
122
 
123
123
  <script>prettyPrint();</script>
@@ -188,7 +188,7 @@ export default {
188
188
  <br class="clear">
189
189
 
190
190
  <footer>
191
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Fri Oct 23 2026 11:30:30 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
191
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Sat Oct 24 2026 21:09:45 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
192
192
  </footer>
193
193
 
194
194
  <script>prettyPrint();</script>
@@ -211,7 +211,7 @@ export { fetchSsoMsg, convertUser, hasUrlParam }
211
211
  <br class="clear">
212
212
 
213
213
  <footer>
214
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Fri Oct 23 2026 11:30:30 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
214
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Sat Oct 24 2026 21:09:45 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
215
215
  </footer>
216
216
 
217
217
  <script>prettyPrint();</script>
@@ -100,7 +100,7 @@ export default httpGetJson
100
100
  <br class="clear">
101
101
 
102
102
  <footer>
103
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Fri Oct 23 2026 11:30:30 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
103
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Sat Oct 24 2026 21:09:45 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
104
104
  </footer>
105
105
 
106
106
  <script>prettyPrint();</script>
@@ -99,7 +99,7 @@ export default maskUrl
99
99
  <br class="clear">
100
100
 
101
101
  <footer>
102
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Fri Oct 23 2026 11:30:30 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
102
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Sat Oct 24 2026 21:09:45 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
103
103
  </footer>
104
104
 
105
105
  <script>prettyPrint();</script>
@@ -237,7 +237,7 @@ export { getFreqVal, sumFreqVal, groupFreq, calcUsageSummary }
237
237
  <br class="clear">
238
238
 
239
239
  <footer>
240
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Fri Oct 23 2026 11:30:30 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
240
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Sat Oct 24 2026 21:09:45 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
241
241
  </footer>
242
242
 
243
243
  <script>prettyPrint();</script>
@@ -150,7 +150,7 @@ export default submitGuard
150
150
  <br class="clear">
151
151
 
152
152
  <footer>
153
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Fri Oct 23 2026 11:30:30 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
153
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Sat Oct 24 2026 21:09:45 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
154
154
  </footer>
155
155
 
156
156
  <script>prettyPrint();</script>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "w-web-sso",
3
- "version": "1.1.13",
3
+ "version": "1.1.15",
4
4
  "main": "dist/w-web-sso.umd.js",
5
5
  "dependencies": {
6
6
  "json5": "^2.2.3",
@@ -541,6 +541,17 @@ function WWebSso(WOrm, url, db, pathSettings, optExt = {}) {
541
541
  }
542
542
 
543
543
  let p = procCore(woItems, procOrm, { srLog, srEmail, salt, minExpired, kpLang, passwordPolicy, allowUserRegistration, siteUrl, verifyBaseUrl, withTabLocks, guardWrite })
544
+
545
+ //升級遷移 (ADR-095 補記): 啟動時對升級前建立之應用系統金鑰列一次性定案——升級前可用者視為系統服務用途(不設期限), 升級前即不可用者(已逾期、無 timeEnd、timeEnd 格式錯)標為已失效(retired), 不因「不設期限」而復活, 列不刪.
546
+ //冪等(已定案者不再處理); 不阻擋啟動——尚未定案之舊列(遷移進行中或失敗)讀取時依升級前規則判定, 永不比升級前更寬(已逾期者仍失效), 失敗者重啟後重試
547
+ p.migrateLegacyAppTokens()
548
+ .then((r) => {
549
+ logBoot('info', `應用系統金鑰升級遷移完成: 本次定案 ${r.marked} 筆(視為系統服務用途 ${r.system}、已失效 ${r.retired})`)
550
+ })
551
+ .catch((err) => {
552
+ logBoot('error', `應用系統金鑰升級遷移失敗(${err}): 尚未定案之舊列在重啟成功前依升級前規則判定(已逾期者仍失效, 未逾期者尚未改為不設期限)`)
553
+ })
554
+
544
555
  let pp = procProtect(woItems, p, {
545
556
  procOrm, //系統直寫(自動封鎖、計時器登錄 IP)經 procOrm 且在表鎖內, 更新者記 'system'
546
557
  withTabLocks,
@@ -1118,6 +1129,10 @@ function WWebSso(WOrm, url, db, pathSettings, optExt = {}) {
1118
1129
 
1119
1130
  return b
1120
1131
  },
1132
+ //身分驗證責任(跨套件原則, 見自有套件庫主控之 dspec「使用者身分驗證原則」): 框架(w-converhp、w-serv-hapi、w-serv-webdata)不驗證token, 一律由本套件負責.
1133
+ //本套件為token簽發方且資料通道不開表操作(useDbOrm:false): verifyConn只做IP封鎖與頻率, getUserIdByToken固定回空字串(不以本體token決定執行身分);
1134
+ //故kpFunExt各函數一律以明確之token參數自行驗證(含管理員與細部權限), 查詢他人時以tokenSelf驗查詢方、tokenTarget只解析對象(checkTokenAndGetUserByToken);
1135
+ //不帶token之公開入口只限列名者(登入、自助註冊〔須開啟〕、驗證信、重寄驗證信〔隨註冊開關〕、網站顯示資訊、密碼政策預檢), 新增函數不得省略token驗證.
1121
1136
  getUserIdByToken: async (token) => { //可使用async或sync函數
1122
1137
  return '' //不檢核, 查找與變更數據皆由kpFunExt內各函數各自檢核
1123
1138
  },
@@ -1296,6 +1311,15 @@ function WWebSso(WOrm, url, db, pathSettings, optExt = {}) {
1296
1311
  return rs
1297
1312
  },
1298
1313
 
1314
+ //createAppToken: 鑄造應用系統金鑰(ADR-095); data: { name, usage: 'user' | 'system', userId(使用者用途), perms(系統服務用途) }, 權杖字串由伺服端產生並於回傳值給予;
1315
+ //權限閘同 updateTokensList(管理者或具 writeTokens 之系統服務用途金鑰); 後台清單存檔不再新增列
1316
+ createAppToken: async (_t, token, lang, data) => {
1317
+ if (!_strictStr(token)) return Promise.reject('tokenExpired')
1318
+ srLog.info({ event: 'kpfun-createAppToken', token: maskToken(token), lang })
1319
+ let r = await p.checkTokenAndCreateAppToken(token, data, { fun: funCheckAdmin, perm: 'writeTokens' })
1320
+ return r
1321
+ },
1322
+
1299
1323
  getIpsList: async (_t, token) => {
1300
1324
  if (!_strictStr(token)) return Promise.reject('tokenExpired')
1301
1325
  srLog.info({ event: 'kpfun-getIpsList', token: maskToken(token) })