@abtnode/blocklet-services 1.16.14-beta-d802cd3c → 1.16.14-beta-dc99d0a2

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/cache.js CHANGED
@@ -108,7 +108,7 @@ cache.getTransport = ({ did, config, force }) => {
108
108
  const transporter = nodemailer.createTransport({
109
109
  host: config.host,
110
110
  port: config.port,
111
- secure: false,
111
+ secure: !!config.secure,
112
112
  auth: { user: config.user, pass: config.password },
113
113
  });
114
114
  if (transporter) {
@@ -615,6 +615,7 @@ module.exports = {
615
615
  userDid,
616
616
  createSessionToken,
617
617
  componentId,
618
+ provider,
618
619
  }) => {
619
620
  const blocklet = await request.getBlocklet();
620
621
  const { name, did: teamDid, secret } = await request.getBlockletInfo();
@@ -685,7 +686,7 @@ module.exports = {
685
686
  await node.createAuditLog(
686
687
  {
687
688
  action: 'switchPassport',
688
- args: { teamDid, userDid, passport: passportForLog, provider: LOGIN_PROVIDER.WALLET },
689
+ args: { teamDid, userDid, passport: passportForLog, provider },
689
690
  context: formatContext(Object.assign(request, { user })),
690
691
  result: {},
691
692
  },
@@ -697,7 +698,7 @@ module.exports = {
697
698
  const sessionConfig = blocklet.settings?.session || {};
698
699
  const { sessionToken, refreshToken } = createToken(
699
700
  userDid,
700
- { secret, passport, role, fullName: user.fullName },
701
+ { secret, passport, role, fullName: user.fullName, provider },
701
702
  { ...sessionConfig, didConnectVersion: getDidConnectVersion(request) }
702
703
  );
703
704
  return { sessionToken, refreshToken };
package/api/libs/email.js CHANGED
@@ -69,11 +69,12 @@ async function sendEmail(receiver, notification, { teamDid, node, locale }) {
69
69
  })
70
70
  );
71
71
  const emailData = {
72
- from: emailConfig.from,
72
+ from: emailConfig.user,
73
73
  to: receiver,
74
74
  title: notification.title,
75
75
  subject,
76
76
  html,
77
+ replyTo: emailConfig.from,
77
78
  };
78
79
  const transporter = cache.getTransport({ did: teamDid, config: emailConfig });
79
80
  await transporter.sendMail(emailData);
package/api/libs/jwt.js CHANGED
@@ -74,6 +74,7 @@ const initJwt = (node, options) => {
74
74
 
75
75
  user.role = role;
76
76
  user.passport = passport;
77
+ user.provider = provider;
77
78
  } else {
78
79
  user = { did, role, passport, fullName, provider };
79
80
  }
@@ -7,6 +7,8 @@ const get = require('lodash/get');
7
7
  const cors = require('cors');
8
8
  const { LOGIN_PROVIDER } = require('@blocklet/constant');
9
9
  const pick = require('lodash/pick');
10
+ const { getAvatarByUrl, extractUserAvatar } = require('@abtnode/util/lib/user');
11
+ const { getApplicationInfo } = require('@abtnode/auth/lib/auth');
10
12
 
11
13
  const { api } = require('../libs/api');
12
14
  const initJwt = require('../libs/jwt');
@@ -269,10 +271,23 @@ module.exports = {
269
271
  id: passport?.id || '',
270
272
  }
271
273
  : { role: 'guest', name: 'Guest' };
274
+ let { avatar } = user || {};
275
+ if (avatar) {
276
+ try {
277
+ avatar = await getAvatarByUrl(user.avatar);
278
+ const nodeInfo = await req.getNodeInfo();
279
+
280
+ const { dataDir } = await getApplicationInfo({ node, nodeInfo, teamDid });
281
+ avatar = await extractUserAvatar(avatar, { dataDir });
282
+ } catch (err) {
283
+ console.error(err.response.status);
284
+ }
285
+ }
272
286
  const doc = await node.loginUser({
273
287
  teamDid,
274
288
  user: {
275
289
  ...user,
290
+ avatar,
276
291
  // HACK: @zhanghan 这里会将 passport 插入到当前用户的 passport 列表中,federated 登录不应该插入 passport
277
292
  // passport: findMapping ? targetPassport : null,
278
293
  connectedAccount: {
@@ -331,10 +346,13 @@ module.exports = {
331
346
  });
332
347
  // HACK: member 调用 master 时,将 passport 的 role 还原为 master 中原有的 role
333
348
  const targetPassport = passport?.id ? (prevUser?.passports || []).find((item) => item.id === passport.id) : null;
349
+
350
+ // HACK: 用户在 master 中存在时,不更新任何用户信息;不存在时,将新增一个用户
351
+ const filterUserInfo = prevUser ? pick(user, ['did', 'pk']) : user;
334
352
  const doc = await node.loginUser({
335
353
  teamDid,
336
354
  user: {
337
- ...user,
355
+ ...filterUserInfo,
338
356
  passport: targetPassport,
339
357
  connectedAccount: {
340
358
  provider: LOGIN_PROVIDER.WALLET,
@@ -386,6 +386,9 @@ module.exports = {
386
386
  res.send(oauthConfig);
387
387
  });
388
388
  server.get(`${prefix}/passports`, async (req, res) => {
389
+ if (!req.user) {
390
+ res.status(401).send('Unauthorized');
391
+ }
389
392
  const userDid = req.user.did;
390
393
  const blocklet = await req.getBlockletInfo();
391
394
  const nodeInfo = await req.getNodeInfo();
@@ -1,11 +1,13 @@
1
1
  const { switchPassport } = require('../../../libs/connect/session');
2
+ const { getLoginProvider } = require('../../../util/blocklet-utils');
2
3
 
3
4
  const { onConnect, onApprove } = switchPassport;
4
5
 
5
6
  module.exports = function createRoutes(node, authenticator, createSessionToken) {
6
7
  return {
7
8
  action: 'switch-passport',
8
- onConnect: ({ req, userDid, baseUrl, extraParams: { locale, connectedDid } }) => {
9
+ onConnect: ({ userDid, baseUrl, extraParams: { locale, connectedDid }, req, request }) => {
10
+ const provider = getLoginProvider(request);
9
11
  return onConnect({
10
12
  node,
11
13
  request: req,
@@ -13,10 +15,12 @@ module.exports = function createRoutes(node, authenticator, createSessionToken)
13
15
  userDid,
14
16
  previousUserDid: connectedDid,
15
17
  baseUrl,
18
+ provider,
16
19
  });
17
20
  },
18
21
 
19
- onAuth: async ({ claims, challenge, userDid, updateSession, extraParams, req }) => {
22
+ onAuth: async ({ claims, challenge, userDid, updateSession, extraParams, req, request }) => {
23
+ const provider = getLoginProvider(request);
20
24
  const { sessionToken, refreshToken } = await onApprove({
21
25
  node,
22
26
  request: req,
@@ -25,6 +29,7 @@ module.exports = function createRoutes(node, authenticator, createSessionToken)
25
29
  verifiableCredential: claims.find((x) => x.type === 'verifiableCredential'),
26
30
  userDid,
27
31
  createSessionToken,
32
+ provider,
28
33
  });
29
34
 
30
35
  await updateSession({ sessionToken, refreshToken }, true);
@@ -1,7 +1,5 @@
1
1
  const nocache = require('nocache');
2
2
  const joinUrl = require('url-join');
3
- const SealedBox = require('tweetnacl-sealedbox-js');
4
- const { decodeEncryptionKey } = require('@abtnode/util/lib/security');
5
3
  const { WELLKNOWN_SERVICE_PATH_PREFIX, USER_AVATAR_URL_PREFIX, USER_AVATAR_PATH_PREFIX } = require('@abtnode/constant');
6
4
  const { LOGIN_PROVIDER } = require('@blocklet/constant');
7
5
 
@@ -48,38 +46,7 @@ module.exports = {
48
46
  }
49
47
  }
50
48
 
51
- const encKey = '_ek_';
52
- let nextToken = '';
53
- let nextRefreshToken = '';
54
- if (req.query[encKey]) {
55
- try {
56
- const { secret } = await req.getBlockletInfo();
57
- const encryptionKey = decodeEncryptionKey(req.query[encKey]);
58
- const sessionConfig = blocklet.settings?.session || {};
59
- const { sessionToken, refreshToken } = createToken(
60
- user.did,
61
- {
62
- secret,
63
- passport: req.user.passport,
64
- role: req.user.role,
65
- fullName: user.fullName,
66
- provider: req.user.provider || LOGIN_PROVIDER.WALLET,
67
- },
68
- { ...sessionConfig, didConnectVersion: getDidConnectVersion(req) }
69
- );
70
- nextToken = JSON.stringify(sessionToken);
71
- nextToken = Buffer.from(SealedBox.seal(Buffer.from(nextToken), encryptionKey)).toString('base64');
72
-
73
- nextRefreshToken = JSON.stringify(refreshToken);
74
- nextRefreshToken = Buffer.from(SealedBox.seal(Buffer.from(nextRefreshToken), encryptionKey)).toString(
75
- 'base64'
76
- );
77
- } catch {
78
- // Do nothing
79
- }
80
- }
81
-
82
- res.json({ user, nextToken, nextRefreshToken, provider: req.user.provider || LOGIN_PROVIDER.WALLET });
49
+ res.json({ user, provider: req.user.provider || LOGIN_PROVIDER.WALLET });
83
50
  };
84
51
 
85
52
  const sessionApi = `${prefix}/api/did/session`;
@@ -100,6 +67,7 @@ module.exports = {
100
67
  did: userDid,
101
68
  role,
102
69
  passport,
70
+ provider = LOGIN_PROVIDER.WALLET,
103
71
  } = await verifySessionToken(token, secret, {
104
72
  checkFromDb: true,
105
73
  teamDid,
@@ -132,11 +100,17 @@ module.exports = {
132
100
  const sessionConfig = blocklet.settings?.session || {};
133
101
  const { sessionToken, refreshToken } = createToken(
134
102
  userDid,
135
- { secret, passport, role, fullName: user.fullName },
103
+ {
104
+ secret,
105
+ passport,
106
+ role,
107
+ fullName: user.fullName,
108
+ provider,
109
+ },
136
110
  { ...sessionConfig, didConnectVersion: getDidConnectVersion(req) }
137
111
  );
138
112
 
139
- res.json({ user, nextToken: sessionToken, nextRefreshToken: refreshToken });
113
+ res.json({ user, nextToken: sessionToken, nextRefreshToken: refreshToken, provider });
140
114
  } catch (err) {
141
115
  res.status(400).send(err.message);
142
116
  }
@@ -105,8 +105,12 @@ const messages = {
105
105
  zh: '组件已停止运行',
106
106
  },
107
107
  body: {
108
- en: `${getComponentNamesWithVersion(data)} stopped successfully for ${data.meta.title}.`,
109
- zh: `${data.meta.title} 中的组件 ${getComponentNamesWithVersion(data)} 已停止运行`,
108
+ en: `${
109
+ data?.componentDids?.length ? getComponentNamesWithVersion(data) : 'All components'
110
+ } stopped successfully for ${data.meta.title}.`,
111
+ zh: `${data.meta.title}${
112
+ data?.componentDids?.length ? `中的组件 ${getComponentNamesWithVersion(data)}` : ''
113
+ } 已停止运行`,
110
114
  },
111
115
  };
112
116
  },
@@ -16,6 +16,10 @@ function getTrustedIssuers(blocklet, { provider = LOGIN_PROVIDER.WALLET } = {})
16
16
  }
17
17
 
18
18
  function getLoginProvider(request) {
19
+ const { user } = request;
20
+ if (user?.provider) {
21
+ return user.provider;
22
+ }
19
23
  const { store } = request?.context || {};
20
24
  const { provider } = store?.extraParams || {};
21
25
  return provider || LOGIN_PROVIDER.WALLET;
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "files": {
3
3
  "main.css": "/.well-known/service/static/static/css/main.7ea79dc8.css",
4
- "main.js": "/.well-known/service/static/static/js/main.0357601e.js",
4
+ "main.js": "/.well-known/service/static/static/js/main.3b4d58d1.js",
5
5
  "static/js/4716.a1240199.chunk.js": "/.well-known/service/static/static/js/4716.a1240199.chunk.js",
6
6
  "static/js/4359.5ed52fe3.chunk.js": "/.well-known/service/static/static/js/4359.5ed52fe3.chunk.js",
7
7
  "static/js/1255.0e8a8a45.chunk.js": "/.well-known/service/static/static/js/1255.0e8a8a45.chunk.js",
8
- "static/js/7371.da3c5cc3.chunk.js": "/.well-known/service/static/static/js/7371.da3c5cc3.chunk.js",
8
+ "static/js/7371.e9ccd135.chunk.js": "/.well-known/service/static/static/js/7371.e9ccd135.chunk.js",
9
9
  "static/js/6737.4f37dd4a.chunk.js": "/.well-known/service/static/static/js/6737.4f37dd4a.chunk.js",
10
10
  "static/js/3953.e3e51520.chunk.js": "/.well-known/service/static/static/js/3953.e3e51520.chunk.js",
11
11
  "static/js/868.aa2a1c4d.chunk.js": "/.well-known/service/static/static/js/868.aa2a1c4d.chunk.js",
@@ -25,7 +25,7 @@
25
25
  "static/js/8395.e5aa519c.chunk.js": "/.well-known/service/static/static/js/8395.e5aa519c.chunk.js",
26
26
  "static/js/5233.faabaae9.chunk.js": "/.well-known/service/static/static/js/5233.faabaae9.chunk.js",
27
27
  "static/css/4603.dce369d5.chunk.css": "/.well-known/service/static/static/css/4603.dce369d5.chunk.css",
28
- "static/js/4603.f6b8d272.chunk.js": "/.well-known/service/static/static/js/4603.f6b8d272.chunk.js",
28
+ "static/js/4603.ee59facc.chunk.js": "/.well-known/service/static/static/js/4603.ee59facc.chunk.js",
29
29
  "static/js/5050.538edf89.chunk.js": "/.well-known/service/static/static/js/5050.538edf89.chunk.js",
30
30
  "static/css/780.e3db6e49.chunk.css": "/.well-known/service/static/static/css/780.e3db6e49.chunk.css",
31
31
  "static/js/780.32bf1f5b.chunk.js": "/.well-known/service/static/static/js/780.32bf1f5b.chunk.js",
@@ -53,7 +53,7 @@
53
53
  "static/js/5711.aa17ef28.chunk.js": "/.well-known/service/static/static/js/5711.aa17ef28.chunk.js",
54
54
  "static/js/7345.4b4f8941.chunk.js": "/.well-known/service/static/static/js/7345.4b4f8941.chunk.js",
55
55
  "static/js/1237.1d0b8f1e.chunk.js": "/.well-known/service/static/static/js/1237.1d0b8f1e.chunk.js",
56
- "static/js/8031.d9af3d84.chunk.js": "/.well-known/service/static/static/js/8031.d9af3d84.chunk.js",
56
+ "static/js/8031.9944bf3c.chunk.js": "/.well-known/service/static/static/js/8031.9944bf3c.chunk.js",
57
57
  "static/js/3963.2e06f9bc.chunk.js": "/.well-known/service/static/static/js/3963.2e06f9bc.chunk.js",
58
58
  "static/js/6891.6c7018ab.chunk.js": "/.well-known/service/static/static/js/6891.6c7018ab.chunk.js",
59
59
  "static/js/982.11dc355f.chunk.js": "/.well-known/service/static/static/js/982.11dc355f.chunk.js",
@@ -78,7 +78,6 @@
78
78
  "static/media/ubuntu-mono-cyrillic-ext-400-normal.woff2": "/.well-known/service/static/static/media/ubuntu-mono-cyrillic-ext-400-normal.eda1c4946b1f7bf58386.woff2",
79
79
  "static/media/ubuntu-mono-cyrillic-400-normal.woff2": "/.well-known/service/static/static/media/ubuntu-mono-cyrillic-400-normal.c367f416832eb8f1b846.woff2",
80
80
  "static/media/studio.svg": "/.well-known/service/static/static/media/studio.f849ff5763d19a78ada7fdeea249f819.svg",
81
- "static/media/index.cjs": "/.well-known/service/static/static/media/index.20414a3fa1e6c5498a67.cjs",
82
81
  "static/media/ubuntu-mono-greek-400-normal.woff2": "/.well-known/service/static/static/media/ubuntu-mono-greek-400-normal.22f3bfc91f79c342bdf4.woff2",
83
82
  "static/media/ubuntu-mono-greek-ext-400-normal.woff2": "/.well-known/service/static/static/media/ubuntu-mono-greek-ext-400-normal.b3459900ea8a25d1f7c2.woff2",
84
83
  "router-template-styles/fonts/lato-latin-ext-400-normal.woff2": "/.well-known/service/static/router-template-styles/fonts/lato-latin-ext-400-normal.woff2",
@@ -87,11 +86,11 @@
87
86
  "router-template-styles/styles.css": "/.well-known/service/static/router-template-styles/styles.css",
88
87
  "index.html": "/.well-known/service/static/index.html",
89
88
  "main.7ea79dc8.css.map": "/.well-known/service/static/static/css/main.7ea79dc8.css.map",
90
- "main.0357601e.js.map": "/.well-known/service/static/static/js/main.0357601e.js.map",
89
+ "main.3b4d58d1.js.map": "/.well-known/service/static/static/js/main.3b4d58d1.js.map",
91
90
  "4716.a1240199.chunk.js.map": "/.well-known/service/static/static/js/4716.a1240199.chunk.js.map",
92
91
  "4359.5ed52fe3.chunk.js.map": "/.well-known/service/static/static/js/4359.5ed52fe3.chunk.js.map",
93
92
  "1255.0e8a8a45.chunk.js.map": "/.well-known/service/static/static/js/1255.0e8a8a45.chunk.js.map",
94
- "7371.da3c5cc3.chunk.js.map": "/.well-known/service/static/static/js/7371.da3c5cc3.chunk.js.map",
93
+ "7371.e9ccd135.chunk.js.map": "/.well-known/service/static/static/js/7371.e9ccd135.chunk.js.map",
95
94
  "6737.4f37dd4a.chunk.js.map": "/.well-known/service/static/static/js/6737.4f37dd4a.chunk.js.map",
96
95
  "3953.e3e51520.chunk.js.map": "/.well-known/service/static/static/js/3953.e3e51520.chunk.js.map",
97
96
  "868.aa2a1c4d.chunk.js.map": "/.well-known/service/static/static/js/868.aa2a1c4d.chunk.js.map",
@@ -111,7 +110,7 @@
111
110
  "8395.e5aa519c.chunk.js.map": "/.well-known/service/static/static/js/8395.e5aa519c.chunk.js.map",
112
111
  "5233.faabaae9.chunk.js.map": "/.well-known/service/static/static/js/5233.faabaae9.chunk.js.map",
113
112
  "4603.dce369d5.chunk.css.map": "/.well-known/service/static/static/css/4603.dce369d5.chunk.css.map",
114
- "4603.f6b8d272.chunk.js.map": "/.well-known/service/static/static/js/4603.f6b8d272.chunk.js.map",
113
+ "4603.ee59facc.chunk.js.map": "/.well-known/service/static/static/js/4603.ee59facc.chunk.js.map",
115
114
  "5050.538edf89.chunk.js.map": "/.well-known/service/static/static/js/5050.538edf89.chunk.js.map",
116
115
  "780.e3db6e49.chunk.css.map": "/.well-known/service/static/static/css/780.e3db6e49.chunk.css.map",
117
116
  "780.32bf1f5b.chunk.js.map": "/.well-known/service/static/static/js/780.32bf1f5b.chunk.js.map",
@@ -139,7 +138,7 @@
139
138
  "5711.aa17ef28.chunk.js.map": "/.well-known/service/static/static/js/5711.aa17ef28.chunk.js.map",
140
139
  "7345.4b4f8941.chunk.js.map": "/.well-known/service/static/static/js/7345.4b4f8941.chunk.js.map",
141
140
  "1237.1d0b8f1e.chunk.js.map": "/.well-known/service/static/static/js/1237.1d0b8f1e.chunk.js.map",
142
- "8031.d9af3d84.chunk.js.map": "/.well-known/service/static/static/js/8031.d9af3d84.chunk.js.map",
141
+ "8031.9944bf3c.chunk.js.map": "/.well-known/service/static/static/js/8031.9944bf3c.chunk.js.map",
143
142
  "3963.2e06f9bc.chunk.js.map": "/.well-known/service/static/static/js/3963.2e06f9bc.chunk.js.map",
144
143
  "6891.6c7018ab.chunk.js.map": "/.well-known/service/static/static/js/6891.6c7018ab.chunk.js.map",
145
144
  "982.11dc355f.chunk.js.map": "/.well-known/service/static/static/js/982.11dc355f.chunk.js.map",
@@ -152,6 +151,6 @@
152
151
  },
153
152
  "entrypoints": [
154
153
  "static/css/main.7ea79dc8.css",
155
- "static/js/main.0357601e.js"
154
+ "static/js/main.3b4d58d1.js"
156
155
  ]
157
156
  }
package/build/index.html CHANGED
@@ -1 +1 @@
1
- <!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=0"/><meta name="theme-color" content="#000000"/><title>Blocklet Service</title><link rel="manifest" href="/.well-known/service/manifest.json"/><script src="/.well-known/service/api/env"></script><script src="/__blocklet__.js"></script><script defer="defer" src="/.well-known/service/static/static/js/main.0357601e.js"></script><link href="/.well-known/service/static/static/css/main.7ea79dc8.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
1
+ <!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=0"/><meta name="theme-color" content="#000000"/><title>Blocklet Service</title><link rel="manifest" href="/.well-known/service/manifest.json"/><script src="/.well-known/service/api/env"></script><script src="/__blocklet__.js"></script><script defer="defer" src="/.well-known/service/static/static/js/main.3b4d58d1.js"></script><link href="/.well-known/service/static/static/css/main.7ea79dc8.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>