@steedos/accounts 2.7.27-beta.6 → 3.0.0-beta.100

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.
Files changed (62) hide show
  1. package/lib/core/index.js +66 -26
  2. package/lib/core/index.js.map +1 -1
  3. package/lib/database-mongo/mongo.js +5 -5
  4. package/lib/database-mongo/mongo.js.map +1 -1
  5. package/lib/index.js +5 -5
  6. package/lib/index.js.map +1 -1
  7. package/lib/mail.js +44 -46
  8. package/lib/mail.js.map +1 -1
  9. package/lib/password/accounts-password.js +6 -6
  10. package/lib/password/accounts-password.js.map +1 -1
  11. package/lib/password/utils/encryption.js.map +1 -1
  12. package/lib/rest-express/endpoints/authorize.js +49 -38
  13. package/lib/rest-express/endpoints/authorize.js.map +1 -1
  14. package/lib/rest-express/endpoints/geetestV3/geetest-init.js.map +1 -1
  15. package/lib/rest-express/endpoints/geetestV3/sdk/geetest_lib.js.map +1 -1
  16. package/lib/rest-express/endpoints/initServer.js.map +1 -1
  17. package/lib/rest-express/endpoints/login.js.map +1 -1
  18. package/lib/rest-express/endpoints/logout.js +79 -72
  19. package/lib/rest-express/endpoints/logout.js.map +1 -1
  20. package/lib/rest-express/endpoints/oauth/provider-callback.js.map +1 -1
  21. package/lib/rest-express/endpoints/password/change-password.js +94 -89
  22. package/lib/rest-express/endpoints/password/change-password.js.map +1 -1
  23. package/lib/rest-express/endpoints/password/register.js.map +1 -1
  24. package/lib/rest-express/endpoints/password/setSpaceUserPassword.js +152 -0
  25. package/lib/rest-express/endpoints/password/setSpaceUserPassword.js.map +1 -0
  26. package/lib/rest-express/endpoints/password/two-factor.js.map +1 -1
  27. package/lib/rest-express/endpoints/password/verify.js.map +1 -1
  28. package/lib/rest-express/endpoints/put-user-name.js.map +1 -1
  29. package/lib/rest-express/endpoints/service-authenticate.js.map +1 -1
  30. package/lib/rest-express/endpoints/spaces.js.map +1 -1
  31. package/lib/rest-express/endpoints/steedos/accept_invitation.js.map +1 -1
  32. package/lib/rest-express/endpoints/steedos/create-tenant.js.map +1 -1
  33. package/lib/rest-express/endpoints/steedos/decline_invitation.js.map +1 -1
  34. package/lib/rest-express/endpoints/steedos/get-tenant.js +62 -39
  35. package/lib/rest-express/endpoints/steedos/get-tenant.js.map +1 -1
  36. package/lib/rest-express/endpoints/steedos/settings.js +119 -88
  37. package/lib/rest-express/endpoints/steedos/settings.js.map +1 -1
  38. package/lib/rest-express/endpoints/update-session.js.map +1 -1
  39. package/lib/rest-express/express-middleware.js +2 -0
  40. package/lib/rest-express/express-middleware.js.map +1 -1
  41. package/lib/rest-express/user-loader.js +82 -67
  42. package/lib/rest-express/user-loader.js.map +1 -1
  43. package/lib/rest-express/utils/get-user-agent.js.map +1 -1
  44. package/lib/rest-express/utils/users.js.map +1 -1
  45. package/lib/server/accounts-server.js +3 -3
  46. package/lib/server/accounts-server.js.map +1 -1
  47. package/lib/server/utils/get-first-user-email.js +1 -2
  48. package/lib/server/utils/get-first-user-email.js.map +1 -1
  49. package/lib/server/utils/tokens.js.map +1 -1
  50. package/package.json +5 -16
  51. package/package.service.js +10 -6
  52. package/src/core/index.ts +201 -141
  53. package/src/database-mongo/mongo.ts +1 -1
  54. package/src/rest-express/endpoints/authorize.ts +58 -48
  55. package/src/rest-express/endpoints/logout.ts +74 -72
  56. package/src/rest-express/endpoints/password/change-password.ts +92 -81
  57. package/src/rest-express/endpoints/password/setSpaceUserPassword.ts +127 -0
  58. package/src/rest-express/endpoints/steedos/get-tenant.ts +56 -38
  59. package/src/rest-express/endpoints/steedos/settings.ts +118 -89
  60. package/src/rest-express/express-middleware.ts +7 -0
  61. package/src/rest-express/user-loader.ts +68 -58
  62. package/plugin.config.yml +0 -4
