@abtnode/blocklet-services 1.16.34-beta-20241123-025401-2b4136a6 → 1.16.34-beta-20241126-104450-d60e25c2
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/api/routes/federated.js +7 -26
- package/api/routes/oauth.js +2 -4
- package/api/routes/user-session.js +200 -191
- package/api/util/attach-shared-utils.js +95 -83
- package/api/util/federated.js +33 -0
- package/dist/assets/{Add-DrvqL0hE.js → Add-CEnYgOex.js} +1 -1
- package/dist/assets/{Alert-BejFmWNH.js → Alert-CUutCRQM.js} +1 -1
- package/dist/assets/{ArrowDropDown-CZUn78y5.js → ArrowDropDown-DIG2GNpA.js} +1 -1
- package/dist/assets/{Autocomplete-BDAQ52_1.js → Autocomplete-BaPr9QiM.js} +1 -1
- package/dist/assets/{Avatar-kkkoJE0g.js → Avatar-CeWQngrs.js} +1 -1
- package/dist/assets/{ButtonGroup-WlPKzLhC.js → ButtonGroup-CfPEps06.js} +1 -1
- package/dist/assets/{CSSTransition-C2Gy3zp4.js → CSSTransition-BZUscMXa.js} +1 -1
- package/dist/assets/{CheckCircle-HvwKrdUR.js → CheckCircle-CL0KsA5E.js} +1 -1
- package/dist/assets/{ChevronLeft-ChTfIUFT.js → ChevronLeft-Qerk8qgF.js} +1 -1
- package/dist/assets/{ChevronRight-DmcZK4DK.js → ChevronRight-CSGwuunG.js} +1 -1
- package/dist/assets/{Close-B_rG_xrc.js → Close-D6sXyhlH.js} +1 -1
- package/dist/assets/{Delete-CWSox7Pi.js → Delete-CmO5kVHD.js} +1 -1
- package/dist/assets/{DeleteOutline-CCuUMIOD.js → DeleteOutline-8UjaH55s.js} +1 -1
- package/dist/assets/{DialogContentText-AZa4UZAk.js → DialogContentText-B00yXaoi.js} +1 -1
- package/dist/assets/{Done-TRARuAiP.js → Done-Dgvss9oA.js} +1 -1
- package/dist/assets/{Download-DLBLdXgp.js → Download-ChsqP0uH.js} +1 -1
- package/dist/assets/{EditIcon-B7GE1XOt.js → EditIcon-COwmruWo.js} +1 -1
- package/dist/assets/{Error-DFKaWPMg.js → Error-FscbJgp7.js} +1 -1
- package/dist/assets/{ExpandMore-Co-_XFGT.js → ExpandMore-GfZ-uN5v.js} +1 -1
- package/dist/assets/{FormControl-BXFBXBjg.js → FormControl-C6JD7494.js} +1 -1
- package/dist/assets/{FormControlLabel-Cj9C6pO9.js → FormControlLabel-X8LKIHS4.js} +1 -1
- package/dist/assets/{FormGroup-BgZW2j0M.js → FormGroup-NRynWVWb.js} +1 -1
- package/dist/assets/{Google-Bc3te3Qz.js → Google-SNXE1Rfm.js} +1 -1
- package/dist/assets/{Grid-Cdg6My8u.js → Grid-CMn9enps.js} +1 -1
- package/dist/assets/{HelpOutline-DHPhK_es.js → HelpOutline-DMKvoG5B.js} +1 -1
- package/dist/assets/{Hidden-CrDKveON.js → Hidden-CuDy4bSo.js} +1 -1
- package/dist/assets/{InfoOutlined-CBAB8Exy.js → InfoOutlined-DRNI79ap.js} +1 -1
- package/dist/assets/{InputAdornment-scbCVxkC.js → InputAdornment-trK1o6Ra.js} +1 -1
- package/dist/assets/{LastPage-PwdeYobs.js → LastPage-DWacMALj.js} +1 -1
- package/dist/assets/{Launch-Esgq-P4W.js → Launch-nHt2LvAq.js} +1 -1
- package/dist/assets/{LaunchOutlined-n2nxc88a.js → LaunchOutlined-A7b6W5__.js} +1 -1
- package/dist/assets/{Link-Chjdc6xT.js → Link-DmneDBbP.js} +1 -1
- package/dist/assets/{ListItemButton-CdKDiD3I.js → ListItemButton-CKeRCJ5w.js} +1 -1
- package/dist/assets/{ListSubheader-XBVgmuKv.js → ListSubheader-K22abWoa.js} +1 -1
- package/dist/assets/{LoadingButton-DA1yC-kT.js → LoadingButton-BDgaeIOh.js} +1 -1
- package/dist/assets/{LockIcon-BirTrSPk.js → LockIcon-HEOjrnKf.js} +1 -1
- package/dist/assets/{Loop-7B6BliWo.js → Loop-FfybK8NL.js} +1 -1
- package/dist/assets/{MarkEmailRead-DOV-CcYR.js → MarkEmailRead-Dc6AcWRS.js} +1 -1
- package/dist/assets/{Menu-DHy4VyDW.js → Menu-ICImY48f.js} +1 -1
- package/dist/assets/{MoreHoriz-BsqSBC3_.js → MoreHoriz-QJ-dNyyA.js} +1 -1
- package/dist/assets/{MoreVert-B5eqgNGS.js → MoreVert-B46gT3ic.js} +1 -1
- package/dist/assets/{OpenInNew-DZ_gvUzN.js → OpenInNew-BGNoXYXt.js} +1 -1
- package/dist/assets/{Pagination-C83UkGSd.js → Pagination-BfKMdjic.js} +1 -1
- package/dist/assets/{PlayArrow-lZ_9d9Mv.js → PlayArrow-BCwK0VYi.js} +1 -1
- package/dist/assets/{QuestionMarkCircle-JNr-NuUt.js → QuestionMarkCircle-BRwsi4c3.js} +1 -1
- package/dist/assets/{RadioGroup-CMawEABb.js → RadioGroup-BM5Kucog.js} +1 -1
- package/dist/assets/{Search-sbQ5imrV.js → Search-vKjAZRDI.js} +1 -1
- package/dist/assets/{Select-DUqBNlJT.js → Select-NBBlNRtC.js} +1 -1
- package/dist/assets/{ServerLogo-BTP7_6r3.js → ServerLogo-Be4McAaJ.js} +1 -1
- package/dist/assets/{Skeleton-DF-GsUea.js → Skeleton-jwrjHAcT.js} +1 -1
- package/dist/assets/{Slider-BCZ2cCDg.js → Slider-CJXmz9ej.js} +1 -1
- package/dist/assets/{Stack-FAMhTibv.js → Stack-DXMuFZOU.js} +1 -1
- package/dist/assets/{Stepper-b62gMXip.js → Stepper-mdLmfHWu.js} +1 -1
- package/dist/assets/{TextField-CmfNcPZp.js → TextField-BE9HBBNF.js} +1 -1
- package/dist/assets/{Toolbar-CpYKKa3O.js → Toolbar-7qNQ4bZ4.js} +1 -1
- package/dist/assets/{ViewColumn-B0BnNDVH.js → ViewColumn-BeJAI0RW.js} +1 -1
- package/dist/assets/{ViewList-BAdS9i6w.js → ViewList-BTSZluzD.js} +1 -1
- package/dist/assets/{_createAggregator-C-mfkhIa.js → _createAggregator-Cmwsfh55.js} +1 -1
- package/dist/assets/{access-control-TZ0OUaSN.js → access-control-PlOvJ_AO.js} +1 -1
- package/dist/assets/{actions-BqmYvcdf.js → actions-BHddSviS.js} +1 -1
- package/dist/assets/{add-component-core-DZBoGXUA.js → add-component-core-B1Zb7GR1.js} +12 -12
- package/dist/assets/add-resource-D1dS9Z66.js +1 -0
- package/dist/assets/{addon-BuKGtRc4.js → addon-FDUmsP1a.js} +1 -1
- package/dist/assets/{analytics-D56V3Sop.js → analytics-DasUNOZZ.js} +1 -1
- package/dist/assets/api-CHM7C61K.js +1 -0
- package/dist/assets/{audit-logs-b9BOYn27.js → audit-logs-DGf6UpQ9.js} +1 -1
- package/dist/assets/{base32-CGlguZYQ.js → base32-CqVdgCv-.js} +1 -1
- package/dist/assets/{branding-SdIrXaeA.js → branding-D9mZ97it.js} +2 -2
- package/dist/assets/{bundle-avatar-CEJOCMtg.js → bundle-avatar-CmcJLcUi.js} +1 -1
- package/dist/assets/{button-CJhVrVoJ.js → button-f1MmdcUZ.js} +1 -1
- package/dist/assets/{click-to-copy-DpIi-Ham.js → click-to-copy-DvwHcRcx.js} +1 -1
- package/dist/assets/{complete-1WLD3Yhs.js → complete-Cm-0T_kv.js} +1 -1
- package/dist/assets/{component-DdVHNXiX.js → component-COIRVrMw.js} +1 -1
- package/dist/assets/{config-DObZpcn4.js → config-Csj5xBon.js} +1 -1
- package/dist/assets/{config-DBh-abLa.js → config-DFQuXpSq.js} +1 -1
- package/dist/assets/{config-navigation-hfsPmuuQ.js → config-navigation-BeY6OIBs.js} +1 -1
- package/dist/assets/{config-space-CKHFApDK.js → config-space-B-uzzQOf.js} +1 -1
- package/dist/assets/{confirm-8d8O8-hN.js → confirm-BeuzMgKx.js} +1 -1
- package/dist/assets/{connect-BO8mJZOj.js → connect-BXJ-zYBM.js} +1 -1
- package/dist/assets/{connect-DTsatDsu.js → connect-DyhXk7LV.js} +1 -1
- package/dist/assets/{connect-to-Dgx9BKmm.js → connect-to-ClkUUvxy.js} +1 -1
- package/dist/assets/{content-layout-BDtUAEV0.js → content-layout-BuukPoQq.js} +1 -1
- package/dist/assets/{dashboard-zMsgPjUH.js → dashboard-lE_T9vNV.js} +3 -3
- package/dist/assets/{deprecate-DRUEDZmV.js → deprecate-Ohw0wM22.js} +1 -1
- package/dist/assets/{did-address-CFfKa4ZS.js → did-address-Dl7sEfPI.js} +1 -1
- package/dist/assets/{domain-BRoqwOqZ.js → domain-0D6iyno8.js} +1 -1
- package/dist/assets/{domain-list-DoZbI3G_.js → domain-list-DPC_fR4s.js} +1 -1
- package/dist/assets/{email-BM1qa0Kc.js → email-Dxr-3jU8.js} +3 -3
- package/dist/assets/emotion-cache.browser.esm-OvB3R1tt.js +1 -0
- package/dist/assets/{exchange-passport-B9Lw18ge.js → exchange-passport-be-akwXh.js} +1 -1
- package/dist/assets/{fallback-Bog6C-ue.js → fallback-BtrnFKYB.js} +1 -1
- package/dist/assets/{form-text-input-D8koWTiU.js → form-text-input-DqB1EkYl.js} +1 -1
- package/dist/assets/{format-error-CovOYOWJ.js → format-error-ax9-5p2F.js} +1 -1
- package/dist/assets/{fuel-5L-T-vll.js → fuel-M6wo1TMe.js} +1 -1
- package/dist/assets/{fullpage-Box75beI.js → fullpage-Be5VLtbn.js} +1 -1
- package/dist/assets/{home-CWu-pk3b.js → home-Sj4zjS4-.js} +1 -1
- package/dist/assets/{iframe-BJHPqysN.js → iframe-0YsarcCH.js} +1 -1
- package/dist/assets/{index-DaQDeVXf.js → index-3ihUy4xD.js} +1 -1
- package/dist/assets/{index-C1CKS8aB.js → index-B4pJXjk5.js} +1 -1
- package/dist/assets/{index-CdezW1Kw.js → index-BFoE_Yt3.js} +1 -1
- package/dist/assets/{index-DmCU66xw.js → index-BPIr1Ect.js} +1 -1
- package/dist/assets/{index-RCN26efj.js → index-BPPZQpLf.js} +1 -1
- package/dist/assets/{index-BNJA7fMm.js → index-BcngleaY.js} +1 -1
- package/dist/assets/{index-nwhvC7DB.js → index-BdQKsIdG.js} +1 -1
- package/dist/assets/{index-CVkCg5Aj.js → index-BpmSJ9Yl.js} +1 -1
- package/dist/assets/{index-OSlxm1AT.js → index-Bs6sOIsv.js} +1 -1
- package/dist/assets/{index-B43BetvD.js → index-C94zTqbe.js} +1 -1
- package/dist/assets/{index-Sv01KoW8.js → index-CB8xpfia.js} +1 -1
- package/dist/assets/{index-DlOKstn-.js → index-CM5-ZMwr.js} +3 -3
- package/dist/assets/{index-DigEOLzs.js → index-CToJFS2F.js} +1 -1
- package/dist/assets/{index-BDRTenWj.js → index-CfzGAVxb.js} +1 -1
- package/dist/assets/{index-cidQmAep.js → index-Chx10XyZ.js} +1 -1
- package/dist/assets/{index-4nRB-kyL.js → index-CmjMRcmz.js} +1 -1
- package/dist/assets/{index-CyvvlQUB.js → index-CsIL9BNL.js} +1 -1
- package/dist/assets/{index-CVNhVzkq.js → index-Ctype_yD.js} +1 -1
- package/dist/assets/{index-DCyBcr-q.js → index-D1gRNL5z.js} +1 -1
- package/dist/assets/{index-nA-fvgOS.js → index-DSgReUML.js} +1 -1
- package/dist/assets/{index-D-ntO8rE.js → index-DUCjQn9B.js} +1 -1
- package/dist/assets/{index-CBvRZgBF.js → index-DhEfbg1G.js} +1 -1
- package/dist/assets/{index-yypbZOfl.js → index-DkC4Z7ZS.js} +1 -1
- package/dist/assets/{index-B6JqnGav.js → index-Drscafxp.js} +2 -2
- package/dist/assets/{index-D_a9PK4V.js → index-Dv3UtNf0.js} +1 -1
- package/dist/assets/{index-B6_C9nGz.js → index-KQCKuBQl.js} +1 -1
- package/dist/assets/{index-DhmNHIsJ.js → index-L1uvdKP1.js} +1 -1
- package/dist/assets/{index-z1j9rzLQ.js → index-RI50EWV7.js} +1 -1
- package/dist/assets/{index-CAPbxUg5.js → index-XgLsjfUY.js} +1 -1
- package/dist/assets/{index-C2Js2VJs.js → index-dwIzYyMO.js} +1 -1
- package/dist/assets/{index-DQ1qH1cl.js → index-emWbc0aq.js} +1 -1
- package/dist/assets/{index-HtPUMJiU.js → index-k1mDfWTu.js} +1 -1
- package/dist/assets/{index-CdvA-nst.js → index-lNUKqVwv.js} +4 -4
- package/dist/assets/{index-FRZkFqzO.js → index-sgeabixm.js} +3 -3
- package/dist/assets/{invitation-B_tDaqpP.js → invitation-woQ5Oz_M.js} +1 -1
- package/dist/assets/{invite-BxGFltRp.js → invite-BVQ7mP5X.js} +1 -1
- package/dist/assets/{isEmail-DETpi_Kb.js → isEmail-B5vNiuJV.js} +1 -1
- package/dist/assets/{issue-passport-CSBAlOX8.js → issue-passport-BVA9lwvN.js} +1 -1
- package/dist/assets/{item-BRd0dxiN.js → item-CozCCAB-.js} +1 -1
- package/dist/assets/{jss-plugin-props-sort.esm-DVpQ5yti.js → jss-plugin-props-sort.esm-DqLky9fL.js} +1 -1
- package/dist/assets/{launch-result-message-C1eFaH2g.js → launch-result-message-BHmkx4EK.js} +1 -1
- package/dist/assets/{layout-BqxJknpc.js → layout-BjYG2I0e.js} +1 -1
- package/dist/assets/{list-header-xJwS88e7.js → list-header-U7WlkshP.js} +1 -1
- package/dist/assets/localization-BhW_1W55.js +1 -0
- package/dist/assets/{log-BeCiBP1M.js → log-BWvBeyFu.js} +1 -1
- package/dist/assets/{login-5cPOokIA.js → login-BmaH-PFO.js} +1 -1
- package/dist/assets/{login-oauth-callback-Bs-N26OI.js → login-oauth-callback-jcq2ro8T.js} +1 -1
- package/dist/assets/{logo-uploader-eG5vS5PT.js → logo-uploader-DRw1h7P9.js} +3 -3
- package/dist/assets/{lost-passport-B6EDBN0v.js → lost-passport-DwrNxBrg.js} +3 -3
- package/dist/assets/{lottie-react.esm-BJHzlo-r.js → lottie-react.esm-Crfv_vrn.js} +1 -1
- package/dist/assets/{notifications-D43qhnwk.js → notifications-C6hijIai.js} +1 -1
- package/dist/assets/{open-window-C5vksiRO.js → open-window-C0yEQai7.js} +1 -1
- package/dist/assets/{overview-CocE0lv3.js → overview-DdYvrtas.js} +1 -1
- package/dist/assets/{page-header--q6whIwK.js → page-header-DfEZNX4T.js} +1 -1
- package/dist/assets/{permission-DUJv7a1-.js → permission-C34_PWS3.js} +1 -1
- package/dist/assets/{preferences-AQkIuV2K.js → preferences-T7CTeNR7.js} +1 -1
- package/dist/assets/publish-resource-RK5OgLdI.js +1 -0
- package/dist/assets/{raf-schd.esm-DsHttn7z.js → raf-schd.esm-D8AMXkr5.js} +1 -1
- package/dist/assets/{react-beautiful-dnd.esm-DcPMGQEg.js → react-beautiful-dnd.esm-DVrxw2Fw.js} +1 -1
- package/dist/assets/refType-CRusJQhT.js +1 -0
- package/dist/assets/{resource-dialog-B5zwd0d0.js → resource-dialog-CQkjcdEl.js} +1 -1
- package/dist/assets/sdk-D9DeARmG.js +1 -0
- package/dist/assets/{selector-BWYpRcfb.js → selector-DyynUZ1K.js} +1 -1
- package/dist/assets/session-DwStRueZ.js +1 -0
- package/dist/assets/{setup-DVdr-Ufq.js → setup-BM9MxCRJ.js} +3 -3
- package/dist/assets/{shorten-label-CEzmS0N5.js → shorten-label-DgSj_iKd.js} +1 -1
- package/dist/assets/{simple-select-Dhi7iDYe.js → simple-select-D5JsYrcp.js} +1 -1
- package/dist/assets/{slicedToArray-iE8MT9PB.js → slicedToArray-BvEze-go.js} +1 -1
- package/dist/assets/{start-CSsdyyNU.js → start-DMZ_83G5.js} +1 -1
- package/dist/assets/{step-actions-DfqIHjeq.js → step-actions-BhqRwM1p.js} +1 -1
- package/dist/assets/{studio-DRAx93ei.js → studio-CJHXx3nz.js} +1 -1
- package/dist/assets/{switch-control-BkQkUgCM.js → switch-control-BCRT7NPQ.js} +1 -1
- package/dist/assets/{toUpper-CgUsg4OW.js → toUpper-VL7Bgo0i.js} +1 -1
- package/dist/assets/{transfer-CoLhRcuo.js → transfer-v1LLtXqH.js} +1 -1
- package/dist/assets/{trim-CWNwpiNo.js → trim-DP0jYool.js} +1 -1
- package/dist/assets/{uniqBy-C5F74Dtm.js → uniqBy-Ds-3fKqa.js} +1 -1
- package/dist/assets/{unsubscribe-6fUWnoTw.js → unsubscribe-BVuSOEEx.js} +1 -1
- package/dist/assets/{url-join-CZtmq1NB.js → url-join-CJw6XrTa.js} +1 -1
- package/dist/assets/{use-mobile-CUUBXgJx.js → use-mobile-BOfpe7EU.js} +1 -1
- package/dist/assets/{use-mobile-DwzyaoXc.js → use-mobile-CK46GXLD.js} +1 -1
- package/dist/assets/{useAsync-DD0YPYoS.js → useAsync-B3AEn2Wm.js} +1 -1
- package/dist/assets/{useFormControl-BL1v7rl-.js → useFormControl-DzctaIge.js} +1 -1
- package/dist/assets/{useLocalStorage-D0ViwHPK.js → useLocalStorage-C6aEhqFy.js} +1 -1
- package/dist/assets/{useSetState-CaW4MG-2.js → useSetState-Byn4PXJ9.js} +1 -1
- package/dist/assets/{useSlot-CXDnszbU.js → useSlot-BcOJq--Y.js} +1 -1
- package/dist/assets/{useSlotProps-_l_btYci.js → useSlotProps-Cm4YEMsK.js} +1 -1
- package/dist/assets/{useThemeProps-BuPPlocj.js → useThemeProps-BCjwemRG.js} +1 -1
- package/dist/assets/{user-center-CCplZBFV.js → user-center-CgfPJ8DB.js} +1 -1
- package/dist/assets/{user-sessions-BcrnRXiG.js → user-sessions-D7CwcMwf.js} +1 -1
- package/dist/assets/{util-BeBowuUp.js → util-tRug1FPz.js} +1 -1
- package/dist/assets/{wrap-locale-MPr5fZic.js → wrap-locale-CQSXZnej.js} +1 -1
- package/dist/index.html +1 -1
- package/dist/service-worker.js +1 -1
- package/package.json +18 -18
- package/dist/assets/add-resource-CqkVchdo.js +0 -1
- package/dist/assets/api-BvIXgXDN.js +0 -1
- package/dist/assets/emotion-cache.browser.esm-4zaifxzt.js +0 -1
- package/dist/assets/localization-CmnKrS_Z.js +0 -1
- package/dist/assets/publish-resource-CxkA39Ir.js +0 -1
- package/dist/assets/refType-D9byZzl-.js +0 -1
- package/dist/assets/sdk-DrdJIJgz.js +0 -1
- package/dist/assets/session-WU4Y95zb.js +0 -1
package/api/routes/federated.js
CHANGED
|
@@ -21,7 +21,12 @@ const initJwt = require('../libs/jwt');
|
|
|
21
21
|
const { createTokenFn, getDidConnectVersion } = require('../util');
|
|
22
22
|
const ensureBlocklet = require('../middlewares/ensure-blocklet');
|
|
23
23
|
const verifyFederatedCall = require('../middlewares/verify-federated-call');
|
|
24
|
-
const {
|
|
24
|
+
const {
|
|
25
|
+
getUserAvatarUrl,
|
|
26
|
+
getFederatedMaster,
|
|
27
|
+
getUserWithinFederated,
|
|
28
|
+
getTrustedDomains,
|
|
29
|
+
} = require('../util/federated');
|
|
25
30
|
const { declareAccount, migrateAccount } = require('../services/oauth');
|
|
26
31
|
|
|
27
32
|
const PREFIX = WELLKNOWN_SERVICE_PATH_PREFIX;
|
|
@@ -840,31 +845,7 @@ module.exports = {
|
|
|
840
845
|
// 获取当前站点所有可信的域名
|
|
841
846
|
server.get(`${prefix}/getTrustedDomains`, ensureBlocklet(), async (req, res) => {
|
|
842
847
|
const { blocklet } = req;
|
|
843
|
-
const
|
|
844
|
-
const federated = defaults(cloneDeep(blocklet.settings.federated || {}), {
|
|
845
|
-
config: {
|
|
846
|
-
appId: blocklet.appDid,
|
|
847
|
-
appPid: teamDid,
|
|
848
|
-
},
|
|
849
|
-
sites: [],
|
|
850
|
-
});
|
|
851
|
-
const nodeInfo = await req.getNodeInfo();
|
|
852
|
-
const domainAliases = await node.getBlockletDomainAliases({ blocklet, nodeInfo });
|
|
853
|
-
const domainList = domainAliases.map((item) => item.value);
|
|
854
|
-
federated.sites
|
|
855
|
-
.filter((x) => x.status === 'approved' || isMaster(x))
|
|
856
|
-
.forEach((cur) => {
|
|
857
|
-
try {
|
|
858
|
-
const appDomain = new URL(cur.appUrl).host;
|
|
859
|
-
if (appDomain) {
|
|
860
|
-
domainList.push(appDomain);
|
|
861
|
-
}
|
|
862
|
-
} catch {
|
|
863
|
-
logger.error('Failed to get domain from appUrl', { appUrl: cur.appUrl });
|
|
864
|
-
}
|
|
865
|
-
domainList.push(...(cur?.aliasDomain || []));
|
|
866
|
-
});
|
|
867
|
-
const result = [...new Set(domainList)];
|
|
848
|
+
const result = await getTrustedDomains({ node, req, blocklet });
|
|
868
849
|
res.json(result);
|
|
869
850
|
});
|
|
870
851
|
},
|
package/api/routes/oauth.js
CHANGED
|
@@ -965,13 +965,11 @@ module.exports = {
|
|
|
965
965
|
|
|
966
966
|
const checkReferrer = async (req, res, next) => {
|
|
967
967
|
const blocklet = await req.getBlocklet();
|
|
968
|
-
const
|
|
969
|
-
const domainAliases = await node.getBlockletDomainAliases({ blocklet, nodeInfo });
|
|
970
|
-
const domainAliasesHost = domainAliases.map((x) => x.value);
|
|
968
|
+
const trustedDomains = await federatedUtil.getTrustedDomains({ node, req, blocklet });
|
|
971
969
|
const referrer = req.get('referrer');
|
|
972
970
|
const referrerHost = new URL(referrer).host;
|
|
973
971
|
|
|
974
|
-
if (!
|
|
972
|
+
if (!trustedDomains.includes(referrerHost)) {
|
|
975
973
|
res.status(400).send(`Invalid host: ${referrerHost}`);
|
|
976
974
|
return;
|
|
977
975
|
}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
/* eslint-disable no-await-in-loop */
|
|
2
2
|
const { WELLKNOWN_SERVICE_PATH_PREFIX, SESSION_TTL } = require('@abtnode/constant');
|
|
3
|
-
const { LOGIN_PROVIDER } = require('@blocklet/constant');
|
|
4
|
-
const pick = require('lodash/pick');
|
|
3
|
+
// const { LOGIN_PROVIDER } = require('@blocklet/constant');
|
|
4
|
+
// const pick = require('lodash/pick');
|
|
5
5
|
const defaults = require('lodash/defaults');
|
|
6
6
|
const cloneDeep = require('lodash/cloneDeep');
|
|
7
|
-
const sortBy = require('lodash/sortBy');
|
|
7
|
+
// const sortBy = require('lodash/sortBy');
|
|
8
8
|
const omit = require('lodash/omit');
|
|
9
9
|
const pLimit = require('p-limit');
|
|
10
|
-
const { getSourceProvider } = require('@blocklet/meta/lib/did-utils');
|
|
10
|
+
// const { getSourceProvider } = require('@blocklet/meta/lib/did-utils');
|
|
11
11
|
const getRequestIP = require('@abtnode/util/lib/get-request-ip');
|
|
12
|
-
const { messages } = require('@abtnode/auth/lib/auth');
|
|
12
|
+
// const { messages } = require('@abtnode/auth/lib/auth');
|
|
13
13
|
|
|
14
|
-
const logger = require('../libs/logger')('blocklet-services:user-session');
|
|
14
|
+
// const logger = require('../libs/logger')('blocklet-services:user-session');
|
|
15
15
|
const ensureBlocklet = require('../middlewares/ensure-blocklet');
|
|
16
16
|
const { getUserAvatarUrl } = require('../util/federated');
|
|
17
|
-
const initJwt = require('../libs/jwt');
|
|
18
|
-
const { createTokenFn, getDidConnectVersion } = require('../util');
|
|
17
|
+
// const initJwt = require('../libs/jwt');
|
|
18
|
+
// const { createTokenFn, getDidConnectVersion } = require('../util');
|
|
19
19
|
|
|
20
20
|
const prefix = `${WELLKNOWN_SERVICE_PATH_PREFIX}/api/user-session`;
|
|
21
21
|
const limit = pLimit(5);
|
|
@@ -89,199 +89,208 @@ async function patchUserSessionData(userSession, { blocklet, appPid, teamDid, no
|
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
module.exports = {
|
|
92
|
+
// eslint-disable-next-line no-unused-vars
|
|
92
93
|
init(app, node, options) {
|
|
94
|
+
// FIXME: @zhanghan 登录要确保安全性
|
|
93
95
|
// NOTE: 保留 /login 路由,该功能不是针对于某一个实体来操作的,需要更明确表达意图
|
|
94
|
-
app.post(`${prefix}/login`, ensureBlocklet(),
|
|
95
|
-
|
|
96
|
-
const loginUserSession = req.body;
|
|
97
|
-
let visitorId = req.body?.visitorId;
|
|
98
|
-
if (!visitorId) {
|
|
99
|
-
visitorId = req.get('x-blocklet-visitor-id');
|
|
100
|
-
}
|
|
96
|
+
app.post(`${prefix}/login`, ensureBlocklet(), (req, res) => {
|
|
97
|
+
res.status(400).json({ error: 'not supported' });
|
|
101
98
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
}
|
|
99
|
+
// const { blocklet } = req;
|
|
100
|
+
// const loginUserSession = req.body;
|
|
101
|
+
// // let visitorId = req.body?.visitorId;
|
|
102
|
+
// // if (!visitorId) {
|
|
103
|
+
// // visitorId = req.get('x-blocklet-visitor-id');
|
|
104
|
+
// // }
|
|
105
|
+
// if (!loginUserSession.id) {
|
|
106
|
+
// res.status(400).json({ error: 'not supported' });
|
|
107
|
+
// return;
|
|
108
|
+
// }
|
|
110
109
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
const sessionTtl = blocklet.settings?.session?.ttl || SESSION_TTL;
|
|
120
|
-
// NOTICE: 保持与前端一致的排序方式,确保此时续期的是前端展示的 walletOS
|
|
121
|
-
const sortedUserSessions = sortBy(userSessions, (x) => now - new Date(x.updatedAt).getTime());
|
|
122
|
-
const validSession = sortedUserSessions.some((x) => now - new Date(x.updatedAt).getTime() < sessionTtl * 1000);
|
|
123
|
-
|
|
124
|
-
if (validSession) {
|
|
125
|
-
const user = await node.getUser({ teamDid, user: { did: loginUserSession.userDid } });
|
|
126
|
-
if (!user.approved) {
|
|
127
|
-
res.status(401).json(messages.notAllowedAppUser.en);
|
|
128
|
-
return;
|
|
129
|
-
}
|
|
130
|
-
const federated = defaults(cloneDeep(blocklet.settings.federated || {}), {
|
|
131
|
-
config: {
|
|
132
|
-
appId: blocklet.appDid,
|
|
133
|
-
appPid: teamDid,
|
|
134
|
-
},
|
|
135
|
-
sites: [],
|
|
136
|
-
});
|
|
137
|
-
const sourceProvider = getSourceProvider(user);
|
|
138
|
-
|
|
139
|
-
const provider = sourceProvider || LOGIN_PROVIDER.WALLET;
|
|
140
|
-
|
|
141
|
-
const memberSite = federated.sites.find(
|
|
142
|
-
(item) => item.appPid === loginUserSession.appPid && item.isMaster === false
|
|
143
|
-
);
|
|
144
|
-
const postUser = pick(user, ['did', 'pk', 'fullName', 'locale', 'inviter', 'generation']);
|
|
145
|
-
postUser.lastLoginAt = getRequestIP(req);
|
|
146
|
-
|
|
147
|
-
if (user.email) {
|
|
148
|
-
postUser.email = user.email;
|
|
149
|
-
}
|
|
150
|
-
if (user.avatar) {
|
|
151
|
-
postUser.avatar = getUserAvatarUrl(user.avatar, blocklet);
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
let result = {};
|
|
155
|
-
|
|
156
|
-
const walletOS = validSession?.extra?.walletOS || 'web';
|
|
157
|
-
|
|
158
|
-
const isFederatedLogin = !!memberSite;
|
|
159
|
-
if (isFederatedLogin) {
|
|
160
|
-
try {
|
|
161
|
-
result = await node.loginFederated({
|
|
162
|
-
did: teamDid,
|
|
163
|
-
data: {
|
|
164
|
-
user: postUser,
|
|
165
|
-
passport: loginUserSession.passportId ? { id: loginUserSession.passportId } : undefined,
|
|
166
|
-
walletOS,
|
|
167
|
-
provider,
|
|
168
|
-
},
|
|
169
|
-
site: memberSite,
|
|
170
|
-
});
|
|
171
|
-
} catch (err) {
|
|
172
|
-
if (err.response) {
|
|
173
|
-
const { status, data } = err.response;
|
|
174
|
-
res.status(status).json(data);
|
|
175
|
-
return;
|
|
176
|
-
}
|
|
177
|
-
throw err;
|
|
178
|
-
}
|
|
179
|
-
} else {
|
|
180
|
-
const { createSessionToken } = initJwt(node, options);
|
|
181
|
-
const createToken = createTokenFn(createSessionToken);
|
|
182
|
-
const { secret } = await req.getBlockletInfo();
|
|
183
|
-
const sessionConfig = blocklet.settings?.session || {};
|
|
184
|
-
const targetPassport = loginUserSession.passportId
|
|
185
|
-
? (user?.passports || []).find((item) => item.id === loginUserSession.passportId)
|
|
186
|
-
: null;
|
|
187
|
-
const loggedInUser = await node.loginUser({
|
|
188
|
-
teamDid,
|
|
189
|
-
user: {
|
|
190
|
-
did: postUser.did,
|
|
191
|
-
pk: postUser.pk,
|
|
192
|
-
passport: targetPassport,
|
|
193
|
-
connectedAccount: {
|
|
194
|
-
provider,
|
|
195
|
-
did: user.did,
|
|
196
|
-
pk: user.pk,
|
|
197
|
-
},
|
|
198
|
-
},
|
|
199
|
-
});
|
|
200
|
-
|
|
201
|
-
result = createToken(
|
|
202
|
-
user.did,
|
|
203
|
-
{
|
|
204
|
-
secret,
|
|
205
|
-
passport: targetPassport,
|
|
206
|
-
role: targetPassport?.role || 'guest',
|
|
207
|
-
fullName: loggedInUser.fullName,
|
|
208
|
-
provider,
|
|
209
|
-
walletOS,
|
|
210
|
-
emailVerified: !!user?.emailVerified,
|
|
211
|
-
phoneVerified: !!user?.phoneVerified,
|
|
212
|
-
},
|
|
213
|
-
{
|
|
214
|
-
...sessionConfig,
|
|
215
|
-
didConnectVersion: getDidConnectVersion(req),
|
|
216
|
-
}
|
|
217
|
-
);
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
const lastLoginIp = getRequestIP(req);
|
|
221
|
-
const ua = req.get('user-agent');
|
|
222
|
-
const walletDeviceMessageToken = req.get('wallet-device-message-token');
|
|
223
|
-
const walletDeviceId = req.get('wallet-device-id');
|
|
224
|
-
|
|
225
|
-
const userSessionDoc = await node.upsertUserSession({
|
|
226
|
-
id: loginUserSession.id,
|
|
227
|
-
teamDid,
|
|
228
|
-
userDid: loginUserSession.userDid,
|
|
229
|
-
visitorId,
|
|
230
|
-
appPid: loginUserSession.appPid,
|
|
231
|
-
passportId: loginUserSession.passportId,
|
|
232
|
-
status: 'online',
|
|
233
|
-
ua,
|
|
234
|
-
lastLoginIp,
|
|
235
|
-
extra: {
|
|
236
|
-
walletOS,
|
|
237
|
-
walletDeviceMessageToken,
|
|
238
|
-
walletDeviceId,
|
|
239
|
-
},
|
|
240
|
-
});
|
|
110
|
+
// if (!loginUserSession.userDid) {
|
|
111
|
+
// res.status(400).json({ error: 'userDid is required' });
|
|
112
|
+
// return;
|
|
113
|
+
// }
|
|
114
|
+
// if (!loginUserSession.appPid) {
|
|
115
|
+
// res.status(400).json({ error: 'appPid is required' });
|
|
116
|
+
// return;
|
|
117
|
+
// }
|
|
241
118
|
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
walletDeviceId,
|
|
255
|
-
},
|
|
256
|
-
});
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
logger.info('quick-login with', {
|
|
260
|
-
teamDid,
|
|
261
|
-
visitorId,
|
|
262
|
-
userDid: loginUserSession.userDid,
|
|
263
|
-
appPid: loginUserSession.appPid,
|
|
264
|
-
passportId: loginUserSession.passportId,
|
|
265
|
-
extra: {
|
|
266
|
-
walletOS,
|
|
267
|
-
},
|
|
268
|
-
});
|
|
119
|
+
// const teamDid = blocklet.appPid;
|
|
120
|
+
// const userSessions = await node.getUserSession({
|
|
121
|
+
// teamDid,
|
|
122
|
+
// userDid: loginUserSession.userDid,
|
|
123
|
+
// // visitorId,
|
|
124
|
+
// id: loginUserSession.id,
|
|
125
|
+
// });
|
|
126
|
+
// const now = Date.now();
|
|
127
|
+
// const sessionTtl = blocklet.settings?.session?.ttl || SESSION_TTL;
|
|
128
|
+
// // NOTICE: 保持与前端一致的排序方式,确保此时续期的是前端展示的 walletOS
|
|
129
|
+
// const sortedUserSessions = sortBy(userSessions, (x) => now - new Date(x.updatedAt).getTime());
|
|
130
|
+
// const validSession = sortedUserSessions.some((x) => now - new Date(x.updatedAt).getTime() < sessionTtl * 1000);
|
|
269
131
|
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
}
|
|
132
|
+
// if (validSession) {
|
|
133
|
+
// const user = await node.getUser({ teamDid, user: { did: loginUserSession.userDid } });
|
|
134
|
+
// if (!user.approved) {
|
|
135
|
+
// res.status(401).json(messages.notAllowedAppUser.en);
|
|
136
|
+
// return;
|
|
137
|
+
// }
|
|
138
|
+
// const federated = defaults(cloneDeep(blocklet.settings.federated || {}), {
|
|
139
|
+
// config: {
|
|
140
|
+
// appId: blocklet.appDid,
|
|
141
|
+
// appPid: teamDid,
|
|
142
|
+
// },
|
|
143
|
+
// sites: [],
|
|
144
|
+
// });
|
|
145
|
+
// const sourceProvider = getSourceProvider(user);
|
|
146
|
+
|
|
147
|
+
// const provider = sourceProvider || LOGIN_PROVIDER.WALLET;
|
|
148
|
+
|
|
149
|
+
// const memberSite = federated.sites.find(
|
|
150
|
+
// (item) => item.appPid === loginUserSession.appPid && item.isMaster === false
|
|
151
|
+
// );
|
|
152
|
+
// const postUser = pick(user, ['did', 'pk', 'fullName', 'locale', 'inviter', 'generation']);
|
|
153
|
+
// postUser.lastLoginAt = getRequestIP(req);
|
|
154
|
+
|
|
155
|
+
// if (user.email) {
|
|
156
|
+
// postUser.email = user.email;
|
|
157
|
+
// }
|
|
158
|
+
// if (user.avatar) {
|
|
159
|
+
// postUser.avatar = getUserAvatarUrl(user.avatar, blocklet);
|
|
160
|
+
// }
|
|
161
|
+
|
|
162
|
+
// let result = {};
|
|
163
|
+
|
|
164
|
+
// const walletOS = validSession?.extra?.walletOS || 'web';
|
|
165
|
+
|
|
166
|
+
// const isFederatedLogin = !!memberSite;
|
|
167
|
+
// if (isFederatedLogin) {
|
|
168
|
+
// try {
|
|
169
|
+
// result = await node.loginFederated({
|
|
170
|
+
// did: teamDid,
|
|
171
|
+
// data: {
|
|
172
|
+
// user: postUser,
|
|
173
|
+
// passport: loginUserSession.passportId ? { id: loginUserSession.passportId } : undefined,
|
|
174
|
+
// walletOS,
|
|
175
|
+
// provider,
|
|
176
|
+
// },
|
|
177
|
+
// site: memberSite,
|
|
178
|
+
// });
|
|
179
|
+
// } catch (err) {
|
|
180
|
+
// if (err.response) {
|
|
181
|
+
// const { status, data } = err.response;
|
|
182
|
+
// res.status(status).json(data);
|
|
183
|
+
// return;
|
|
184
|
+
// }
|
|
185
|
+
// throw err;
|
|
186
|
+
// }
|
|
187
|
+
// } else {
|
|
188
|
+
// const { createSessionToken } = initJwt(node, options);
|
|
189
|
+
// const createToken = createTokenFn(createSessionToken);
|
|
190
|
+
// const { secret } = await req.getBlockletInfo();
|
|
191
|
+
// const sessionConfig = blocklet.settings?.session || {};
|
|
192
|
+
// const targetPassport = loginUserSession.passportId
|
|
193
|
+
// ? (user?.passports || []).find((item) => item.id === loginUserSession.passportId)
|
|
194
|
+
// : null;
|
|
195
|
+
// const loggedInUser = await node.loginUser({
|
|
196
|
+
// teamDid,
|
|
197
|
+
// user: {
|
|
198
|
+
// did: postUser.did,
|
|
199
|
+
// pk: postUser.pk,
|
|
200
|
+
// passport: targetPassport,
|
|
201
|
+
// connectedAccount: {
|
|
202
|
+
// provider,
|
|
203
|
+
// did: user.did,
|
|
204
|
+
// pk: user.pk,
|
|
205
|
+
// },
|
|
206
|
+
// },
|
|
207
|
+
// });
|
|
208
|
+
|
|
209
|
+
// result = createToken(
|
|
210
|
+
// user.did,
|
|
211
|
+
// {
|
|
212
|
+
// secret,
|
|
213
|
+
// passport: targetPassport,
|
|
214
|
+
// role: targetPassport?.role || 'guest',
|
|
215
|
+
// fullName: loggedInUser.fullName,
|
|
216
|
+
// provider,
|
|
217
|
+
// walletOS,
|
|
218
|
+
// emailVerified: !!user?.emailVerified,
|
|
219
|
+
// phoneVerified: !!user?.phoneVerified,
|
|
220
|
+
// },
|
|
221
|
+
// {
|
|
222
|
+
// ...sessionConfig,
|
|
223
|
+
// didConnectVersion: getDidConnectVersion(req),
|
|
224
|
+
// }
|
|
225
|
+
// );
|
|
226
|
+
// }
|
|
227
|
+
|
|
228
|
+
// const lastLoginIp = getRequestIP(req);
|
|
229
|
+
// const ua = req.get('user-agent');
|
|
230
|
+
// const walletDeviceMessageToken = req.get('wallet-device-message-token');
|
|
231
|
+
// const walletDeviceId = req.get('wallet-device-id');
|
|
232
|
+
|
|
233
|
+
// const userSessionDoc = await node.upsertUserSession({
|
|
234
|
+
// id: loginUserSession.id,
|
|
235
|
+
// teamDid,
|
|
236
|
+
// userDid: loginUserSession.userDid,
|
|
237
|
+
// // visitorId,
|
|
238
|
+
// appPid: loginUserSession.appPid,
|
|
239
|
+
// passportId: loginUserSession.passportId,
|
|
240
|
+
// status: 'online',
|
|
241
|
+
// ua,
|
|
242
|
+
// lastLoginIp,
|
|
243
|
+
// extra: {
|
|
244
|
+
// walletOS,
|
|
245
|
+
// walletDeviceMessageToken,
|
|
246
|
+
// walletDeviceId,
|
|
247
|
+
// },
|
|
248
|
+
// });
|
|
249
|
+
|
|
250
|
+
// if (isFederatedLogin) {
|
|
251
|
+
// node.syncUserSession({
|
|
252
|
+
// teamDid,
|
|
253
|
+
// userDid: loginUserSession.userDid,
|
|
254
|
+
// visitorId: userSessionDoc.visitorId,
|
|
255
|
+
// passportId: loginUserSession.passportId,
|
|
256
|
+
// targetAppPid: loginUserSession.appPid,
|
|
257
|
+
// ua,
|
|
258
|
+
// lastLoginIp,
|
|
259
|
+
// extra: {
|
|
260
|
+
// walletOS,
|
|
261
|
+
// walletDeviceMessageToken,
|
|
262
|
+
// walletDeviceId,
|
|
263
|
+
// },
|
|
264
|
+
// });
|
|
265
|
+
// }
|
|
266
|
+
|
|
267
|
+
// logger.info('quick-login with', {
|
|
268
|
+
// teamDid,
|
|
269
|
+
// // visitorId,
|
|
270
|
+
// userDid: loginUserSession.userDid,
|
|
271
|
+
// appPid: loginUserSession.appPid,
|
|
272
|
+
// passportId: loginUserSession.passportId,
|
|
273
|
+
// extra: {
|
|
274
|
+
// walletOS,
|
|
275
|
+
// },
|
|
276
|
+
// });
|
|
277
|
+
|
|
278
|
+
// res.json({ ...result, visitorId: userSessionDoc.visitorId });
|
|
279
|
+
// } else {
|
|
280
|
+
// logger.warn('failed to quick-login with', {
|
|
281
|
+
// teamDid,
|
|
282
|
+
// // visitorId,
|
|
283
|
+
// userDid: loginUserSession.userDid,
|
|
284
|
+
// appPid: loginUserSession.appPid,
|
|
285
|
+
// passportId: loginUserSession.passportId,
|
|
286
|
+
// });
|
|
287
|
+
// res.status(401).json({ error: 'session expired' });
|
|
288
|
+
// }
|
|
281
289
|
});
|
|
282
290
|
|
|
283
291
|
/**
|
|
284
292
|
* 获取指定用户的所有登录会话
|
|
293
|
+
* FIXME: @zhanghan 获取要确保安全性
|
|
285
294
|
*/
|
|
286
295
|
app.get(`${prefix}`, ensureBlocklet(), async (req, res) => {
|
|
287
296
|
const { blocklet } = req;
|