@abtnode/blocklet-services 1.16.45-beta-20250701-122807-92b03aba → 1.16.45-beta-20250702-091552-478bb5e9
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/index.js +4 -2
- package/api/routes/oauth/client.js +0 -12
- package/api/routes/user-session.js +9 -3
- package/api/routes/user.js +19 -13
- package/api/services/auth/connect/bind-wallet.js +1 -1
- package/package.json +23 -23
package/api/index.js
CHANGED
|
@@ -25,7 +25,7 @@ const { getAppOgCacheDir } = require('@abtnode/util/lib/blocklet');
|
|
|
25
25
|
const { ensureLocale } = require('@abtnode/util/lib/middlewares/ensure-locale');
|
|
26
26
|
const normalizePathPrefix = require('@abtnode/util/lib/normalize-path-prefix');
|
|
27
27
|
const createInvite = require('@abtnode/auth/lib/invitation');
|
|
28
|
-
const { getStatusFromError } = require('@blocklet/error');
|
|
28
|
+
const { getStatusFromError, formatError } = require('@blocklet/error');
|
|
29
29
|
const { withQuery, joinURL, withTrailingSlash } = require('ufo');
|
|
30
30
|
const { createProxyMiddleware, responseInterceptor } = require('http-proxy-middleware');
|
|
31
31
|
const { findComponentByIdV2, getMountPoints } = require('@blocklet/meta/lib/util');
|
|
@@ -514,6 +514,8 @@ module.exports = function createServer(node, serverOptions = {}) {
|
|
|
514
514
|
|
|
515
515
|
// 该接口不需要经过 security 中间件
|
|
516
516
|
server.get(`${WELLKNOWN_SERVICE_PATH_PREFIX}/share/shared-bridge.html`, (req, res) => {
|
|
517
|
+
res.set('cross-origin-resource-policy', 'cross-origin');
|
|
518
|
+
res.set('cross-origin-embedder-policy', 'require-corp');
|
|
517
519
|
if (isProduction) {
|
|
518
520
|
res.sendFile(path.join(__dirname, '../dist', 'share', 'shared-bridge.html'));
|
|
519
521
|
} else {
|
|
@@ -850,7 +852,7 @@ self.blocklet = {
|
|
|
850
852
|
// eslint-disable-next-line no-unused-vars
|
|
851
853
|
server.use((err, req, res, next) => {
|
|
852
854
|
logger.error('Something broke', { url: req.url, error: err });
|
|
853
|
-
res.status(getStatusFromError(err)).send(
|
|
855
|
+
res.status(getStatusFromError(err)).send(formatError(err));
|
|
854
856
|
});
|
|
855
857
|
|
|
856
858
|
// Web socket server
|
|
@@ -578,10 +578,6 @@ module.exports = {
|
|
|
578
578
|
res.status(200).json({});
|
|
579
579
|
} catch (err) {
|
|
580
580
|
logger.error('Failed bind oauth', { error: err });
|
|
581
|
-
if (err instanceof CustomError) {
|
|
582
|
-
res.status(err.code).send(err.message);
|
|
583
|
-
return;
|
|
584
|
-
}
|
|
585
581
|
throw err;
|
|
586
582
|
}
|
|
587
583
|
});
|
|
@@ -592,10 +588,6 @@ module.exports = {
|
|
|
592
588
|
res.status(200).json({});
|
|
593
589
|
} catch (err) {
|
|
594
590
|
logger.error('Failed unbind oauth', { error: err });
|
|
595
|
-
if (err instanceof CustomError) {
|
|
596
|
-
res.status(err.code).send(err.message);
|
|
597
|
-
return;
|
|
598
|
-
}
|
|
599
591
|
throw err;
|
|
600
592
|
}
|
|
601
593
|
});
|
|
@@ -621,10 +613,6 @@ module.exports = {
|
|
|
621
613
|
res.send(result);
|
|
622
614
|
} catch (err) {
|
|
623
615
|
logger.error('Failed login oauth', { error: err, action });
|
|
624
|
-
if (err instanceof CustomError) {
|
|
625
|
-
res.status(err.code).send(err.message);
|
|
626
|
-
return;
|
|
627
|
-
}
|
|
628
616
|
throw err;
|
|
629
617
|
}
|
|
630
618
|
});
|
|
@@ -19,6 +19,7 @@ const { Joi } = require('@arcblock/validator');
|
|
|
19
19
|
const { getDeviceData } = require('@abtnode/util/lib/device');
|
|
20
20
|
const cors = require('cors');
|
|
21
21
|
const getOrigin = require('@abtnode/util/lib/get-origin');
|
|
22
|
+
const { CustomError } = require('@blocklet/error');
|
|
22
23
|
|
|
23
24
|
const logger = require('../libs/logger')('blocklet-services:user-session');
|
|
24
25
|
const ensureBlocklet = require('../middlewares/ensure-blocklet');
|
|
@@ -135,11 +136,16 @@ module.exports = {
|
|
|
135
136
|
// eslint-disable-next-line no-unused-vars
|
|
136
137
|
init(app, node, options) {
|
|
137
138
|
const ensureCors = cors(async (req, callback) => {
|
|
138
|
-
const
|
|
139
|
-
if (
|
|
139
|
+
const origin = req.get('origin');
|
|
140
|
+
if (!origin) {
|
|
140
141
|
callback(null, { origin: true });
|
|
141
142
|
} else {
|
|
142
|
-
|
|
143
|
+
const domains = await getTrustedDomains({ node, req, blocklet: req.blocklet });
|
|
144
|
+
if (domains.includes(origin)) {
|
|
145
|
+
callback(null, { origin: true });
|
|
146
|
+
} else {
|
|
147
|
+
callback(new CustomError(403, 'Not allowed by CORS'));
|
|
148
|
+
}
|
|
143
149
|
}
|
|
144
150
|
});
|
|
145
151
|
app.options(`${prefix}/login`, ensureBlocklet({ useCache: true }), ensureCors);
|
package/api/routes/user.js
CHANGED
|
@@ -395,10 +395,15 @@ async function verifyUserSig({ userDid, signature, teamDid, sourceAppPid, userPk
|
|
|
395
395
|
|
|
396
396
|
const userDidWallet = getWallet(currentUser);
|
|
397
397
|
|
|
398
|
+
if (!userDidWallet) {
|
|
399
|
+
logger.error('User did not have wallet', { userDid, sourceAppPid, teamDid });
|
|
400
|
+
throw new CustomError(404, 'User not exist');
|
|
401
|
+
}
|
|
402
|
+
|
|
398
403
|
// HACK: @zhanghan 钱包传递的签名使用的是 didWallet 账户,但这个账户可能是 原生的 oauth 账户,所以需要找到对应的 did-wallet 账户
|
|
399
404
|
const valid = await JWT.verify(signature, userDidWallet.pk);
|
|
400
405
|
if (!valid) {
|
|
401
|
-
throw new
|
|
406
|
+
throw new CustomError(401, 'Invalid signature');
|
|
402
407
|
}
|
|
403
408
|
return currentUser;
|
|
404
409
|
}
|
|
@@ -738,11 +743,17 @@ const spaceGatewaySchema = Joi.object({
|
|
|
738
743
|
module.exports = {
|
|
739
744
|
init(server, node, options) {
|
|
740
745
|
const ensureCors = cors(async (req, callback) => {
|
|
741
|
-
const
|
|
742
|
-
if (
|
|
746
|
+
const origin = req.get('origin');
|
|
747
|
+
if (!origin) {
|
|
743
748
|
callback(null, { origin: true });
|
|
744
749
|
} else {
|
|
745
|
-
|
|
750
|
+
const { hostname } = new URL(origin);
|
|
751
|
+
const domains = await federatedUtil.getTrustedDomains({ node, req, blocklet: req.blocklet });
|
|
752
|
+
if (domains.includes(hostname)) {
|
|
753
|
+
callback(null, { origin: true });
|
|
754
|
+
} else {
|
|
755
|
+
callback(new CustomError(403, 'Not allowed by CORS'));
|
|
756
|
+
}
|
|
746
757
|
}
|
|
747
758
|
});
|
|
748
759
|
|
|
@@ -753,10 +764,6 @@ module.exports = {
|
|
|
753
764
|
res.status(200).json(data);
|
|
754
765
|
} catch (err) {
|
|
755
766
|
logger.error('Failed login', { error: err });
|
|
756
|
-
if (err instanceof CustomError) {
|
|
757
|
-
res.status(err.code).json(err.message);
|
|
758
|
-
return;
|
|
759
|
-
}
|
|
760
767
|
throw err;
|
|
761
768
|
}
|
|
762
769
|
});
|
|
@@ -1197,6 +1204,9 @@ module.exports = {
|
|
|
1197
1204
|
res.json({ verified: false, id: undefined });
|
|
1198
1205
|
}
|
|
1199
1206
|
});
|
|
1207
|
+
server.get(`${prefixApi}/email/test`, ensureBlocklet(), ensureCors, async (req, res) => {
|
|
1208
|
+
res.json({ success: true });
|
|
1209
|
+
});
|
|
1200
1210
|
server.post(
|
|
1201
1211
|
`${prefixApi}/email/login`,
|
|
1202
1212
|
ensureBlocklet(),
|
|
@@ -1210,7 +1220,7 @@ module.exports = {
|
|
|
1210
1220
|
};
|
|
1211
1221
|
if (!actionMap[action]) {
|
|
1212
1222
|
logger.error('Failed to login by email', { error: 'action not exist', action });
|
|
1213
|
-
throw new
|
|
1223
|
+
throw new CustomError(400, `action not exist: ${action}`);
|
|
1214
1224
|
}
|
|
1215
1225
|
|
|
1216
1226
|
try {
|
|
@@ -1218,10 +1228,6 @@ module.exports = {
|
|
|
1218
1228
|
res.json(result);
|
|
1219
1229
|
} catch (err) {
|
|
1220
1230
|
logger.error('Failed login email', { error: err, action });
|
|
1221
|
-
if (err instanceof CustomError) {
|
|
1222
|
-
res.status(err.code).send(err.message);
|
|
1223
|
-
return;
|
|
1224
|
-
}
|
|
1225
1231
|
throw err;
|
|
1226
1232
|
}
|
|
1227
1233
|
}
|
|
@@ -2,5 +2,5 @@ const { createBindWalletRoute } = require('@abtnode/auth/lib/bind-wallet');
|
|
|
2
2
|
|
|
3
3
|
// eslint-disable-next-line no-unused-vars
|
|
4
4
|
module.exports = function createRoutes(node, authenticator, createSessionToken) {
|
|
5
|
-
return createBindWalletRoute({ node });
|
|
5
|
+
return createBindWalletRoute({ node, isService: true });
|
|
6
6
|
};
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "1.16.45-beta-
|
|
6
|
+
"version": "1.16.45-beta-20250702-091552-478bb5e9",
|
|
7
7
|
"description": "Provide unified services for every blocklet",
|
|
8
8
|
"main": "api/index.js",
|
|
9
9
|
"files": [
|
|
@@ -33,18 +33,18 @@
|
|
|
33
33
|
"author": "wangshijun <wangshijun2010@gmail.com> (http://github.com/wangshijun)",
|
|
34
34
|
"license": "Apache-2.0",
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@abtnode/analytics": "1.16.45-beta-
|
|
37
|
-
"@abtnode/auth": "1.16.45-beta-
|
|
38
|
-
"@abtnode/client": "1.16.45-beta-
|
|
39
|
-
"@abtnode/connect-storage": "1.16.45-beta-
|
|
40
|
-
"@abtnode/constant": "1.16.45-beta-
|
|
41
|
-
"@abtnode/core": "1.16.45-beta-
|
|
42
|
-
"@abtnode/cron": "1.16.45-beta-
|
|
43
|
-
"@abtnode/db-cache": "1.16.45-beta-
|
|
44
|
-
"@abtnode/logger": "1.16.45-beta-
|
|
45
|
-
"@abtnode/models": "1.16.45-beta-
|
|
46
|
-
"@abtnode/router-templates": "1.16.45-beta-
|
|
47
|
-
"@abtnode/util": "1.16.45-beta-
|
|
36
|
+
"@abtnode/analytics": "1.16.45-beta-20250702-091552-478bb5e9",
|
|
37
|
+
"@abtnode/auth": "1.16.45-beta-20250702-091552-478bb5e9",
|
|
38
|
+
"@abtnode/client": "1.16.45-beta-20250702-091552-478bb5e9",
|
|
39
|
+
"@abtnode/connect-storage": "1.16.45-beta-20250702-091552-478bb5e9",
|
|
40
|
+
"@abtnode/constant": "1.16.45-beta-20250702-091552-478bb5e9",
|
|
41
|
+
"@abtnode/core": "1.16.45-beta-20250702-091552-478bb5e9",
|
|
42
|
+
"@abtnode/cron": "1.16.45-beta-20250702-091552-478bb5e9",
|
|
43
|
+
"@abtnode/db-cache": "1.16.45-beta-20250702-091552-478bb5e9",
|
|
44
|
+
"@abtnode/logger": "1.16.45-beta-20250702-091552-478bb5e9",
|
|
45
|
+
"@abtnode/models": "1.16.45-beta-20250702-091552-478bb5e9",
|
|
46
|
+
"@abtnode/router-templates": "1.16.45-beta-20250702-091552-478bb5e9",
|
|
47
|
+
"@abtnode/util": "1.16.45-beta-20250702-091552-478bb5e9",
|
|
48
48
|
"@arcblock/did": "1.20.14",
|
|
49
49
|
"@arcblock/did-auth": "1.20.14",
|
|
50
50
|
"@arcblock/did-ext": "1.20.14",
|
|
@@ -54,19 +54,19 @@
|
|
|
54
54
|
"@arcblock/jwt": "1.20.14",
|
|
55
55
|
"@arcblock/validator": "1.20.14",
|
|
56
56
|
"@arcblock/ws": "1.20.14",
|
|
57
|
-
"@blocklet/constant": "1.16.45-beta-
|
|
57
|
+
"@blocklet/constant": "1.16.45-beta-20250702-091552-478bb5e9",
|
|
58
58
|
"@blocklet/dbhub": "^0.2.9",
|
|
59
59
|
"@blocklet/did-space-js": "^1.0.62",
|
|
60
|
-
"@blocklet/env": "1.16.45-beta-
|
|
60
|
+
"@blocklet/env": "1.16.45-beta-20250702-091552-478bb5e9",
|
|
61
61
|
"@blocklet/error": "^0.2.5",
|
|
62
62
|
"@blocklet/form-builder": "^0.1.12",
|
|
63
63
|
"@blocklet/form-collector": "^0.1.8",
|
|
64
|
-
"@blocklet/images": "1.16.45-beta-
|
|
65
|
-
"@blocklet/js-sdk": "1.16.45-beta-
|
|
64
|
+
"@blocklet/images": "1.16.45-beta-20250702-091552-478bb5e9",
|
|
65
|
+
"@blocklet/js-sdk": "1.16.45-beta-20250702-091552-478bb5e9",
|
|
66
66
|
"@blocklet/mcp": "^1.10.2",
|
|
67
|
-
"@blocklet/meta": "1.16.45-beta-
|
|
68
|
-
"@blocklet/rate-limit": "1.16.45-beta-
|
|
69
|
-
"@blocklet/sdk": "1.16.45-beta-
|
|
67
|
+
"@blocklet/meta": "1.16.45-beta-20250702-091552-478bb5e9",
|
|
68
|
+
"@blocklet/rate-limit": "1.16.45-beta-20250702-091552-478bb5e9",
|
|
69
|
+
"@blocklet/sdk": "1.16.45-beta-20250702-091552-478bb5e9",
|
|
70
70
|
"@blocklet/theme": "^2.13.70",
|
|
71
71
|
"@blocklet/theme-builder": "^0.2.1",
|
|
72
72
|
"@blocklet/uploader-server": "^0.1.101",
|
|
@@ -121,7 +121,7 @@
|
|
|
121
121
|
"whatwg-url": "14.0.0"
|
|
122
122
|
},
|
|
123
123
|
"devDependencies": {
|
|
124
|
-
"@abtnode/ux": "1.16.45-beta-
|
|
124
|
+
"@abtnode/ux": "1.16.45-beta-20250702-091552-478bb5e9",
|
|
125
125
|
"@arcblock/bridge": "^2.13.70",
|
|
126
126
|
"@arcblock/did-connect": "^2.13.70",
|
|
127
127
|
"@arcblock/icons": "^2.13.70",
|
|
@@ -129,7 +129,7 @@
|
|
|
129
129
|
"@arcblock/ux": "^2.13.70",
|
|
130
130
|
"@blocklet/launcher-layout": "^2.13.70",
|
|
131
131
|
"@blocklet/payment-react": "^1.18.56",
|
|
132
|
-
"@blocklet/tracker": "1.16.45-beta-
|
|
132
|
+
"@blocklet/tracker": "1.16.45-beta-20250702-091552-478bb5e9",
|
|
133
133
|
"@blocklet/ui-react": "^2.13.70",
|
|
134
134
|
"@blocklet/uploader": "^0.1.95",
|
|
135
135
|
"@emotion/react": "^11.11.4",
|
|
@@ -207,5 +207,5 @@
|
|
|
207
207
|
"url": "https://github.com/ArcBlock/blocklet-server/issues",
|
|
208
208
|
"email": "shijun@arcblock.io"
|
|
209
209
|
},
|
|
210
|
-
"gitHead": "
|
|
210
|
+
"gitHead": "e3e4aa595d448f040bc508565cddecc52056a4df"
|
|
211
211
|
}
|