@abtnode/blocklet-services 1.16.6-beta-593a7a98 → 1.16.6-beta-e2082fec

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.
@@ -204,7 +204,14 @@ module.exports = {
204
204
  action,
205
205
  }) => {
206
206
  const blocklet = await request.getBlocklet();
207
- const { wallet, name, passportColor, did: teamDid, wallet: blockletWallet } = await request.getBlockletInfo();
207
+ const {
208
+ wallet,
209
+ secret,
210
+ name,
211
+ passportColor,
212
+ did: teamDid,
213
+ wallet: blockletWallet,
214
+ } = await request.getBlockletInfo();
208
215
 
209
216
  // Check user approved
210
217
  const user = await node.getUser({
@@ -385,7 +392,7 @@ module.exports = {
385
392
  }
386
393
 
387
394
  // Generate new session token that client can save to localStorage
388
- const sessionToken = await createSessionToken(realDid, { passport, role });
395
+ const sessionToken = await createSessionToken(realDid, { secret, passport, role });
389
396
  logger.info(`${action}.success`, { userDid: realDid, role });
390
397
 
391
398
  if (
@@ -561,7 +568,7 @@ module.exports = {
561
568
  componentId,
562
569
  }) => {
563
570
  const blocklet = await request.getBlocklet();
564
- const { name, did: teamDid, wallet: blockletWallet } = await request.getBlockletInfo();
571
+ const { name, did: teamDid, wallet: blockletWallet, secret } = await request.getBlockletInfo();
565
572
 
566
573
  // Validate user
567
574
  const user = await node.getUser({
@@ -639,7 +646,7 @@ module.exports = {
639
646
  );
640
647
 
641
648
  // Generate new session token that client can save to localStorage
642
- const sessionToken = await createSessionToken(userDid, { passport, role });
649
+ const sessionToken = await createSessionToken(userDid, { secret, passport, role });
643
650
  return sessionToken;
644
651
  },
645
652
  },
package/api/libs/jwt.js CHANGED
@@ -14,14 +14,9 @@ const getUser = async (node, teamDid, userDid) => {
14
14
 
15
15
  // eslint-disable-next-line no-unused-vars
16
16
  const initJwt = (node, options) => {
17
- const secret = options.sessionSecret;
18
- const ttl = options.sessionTtl || '1d';
17
+ const ttl = options.sessionTtl || '7d';
19
18
 
20
- if (!secret) {
21
- throw new Error('Auth service require a non-empty session secret to start');
22
- }
23
-
24
- const createSessionToken = async (did, { role, passport }) =>
19
+ const createSessionToken = async (did, { role, secret, passport }) =>
25
20
  createAuthToken({
26
21
  did,
27
22
  passport,
@@ -30,7 +25,7 @@ const initJwt = (node, options) => {
30
25
  expiresIn: ttl,
31
26
  });
32
27
 
33
- const verifySessionToken = (token, teamDid) =>
28
+ const verifySessionToken = (token, secret, teamDid) =>
34
29
  // eslint-disable-next-line implicit-arrow-linebreak
35
30
  new Promise((resolve, reject) => {
36
31
  jwt.verify(token, secret, async (err, decoded) => {
@@ -65,7 +65,7 @@ async function login(req, node, options) {
65
65
  }
66
66
  const authClient = getAuthClient(blocklet, provider);
67
67
 
68
- const { did: teamDid, wallet: blockletWallet } = await req.getBlockletInfo();
68
+ const { did: teamDid, wallet: blockletWallet, secret } = await req.getBlockletInfo();
69
69
  const config = await req.getServiceConfig(NODE_SERVICES.AUTH, { componentId });
70
70
  const nodeInfo = await req.getNodeInfo();
71
71
  const { dataDir } = await getApplicationInfo({ node, nodeInfo, teamDid });
@@ -155,6 +155,7 @@ async function login(req, node, options) {
155
155
  const { createSessionToken } = initJwt(node, options);
156
156
 
157
157
  const sessionToken = await createSessionToken(currentUser.did, {
158
+ secret,
158
159
  passport,
159
160
  role: passport.role,
160
161
  });
@@ -166,7 +167,7 @@ async function invite(req, node, options) {
166
167
  const blocklet = await req.getBlocklet();
167
168
  const authClient = getAuthClient(blocklet, provider);
168
169
 
169
- const { did: teamDid, wallet: blockletWallet } = await req.getBlockletInfo();
170
+ const { did: teamDid, wallet: blockletWallet, secret } = await req.getBlockletInfo();
170
171
  const nodeInfo = await req.getNodeInfo();
171
172
  const oauthInfo = await authClient.getProfile(token);
172
173
  const userWallet = fromAppDid(oauthInfo.sub, blockletWallet.secretKey, types.RoleType.ROLE_ACCOUNT);
@@ -265,7 +266,7 @@ async function invite(req, node, options) {
265
266
 
266
267
  const { createSessionToken } = initJwt(node, options);
267
268
 
268
- const sessionToken = await createSessionToken(userDid, { passport, role });
269
+ const sessionToken = await createSessionToken(userDid, { secret, passport, role });
269
270
  return sessionToken;
270
271
  }
271
272
 
@@ -434,7 +435,7 @@ module.exports = {
434
435
  server.post(`${prefix}/switch`, async (req, res) => {
435
436
  const userDid = req.user.did;
436
437
  const { passportId } = req.body;
437
- const { did: teamDid } = await req.getBlockletInfo();
438
+ const { did: teamDid, secret } = await req.getBlockletInfo();
438
439
  // NOTICE: 这里获取的 did 是当前登录用户的永久 did,无需查询 connectedAccount
439
440
  const user = await node.getUser({ teamDid, user: { did: userDid } });
440
441
  const { passports = [] } = user || {};
@@ -449,7 +450,7 @@ module.exports = {
449
450
  node
450
451
  );
451
452
  const { createSessionToken } = initJwt(node, options);
452
- const sessionToken = await createSessionToken(userDid, { passport, role: passport.role });
453
+ const sessionToken = await createSessionToken(userDid, { secret, passport, role: passport.role });
453
454
  res.status(200).send(sessionToken);
454
455
  });
455
456
 
@@ -53,6 +53,7 @@ module.exports = function createRoutes(node, authenticator, createSessionToken)
53
53
  onAuth: async ({ claims, userDid, userPk, updateSession, extraParams, req, baseUrl }) => {
54
54
  const { locale, inviteId } = extraParams;
55
55
  const nodeInfo = await req.getNodeInfo();
56
+ const { secret } = await req.getBlockletInfo();
56
57
  const teamDid = req.headers['x-blocklet-did'];
57
58
  const statusEndpointBaseUrl = joinUrl(baseUrl, WELLKNOWN_SERVICE_PATH_PREFIX);
58
59
  const endpoint = baseUrl;
@@ -72,7 +73,7 @@ module.exports = function createRoutes(node, authenticator, createSessionToken)
72
73
  });
73
74
 
74
75
  // Generate new session token that client can save to localStorage
75
- const sessionToken = await createSessionToken(userDid, { passport, role });
76
+ const sessionToken = await createSessionToken(userDid, { secret, passport, role });
76
77
  await updateSession({ sessionToken }, true);
77
78
  await updateSession({ passportId: response.data.id });
78
79
  logger.info('invite.success', { userDid });
@@ -202,6 +202,7 @@ module.exports = function createRoutes(node, _, createSessionToken) {
202
202
  wallet: issuerWallet,
203
203
  passportColor,
204
204
  dataDir,
205
+ secret,
205
206
  } = await getApplicationInfo({ node, teamDid: appPid });
206
207
 
207
208
  const statusEndpointBaseUrl = baseUrl;
@@ -367,7 +368,7 @@ module.exports = function createRoutes(node, _, createSessionToken) {
367
368
  logger.info('transfer ownership success', { userDid });
368
369
 
369
370
  // Generate new session token that client can save to localStorage
370
- const sessionToken = await createSessionToken(userDid, { passport: vc, role });
371
+ const sessionToken = await createSessionToken(userDid, { secret, passport: vc, role });
371
372
  await updateSession({ sessionToken }, true);
372
373
  await updateSession({ passportId: vc?.id });
373
374
  logger.info('invite.success', { userDid });
@@ -48,6 +48,7 @@ module.exports = function createRoutes(node, _authenticator, createSessionToken)
48
48
  const blocklet = await req.getBlocklet();
49
49
  const teamDid = blocklet.meta.did;
50
50
  const user = await checkOwner({ node, userDid, blocklet });
51
+ const { secret } = await req.getBlockletInfo();
51
52
 
52
53
  // ensure owner proof form previous workflow
53
54
  if (!proof || !proof.claim || !proof.pk) {
@@ -109,7 +110,7 @@ module.exports = function createRoutes(node, _authenticator, createSessionToken)
109
110
  }
110
111
 
111
112
  // Generate new session token that client can save to localStorage
112
- const sessionToken = await createSessionToken(userDid, { role: 'owner' });
113
+ const sessionToken = await createSessionToken(userDid, { secret, role: 'owner' });
113
114
  await updateSession({ sessionToken }, true);
114
115
  logger.info('setup.connect.success', { userDid });
115
116
  } catch (err) {
@@ -69,7 +69,8 @@ const init = ({ node, options }) => {
69
69
  try {
70
70
  if (token) {
71
71
  const teamDid = req.getBlockletDid();
72
- const result = await verifySessionToken(token, teamDid);
72
+ const { secret } = await req.getBlockletInfo();
73
+ const result = await verifySessionToken(token, secret, teamDid);
73
74
  if (result && result.avatar && result.avatar.startsWith(USER_AVATAR_URL_PREFIX)) {
74
75
  result.avatar = `${WELLKNOWN_SERVICE_PATH_PREFIX}${USER_AVATAR_PATH_PREFIX}/${
75
76
  result.avatar.split('/').slice(-1)[0]
@@ -27,9 +27,10 @@ module.exports = {
27
27
  let nextToken = '';
28
28
  if (req.query[encKey]) {
29
29
  try {
30
+ const { secret } = await req.getBlockletInfo();
30
31
  const encryptionKey = decodeEncryptionKey(req.query[encKey]);
31
32
  nextToken = JSON.stringify(
32
- await createSessionToken(user.did, { passport: user.passport, role: user.role })
33
+ await createSessionToken(user.did, { secret, passport: user.passport, role: user.role })
33
34
  );
34
35
  nextToken = Buffer.from(SealedBox.seal(Buffer.from(nextToken), encryptionKey)).toString('base64');
35
36
  } catch {
@@ -88,7 +88,7 @@ module.exports = ({ node, req, options }) => {
88
88
  const did = req.getBlockletDid();
89
89
  const context = req.getServiceContext();
90
90
 
91
- return cache.getBlocklet({ did, context, node, force: useCache });
91
+ return cache.getBlocklet({ did, context, node, force: !useCache });
92
92
  };
93
93
 
94
94
  req.getNodeInfo = () => cache.getNodeInfo({ node });
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "1.16.6-beta-593a7a98",
6
+ "version": "1.16.6-beta-e2082fec",
7
7
  "description": "Provide unified services for every blocklet",
8
8
  "main": "api/index.js",
9
9
  "files": [
@@ -31,16 +31,16 @@
31
31
  "author": "wangshijun <wangshijun2010@gmail.com> (http://github.com/wangshijun)",
32
32
  "license": "MIT",
33
33
  "dependencies": {
34
- "@abtnode/auth": "1.16.6-beta-593a7a98",
35
- "@abtnode/client": "1.16.6-beta-593a7a98",
36
- "@abtnode/constant": "1.16.6-beta-593a7a98",
37
- "@abtnode/core": "1.16.6-beta-593a7a98",
38
- "@abtnode/cron": "1.16.6-beta-593a7a98",
39
- "@abtnode/db": "1.16.6-beta-593a7a98",
40
- "@abtnode/logger": "1.16.6-beta-593a7a98",
41
- "@abtnode/router-adapter": "1.16.6-beta-593a7a98",
42
- "@abtnode/router-templates": "1.16.6-beta-593a7a98",
43
- "@abtnode/util": "1.16.6-beta-593a7a98",
34
+ "@abtnode/auth": "1.16.6-beta-e2082fec",
35
+ "@abtnode/client": "1.16.6-beta-e2082fec",
36
+ "@abtnode/constant": "1.16.6-beta-e2082fec",
37
+ "@abtnode/core": "1.16.6-beta-e2082fec",
38
+ "@abtnode/cron": "1.16.6-beta-e2082fec",
39
+ "@abtnode/db": "1.16.6-beta-e2082fec",
40
+ "@abtnode/logger": "1.16.6-beta-e2082fec",
41
+ "@abtnode/router-adapter": "1.16.6-beta-e2082fec",
42
+ "@abtnode/router-templates": "1.16.6-beta-e2082fec",
43
+ "@abtnode/util": "1.16.6-beta-e2082fec",
44
44
  "@arcblock/did": "^1.18.77",
45
45
  "@arcblock/did-auth": "1.18.77",
46
46
  "@arcblock/did-auth-storage-nedb": "^1.7.1",
@@ -48,11 +48,11 @@
48
48
  "@arcblock/event-hub": "1.18.77",
49
49
  "@arcblock/jwt": "1.18.77",
50
50
  "@arcblock/ws": "1.18.77",
51
- "@blocklet/constant": "1.16.6-beta-593a7a98",
51
+ "@blocklet/constant": "1.16.6-beta-e2082fec",
52
52
  "@blocklet/form-builder": "^0.1.11",
53
53
  "@blocklet/form-collector": "^0.1.6",
54
- "@blocklet/meta": "1.16.6-beta-593a7a98",
55
- "@blocklet/sdk": "1.16.6-beta-593a7a98",
54
+ "@blocklet/meta": "1.16.6-beta-e2082fec",
55
+ "@blocklet/sdk": "1.16.6-beta-e2082fec",
56
56
  "@did-connect/authenticator": "^2.1.54",
57
57
  "@did-connect/relay-adapter-express": "^2.1.54",
58
58
  "@did-connect/storage-nedb": "^2.1.54",
@@ -89,7 +89,7 @@
89
89
  "@nedb/multi": "^2.0.5"
90
90
  },
91
91
  "devDependencies": {
92
- "@abtnode/ux": "1.16.6-beta-593a7a98",
92
+ "@abtnode/ux": "1.16.6-beta-e2082fec",
93
93
  "@arcblock/did-connect": "^2.5.36",
94
94
  "@arcblock/icons": "^2.5.36",
95
95
  "@arcblock/ux": "^2.5.36",
@@ -155,5 +155,5 @@
155
155
  "url": "https://github.com/ArcBlock/blocklet-server/issues",
156
156
  "email": "shijun@arcblock.io"
157
157
  },
158
- "gitHead": "5ea65d1ddc91e997f029741f01ce453464d86666"
158
+ "gitHead": "851e0ab17f1c6e160aedc47fcdbf7dd54dfa7237"
159
159
  }