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.
- package/README.md +69 -0
- package/dist/css/{app.f000459f.css → app.c117e572.css} +1 -1
- package/dist/index.tmp +1 -1
- package/dist/js/app-legacy.7c861154.js +1 -0
- package/dist/js/app.7c861154.js +1 -0
- package/dist/js/{chunk-vendors.97013ddc.js → chunk-vendors-legacy.6cb51be5.js} +2 -2
- package/dist/js/{chunk-vendors-legacy.97013ddc.js → chunk-vendors.6cb51be5.js} +2 -2
- package/dist/w-web-sso.umd.js +4 -4
- package/dist/w-web-sso.umd.js.map +1 -1
- package/docs/WWebSso.html +1 -1
- package/docs/global.html +1 -1
- package/docs/index.html +1 -1
- package/docs/server_WWebSso.mjs.html +25 -1
- package/docs/server_getIgnoredOrmKeys.mjs.html +1 -1
- package/docs/server_lockSave.mjs.html +1 -1
- package/docs/server_ormWrite.mjs.html +1 -1
- package/docs/server_staLogs_resolveShellWorker.mjs.html +1 -1
- package/docs/server_wrapTimer.mjs.html +1 -1
- package/docs/src_components_Common_CheckYesNo.vue.html +1 -1
- package/docs/src_fetchSsoMsg.mjs.html +1 -1
- package/docs/src_httpGetJson.mjs.html +1 -1
- package/docs/src_maskUrl.mjs.html +1 -1
- package/docs/src_plugins_staUsage.mjs.html +1 -1
- package/docs/src_plugins_submitGuard.mjs.html +1 -1
- package/package.json +1 -1
- package/server/WWebSso.mjs +24 -0
- package/server/procCore.mjs +631 -179
- package/server/procLang.mjs +114 -4
- package/server/procStaInfor.mjs +18 -0
- package/src/appUsage.mjs +115 -0
- package/src/components/AppTokenAddDialog.vue +384 -0
- package/src/components/LayoutContentTokens.vue +147 -76
- package/src/components/LayoutContentUsers.vue +22 -17
- package/src/components/PageLogin.vue +3 -3
- package/src/getUserByToken.mjs +4 -1
- package/src/getUserByUserId.mjs +2 -1
- package/src/getUsersByToken.mjs +2 -1
- package/src/schema/tables/tokens.mjs +9 -1
- package/src/usersRedirCheck.mjs +68 -0
- package/src/writeContracts/tokens.mjs +4 -3
- package/src/writeContracts/tokensSession.mjs +1 -1
- package/dist/js/app-legacy.7c006893.js +0 -1
- 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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
package/server/WWebSso.mjs
CHANGED
|
@@ -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) })
|