@@ -2,111 +2,140 @@
2
2
  * @Author: baozhoutao@steedos.com
3
3
  * @Date: 2022-03-28 09:35:34
4
4
  * @LastEditors: baozhoutao@steedos.com
5
- * @LastEditTime: 2024-04-15 15:13:49
6
- * @Description:
5
+ * @LastEditTime: 2025-02-21 14:33:10
6
+ * @Description:
7
7
  */
8
- import * as express from 'express';
9
- import * as _ from 'lodash';
10
- import { AccountsServer } from '../../../server';
11
- import { getSteedosConfig, getSteedosSchema } from '@steedos/objectql'
12
- import { db } from '../../../db';
13
- import { canSendEmail, canSendSMS, getSteedosService } from '../../../core';
14
- const validator = require('validator');
15
- const util = require('@steedos/utils')
16
- const clone = require('clone');
8
+ import * as express from "express";
9
+ import * as _ from "lodash";
10
+ import { AccountsServer } from "../../../server";
11
+ import { getSteedosConfig, getSteedosSchema } from "@steedos/objectql";
12
+ import { db } from "../../../db";
13
+ import { canSendEmail, canSendSMS, getSteedosService } from "../../../core";
14
+ const validator = require("validator");
15
+ const util = require("@steedos/utils");
16
+ const clone = require("clone");
17
17
 
18
18
  const config = getSteedosConfig();
19
19
 
20
- export const getSettings = (accountsServer: AccountsServer) => async (
21
- req: express.Request,
22
- res: express.Response
23
- ) => {
24
- let tenant: any = {
25
- name: "Steedos",
26
- logo_url: undefined,
27
- background_url: undefined,
28
- enable_create_tenant: true,
29
- enable_register: true,
30
- enable_forget_password: true,
31
- enable_password_login: true,
32
- enable_mobile_code_login: false,
33
- enable_email_code_login: false,
34
- enable_bind_mobile: false,
35
- enable_bind_email: false,
36
- enable_saas: validator.toBoolean(process.env.STEEDOS_TENANT_ENABLE_SAAS || 'false', true),
37
- enable_open_geetest: validator.toBoolean(process.env.STEEDOS_CAPTCHA_GEETEST_ENABLED || 'false'),
38
- page_login: process.env.STEEDOS_TENANT_PAGE_LOGIN,
39
- page_logout: process.env.STEEDOS_TENANT_PAGE_LOGOUT
40
- }
20
+ export const getSettings =
21
+ (accountsServer: AccountsServer) =>
22
+ async (req: express.Request, res: express.Response) => {
23
+ let tenant: any = {
24
+ name: "Steedos",
25
+ logo_url: undefined,
26
+ background_url: undefined,
27
+ enable_create_tenant: true,
28
+ enable_register: true,
29
+ enable_forget_password: true,
30
+ enable_password_login: true,
31
+ enable_mobile_code_login: false,
32
+ enable_email_code_login: false,
33
+ enable_bind_mobile: false,
34
+ enable_bind_email: false,
35
+ enable_saas: validator.toBoolean(
36
+ process.env.STEEDOS_TENANT_ENABLE_SAAS || "false",
37
+ true,
38
+ ),
39
+ enable_open_geetest: validator.toBoolean(
40
+ process.env.STEEDOS_CAPTCHA_GEETEST_ENABLED || "false",
41
+ ),
42
+ page_login: process.env.STEEDOS_TENANT_PAGE_LOGIN,
43
+ page_logout: process.env.STEEDOS_TENANT_PAGE_LOGOUT,
44
+ };
41
45
 
42
- if (config.tenant) {
43
- _.assignIn(tenant, config.tenant)
44
- }
46
+ if (config.tenant) {
47
+ _.assignIn(tenant, config.tenant);
48
+ }
45
49
 
46
- if(!tenant._id){
47
- tenant._id = process.env.STEEDOS_TENANT_ID
48
- }
50
+ if (!tenant._id) {
51
+ tenant._id = process.env.STEEDOS_TENANT_ID;
52
+ }
49
53
 
50
- const platform = (global as any).Meteor.settings.public?.platform || {}
51
-
54
+ const platform = (global as any).Steedos.settings.public?.platform || {};
52
55
 
53
- if (tenant._id) {
54
- let spaceDoc = await db.findOne("spaces", tenant._id, {fields: ["name", "avatar", "avatar_dark", "background", "enable_register", "account_logo", "favicon"]})
55
- let steedosService = getSteedosService();
56
- if (steedosService && spaceDoc) {
56
+ if (tenant._id) {
57
+ let spaceDoc = await db.findOne("spaces", tenant._id, {
58
+ fields: [
59
+ "name",
60
+ "avatar",
61
+ "avatar_dark",
62
+ "background",
63
+ "enable_register",
64
+ "account_logo",
65
+ "favicon",
66
+ ],
67
+ });
68
+ let steedosService = getSteedosService();
69
+ if (steedosService && spaceDoc) {
57
70
  _.assignIn(tenant, spaceDoc);
58
- if (spaceDoc.account_logo) {
59
- tenant.logo_url = steedosService + "api/files/avatars/" + spaceDoc.account_logo
60
- } else if (spaceDoc.avatar_dark) {
61
- tenant.logo_url = steedosService + "api/files/avatars/" + spaceDoc.avatar_dark
62
- } else if (spaceDoc.avatar) {
63
- tenant.logo_url = steedosService + "api/files/avatars/" + spaceDoc.avatar
64
- }
65
- if (spaceDoc.background) {
66
- tenant.background_url = steedosService + "api/files/avatars/" + spaceDoc.background
67
- }
68
- if (platform?.is_oem && spaceDoc.favicon){
69
- tenant.favicon_url = steedosService + "api/files/avatars/" + spaceDoc.favicon
71
+ if (spaceDoc.account_logo) {
72
+ tenant.logo_url =
73
+ steedosService +
74
+ "api/v6/files/cfs.avatars.filerecord/" +
75
+ spaceDoc.account_logo;
76
+ } else if (spaceDoc.avatar_dark) {
77
+ tenant.logo_url =
78
+ steedosService +
79
+ "api/v6/files/cfs.avatars.filerecord/" +
80
+ spaceDoc.avatar_dark;
81
+ } else if (spaceDoc.avatar) {
82
+ tenant.logo_url =
83
+ steedosService +
84
+ "api/v6/files/cfs.avatars.filerecord/" +
85
+ spaceDoc.avatar;
86
+ }
87
+ if (spaceDoc.background) {
88
+ tenant.background_url =
89
+ steedosService +
90
+ "api/v6/files/cfs.avatars.filerecord/" +
91
+ spaceDoc.background;
92
+ }
93
+ if (platform?.is_oem && spaceDoc.favicon) {
94
+ tenant.favicon_url =
95
+ steedosService +
96
+ "api/v6/files/cfs.avatars.filerecord/" +
97
+ spaceDoc.favicon;
98
+ }
70
99
  }
71
100
  }
72
- }
73
-
74
- let already_mail_service = canSendEmail();
75
- let already_sms_service = true || canSendSMS();
76
101
 
77
- //allowInit
78
- const broker = getSteedosSchema().broker;
79
- const serverInitInfo = {
80
-
81
- };
102
+ let already_mail_service = canSendEmail();
103
+ let already_sms_service = true || canSendSMS();
82
104
 
83
- const _tenant = clone(tenant);
105
+ //allowInit
106
+ const broker = getSteedosSchema().broker;
107
+ const serverInitInfo = {};
84
108
 
85
- delete _tenant['tokenSecret'];
86
- delete _tenant['accessTokenExpiresIn']
87
- delete _tenant['refreshTokenExpiresIn']
109
+ const _tenant = clone(tenant);
88
110
 
89
- if(tenant.enable_saas){
90
- delete _tenant._id;
91
- }
111
+ delete _tenant["tokenSecret"];
112
+ delete _tenant["accessTokenExpiresIn"];
113
+ delete _tenant["refreshTokenExpiresIn"];
92
114
 
115
+ if (tenant.enable_saas) {
116
+ delete _tenant._id;
117
+ }
93
118
 
94
- let settings = {};
119
+ let settings = {};
95
120
 
96
- if(tenant._id){
97
- settings = await util.getSettings(tenant._id, true)
98
- }
121
+ if (tenant._id) {
122
+ settings = await util.getSettings(tenant._id, true);
123
+ }
99
124
 
100
- res.json({
101
- tenant: _tenant,
102
- password: config.password ? config.password : ( config.public?.password ? config.public?.password : {} ),
103
- root_url: process.env.ROOT_URL,
104
- already_mail_service: already_mail_service,
105
- already_sms_service: already_sms_service,
106
- serverInitInfo: serverInitInfo,
107
- redirect_url_whitelist: process.env.REDIRECT_URL_WHITELIST,
108
- platform: platform,
109
- public: (global as any).Meteor.settings.public || {},
110
- settings: settings
111
- })
112
- }
125
+ res.json({
126
+ tenant: _tenant,
127
+ password: config.password
128
+ ? config.password
129
+ : config.public?.password
130
+ ? config.public?.password
131
+ : {},
132
+ root_url: process.env.ROOT_URL,
133
+ already_mail_service: already_mail_service,
134
+ already_sms_service: already_sms_service,
135
+ serverInitInfo: serverInitInfo,
136
+ redirect_url_whitelist: process.env.REDIRECT_URL_WHITELIST,
137
+ platform: platform,
138
+ public: (global as any).Steedos.settings.public || {},
139
+ settings: settings,
140
+ });
141
+ };
@@ -15,6 +15,7 @@ import { updateSession } from './endpoints/update-session';
15
15
  import { registerPassword } from './endpoints/password/register';
16
16
  import { twoFactorSecret, twoFactorSet, twoFactorUnset } from './endpoints/password/two-factor';
17
17
  import { changePassword } from './endpoints/password/change-password';
18
+ import { setSpaceUserPassword } from './endpoints/password/setSpaceUserPassword';
18
19
  import { userLoader } from './user-loader';
19
20
  import { AccountsExpressOptions } from './types';
20
21
  import { getTenant } from './endpoints/steedos/get-tenant';
@@ -99,6 +100,12 @@ const accountsExpress = (
99
100
  changePassword(accountsServer)
100
101
  );
101
102
 
103
+ router.post(
104
+ `${path}/password/setSpaceUserPassword`,
105
+ userLoader(accountsServer),
106
+ setSpaceUserPassword(accountsServer)
107
+ );
108
+
102
109
  }
103
110
 
104
111
  // @accounts/oauth
@@ -1,71 +1,81 @@
1
- import * as express from 'express';
2
- import { get, isEmpty, map } from 'lodash';
3
- import { AccountsServer } from '../server';
4
- import { db } from '../db';
5
- import { getSteedosConfig } from '@steedos/objectql';
6
- import { getSteedosService } from '../core'
1
+ import * as express from "express";
2
+ import { get, isEmpty, map } from "lodash";
3
+ import { AccountsServer } from "../server";
4
+ import { db } from "../db";
5
+ import { getSteedosConfig } from "@steedos/objectql";
6
+ import { getSteedosService } from "../core";
7
7
  const config = getSteedosConfig();
8
8
 
9
- export const userLoader = (accountsServer: AccountsServer) => async (
10
- req: express.Request,
11
- res: express.Response,
12
- next: any
13
- ) => {
14
- let authToken =
15
- get(req.cookies, 'X-Auth-Token') ||
16
- get(req.headers, 'Authorization') ||
17
- get(req.headers, 'authorization');
9
+ export const userLoader =
10
+ (accountsServer: AccountsServer) =>
11
+ async (req: express.Request, res: express.Response, next: any) => {
12
+ let authToken =
13
+ get(req.cookies, "X-Auth-Token") ||
14
+ get(req.headers, "Authorization") ||
15
+ get(req.headers, "authorization");
18
16
 
19
- authToken = authToken && authToken.replace('Bearer ', '').replace('BEARER ', '');
20
- authToken = authToken && authToken.split(',').length >1?authToken.split(',')[0]:authToken;
17
+ authToken =
18
+ authToken && authToken.replace("Bearer ", "").replace("BEARER ", "");
19
+ authToken =
20
+ authToken && authToken.split(",").length > 1
21
+ ? authToken.split(",")[0]
22
+ : authToken;
21
23
 
22
- if (!isEmpty(authToken)) {
23
- try {
24
- (req as any).authToken = authToken;
25
- const user: any = await accountsServer.resumeSession(authToken);
26
- user.id = user._id;
27
- user.userId = user._id;
28
- if(user.emails && user.emails.length > 0){
29
- user.email = user.emails[0].address;
30
- }
31
- (req as any).user = user;
32
- (req as any).userId = user.id;
33
- const spaces = [];
34
-
35
- const userSpaces = await db.find("space_users", {
36
- filters: [["user", "=", user.id],["user_accepted", "=", true]],
37
- fields: ["space"],
24
+ if (!isEmpty(authToken)) {
25
+ try {
26
+ (req as any).authToken = authToken;
27
+ const user: any = await accountsServer.resumeSession(authToken);
28
+ user.id = user._id;
29
+ user.userId = user._id;
30
+ if (user.emails && user.emails.length > 0) {
31
+ user.email = user.emails[0].address;
32
+ }
33
+ (req as any).user = user;
34
+ (req as any).userId = user.id;
35
+ const spaces = [];
38
36
 
39
- });
37
+ const userSpaces = await db.find("space_users", {
38
+ filters: [
39
+ ["user", "=", user.id],
40
+ ["user_accepted", "=", true],
41
+ ],
42
+ fields: ["space"],
43
+ });
40
44
 
41
- let steedosService = getSteedosService();
45
+ let steedosService = getSteedosService();
42
46
 
43
- if(userSpaces && userSpaces.length > 0){
44
- const dbSpaces = await db.find('spaces', {
45
- filters: [['_id', 'in', map(userSpaces, 'space')]],
46
- fields: ["_id", "name", "avatar", "avatar_dark"]
47
- });
47
+ if (userSpaces && userSpaces.length > 0) {
48
+ const dbSpaces = await db.find("spaces", {
49
+ filters: [["_id", "in", map(userSpaces, "space")]],
50
+ fields: ["_id", "name", "avatar", "avatar_dark"],
51
+ });
48
52
 
49
- for (let space of dbSpaces) {
50
- let logo_url = '';
51
- if(steedosService){
52
- if (space.avatar_dark) {
53
- logo_url = steedosService + "api/files/avatars/" + space.avatar_dark
54
- } else if (space.avatar) {
55
- logo_url = steedosService + "api/files/avatars/" + space.avatar
53
+ for (let space of dbSpaces) {
54
+ let logo_url = "";
55
+ if (steedosService) {
56
+ if (space.avatar_dark) {
57
+ logo_url =
58
+ steedosService +
59
+ "api/v6/files/cfs.avatars.filerecord/" +
60
+ space.avatar_dark;
61
+ } else if (space.avatar) {
62
+ logo_url =
63
+ steedosService +
64
+ "api/v6/files/cfs.avatars.filerecord/" +
65
+ space.avatar;
66
+ }
56
67
  }
68
+ spaces.push({
69
+ _id: space._id,
70
+ name: space.name,
71
+ logo_url,
72
+ });
57
73
  }
58
- spaces.push({
59
- _id: space._id,
60
- name: space.name,
61
- logo_url
62
- })
63
74
  }
75
+ (req as any).user.spaces = spaces;
76
+ } catch (e) {
77
+ console.log(e);
64
78
  }
65
- (req as any).user.spaces = spaces
66
- } catch (e) {
67
- console.log(e);
68
79
  }
69
- }
70
- return next();
71
- };
80
+ return next();
81
+ };
package/plugin.config.yml DELETED
@@ -1,4 +0,0 @@
1
- datasources:
2
- default:
3
- objectFiles:
4
- - ./src/i18n/**