@volcanicminds/backend 2.2.20 → 2.3.1

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 (61) hide show
  1. package/README.md +30 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +12 -169
  4. package/dist/index.js.map +1 -1
  5. package/dist/lib/api/auth/controller/auth.d.ts +3 -9
  6. package/dist/lib/api/auth/controller/auth.d.ts.map +1 -1
  7. package/dist/lib/api/auth/controller/auth.js +58 -75
  8. package/dist/lib/api/auth/controller/auth.js.map +1 -1
  9. package/dist/lib/api/auth/routes.d.ts +0 -45
  10. package/dist/lib/api/auth/routes.d.ts.map +1 -1
  11. package/dist/lib/api/auth/routes.js +15 -32
  12. package/dist/lib/api/auth/routes.js.map +1 -1
  13. package/dist/lib/api/tool/controller/tool.d.ts.map +1 -1
  14. package/dist/lib/api/tool/controller/tool.js +4 -0
  15. package/dist/lib/api/tool/controller/tool.js.map +1 -1
  16. package/dist/lib/api/users/controller/user.d.ts +10 -1
  17. package/dist/lib/api/users/controller/user.d.ts.map +1 -1
  18. package/dist/lib/api/users/controller/user.js +56 -2
  19. package/dist/lib/api/users/controller/user.js.map +1 -1
  20. package/dist/lib/api/users/routes.d.ts +67 -0
  21. package/dist/lib/api/users/routes.d.ts.map +1 -1
  22. package/dist/lib/api/users/routes.js +55 -2
  23. package/dist/lib/api/users/routes.js.map +1 -1
  24. package/dist/lib/config/general.d.ts +7 -0
  25. package/dist/lib/config/general.d.ts.map +1 -1
  26. package/dist/lib/config/general.js +8 -1
  27. package/dist/lib/config/general.js.map +1 -1
  28. package/dist/lib/config/plugins.d.ts +17 -0
  29. package/dist/lib/config/plugins.d.ts.map +1 -1
  30. package/dist/lib/config/plugins.js +8 -0
  31. package/dist/lib/config/plugins.js.map +1 -1
  32. package/dist/lib/defaults/managers.d.ts +8 -0
  33. package/dist/lib/defaults/managers.d.ts.map +1 -0
  34. package/dist/lib/defaults/managers.js +71 -0
  35. package/dist/lib/defaults/managers.js.map +1 -0
  36. package/dist/lib/hooks/onRequest.d.ts.map +1 -1
  37. package/dist/lib/hooks/onRequest.js +73 -3
  38. package/dist/lib/hooks/onRequest.js.map +1 -1
  39. package/dist/lib/hooks/onResponse.d.ts.map +1 -1
  40. package/dist/lib/hooks/onResponse.js +5 -0
  41. package/dist/lib/hooks/onResponse.js.map +1 -1
  42. package/dist/lib/loader/general.d.ts.map +1 -1
  43. package/dist/lib/loader/general.js +6 -1
  44. package/dist/lib/loader/general.js.map +1 -1
  45. package/dist/lib/loader/tenant.d.ts +3 -0
  46. package/dist/lib/loader/tenant.d.ts.map +1 -0
  47. package/dist/lib/loader/tenant.js +61 -0
  48. package/dist/lib/loader/tenant.js.map +1 -0
  49. package/lib/api/auth/controller/auth.ts +66 -82
  50. package/lib/api/auth/routes.ts +18 -33
  51. package/lib/api/tool/controller/tool.ts +5 -0
  52. package/lib/api/users/controller/user.ts +69 -2
  53. package/lib/api/users/routes.ts +58 -2
  54. package/lib/config/general.ts +8 -1
  55. package/lib/config/plugins.ts +8 -0
  56. package/lib/defaults/managers.ts +88 -0
  57. package/lib/hooks/onRequest.ts +92 -4
  58. package/lib/hooks/onResponse.ts +6 -0
  59. package/lib/loader/general.ts +6 -1
  60. package/lib/loader/tenant.ts +79 -0
  61. package/package.json +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"onRequest.js","sourceRoot":"","sources":["../../../lib/hooks/onRequest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"onRequest.js","sourceRoot":"","sources":["../../../lib/hooks/onRequest.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"onResponse.d.ts","sourceRoot":"","sources":["../../../lib/hooks/onResponse.ts"],"names":[],"mappings":"yBAAsB,QAAG,EAAE,UAAK;AAAhC,wBAoBC"}
1
+ {"version":3,"file":"onResponse.d.ts","sourceRoot":"","sources":["../../../lib/hooks/onResponse.ts"],"names":[],"mappings":"yBAAsB,QAAG,EAAE,UAAK;AAAhC,wBA0BC"}
@@ -1,4 +1,9 @@
1
1
  export default async (req, reply) => {
2
+ if (req.runner) {
3
+ if (!req.runner.isReleased) {
4
+ await req.runner.release();
5
+ }
6
+ }
2
7
  let extraMessage = '';
3
8
  if (log.i && req.startedAt) {
4
9
  const elapsed = new Date().getTime() - req.startedAt.getTime();
@@ -1 +1 @@
1
- {"version":3,"file":"onResponse.js","sourceRoot":"","sources":["../../../lib/hooks/onResponse.ts"],"names":[],"mappings":"AAAA,eAAe,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;IAClC,IAAI,YAAY,GAAG,EAAE,CAAA;IACrB,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAW,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,CAAA;QACtE,YAAY,GAAG,IAAI,OAAO,KAAK,CAAA;IACjC,CAAC;IACD,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;QACV,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,WAAW,IAAI,CAAC,EAAE,CAAA;QAC7C,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;QAC1E,YAAY,IAAI,IAAI,OAAO,GAAG,SAAS,SAAS,CAAA;IAClD,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,KAAK,CAAC,UAAU,IAAI,YAAY,EAAE,CAAC,IAAI,EAAE,CAAA;IAC3F,IAAI,KAAK,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;QAC3B,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;IACrB,CAAC;SAAM,IAAI,KAAK,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;QAClC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;IACrB,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;IACtB,CAAC;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"onResponse.js","sourceRoot":"","sources":["../../../lib/hooks/onResponse.ts"],"names":[],"mappings":"AAAA,eAAe,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;IAClC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACf,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YAC3B,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,CAAA;QAC5B,CAAC;IACH,CAAC;IAED,IAAI,YAAY,GAAG,EAAE,CAAA;IACrB,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAW,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,CAAA;QACtE,YAAY,GAAG,IAAI,OAAO,KAAK,CAAA;IACjC,CAAC;IACD,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;QACV,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,WAAW,IAAI,CAAC,EAAE,CAAA;QAC7C,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;QAC1E,YAAY,IAAI,IAAI,OAAO,GAAG,SAAS,SAAS,CAAA;IAClD,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,KAAK,CAAC,UAAU,IAAI,YAAY,EAAE,CAAC,IAAI,EAAE,CAAA;IAC3F,IAAI,KAAK,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;QAC3B,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;IACrB,CAAC;SAAM,IAAI,KAAK,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;QAClC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;IACrB,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;IACtB,CAAC;AACH,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"general.d.ts","sourceRoot":"","sources":["../../../lib/loader/general.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAI1D,wBAAsB,IAAI,2BAmCzB"}
1
+ {"version":3,"file":"general.d.ts","sourceRoot":"","sources":["../../../lib/loader/general.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAI1D,wBAAsB,IAAI,2BAwCzB"}
@@ -6,11 +6,16 @@ export async function load() {
6
6
  options: {
7
7
  allow_multiple_admin: false,
8
8
  admin_can_change_passwords: false,
9
+ allow_admin_change_password_users: false,
9
10
  reset_external_id_on_login: false,
10
11
  scheduler: false,
11
12
  embedded_auth: true,
12
13
  mfa_admin_forced_reset_email: undefined,
13
- mfa_admin_forced_reset_until: undefined
14
+ mfa_admin_forced_reset_until: undefined,
15
+ multi_tenant: {
16
+ enabled: false,
17
+ query_key: 'tid'
18
+ }
14
19
  }
15
20
  };
16
21
  const patterns = normalizePatterns(['..', 'config', 'general.{ts,js}'], ['src', 'config', 'general.{ts,js}']);
@@ -1 +1 @@
1
- {"version":3,"file":"general.js","sourceRoot":"","sources":["../../../lib/loader/general.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;AAE/B,MAAM,CAAC,KAAK,UAAU,IAAI;IACxB,MAAM,aAAa,GAAkB;QACnC,IAAI,EAAE,SAAS;QACf,OAAO,EAAE;YACP,oBAAoB,EAAE,KAAK;YAC3B,0BAA0B,EAAE,KAAK;YACjC,0BAA0B,EAAE,KAAK;YACjC,SAAS,EAAE,KAAK;YAChB,aAAa,EAAE,IAAI;YACnB,4BAA4B,EAAE,SAAS;YACvC,4BAA4B,EAAE,SAAS;SACxC;KACF,CAAA;IAED,MAAM,QAAQ,GAAG,iBAAiB,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAA;IAE7G,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,GAAG,CAAC,CAAC;YAAE,GAAG,CAAC,KAAK,CAAC,cAAc,GAAG,OAAO,CAAC,CAAA;QAC9C,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAA;QAE/D,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,CAAC,CAAC,CAAA;YAC9B,MAAM,MAAM,GAAkB,MAAM,CAAC,OAAO,IAAI,MAAM,CAAA;YAEtD,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI,EAAE,CAAC;gBACvC,aAAa,CAAC,OAAO,GAAG;oBACtB,GAAG,aAAa,CAAC,OAAO;oBACxB,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;iBAC1B,CAAA;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,GAAG,CAAC,CAAC;QAAE,GAAG,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAA;IACpD,OAAO,aAAa,CAAA;AACtB,CAAC"}
1
+ {"version":3,"file":"general.js","sourceRoot":"","sources":["../../../lib/loader/general.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;AAE/B,MAAM,CAAC,KAAK,UAAU,IAAI;IACxB,MAAM,aAAa,GAAkB;QACnC,IAAI,EAAE,SAAS;QACf,OAAO,EAAE;YACP,oBAAoB,EAAE,KAAK;YAC3B,0BAA0B,EAAE,KAAK;YACjC,iCAAiC,EAAE,KAAK;YACxC,0BAA0B,EAAE,KAAK;YACjC,SAAS,EAAE,KAAK;YAChB,aAAa,EAAE,IAAI;YACnB,4BAA4B,EAAE,SAAS;YACvC,4BAA4B,EAAE,SAAS;YACvC,YAAY,EAAE;gBACZ,OAAO,EAAE,KAAK;gBACd,SAAS,EAAE,KAAK;aACjB;SACF;KACF,CAAA;IAED,MAAM,QAAQ,GAAG,iBAAiB,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAA;IAE7G,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,GAAG,CAAC,CAAC;YAAE,GAAG,CAAC,KAAK,CAAC,cAAc,GAAG,OAAO,CAAC,CAAA;QAC9C,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAA;QAE/D,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,CAAC,CAAC,CAAA;YAC9B,MAAM,MAAM,GAAkB,MAAM,CAAC,OAAO,IAAI,MAAM,CAAA;YAEtD,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI,EAAE,CAAC;gBACvC,aAAa,CAAC,OAAO,GAAG;oBACtB,GAAG,aAAa,CAAC,OAAO;oBACxB,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;iBAC1B,CAAA;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,GAAG,CAAC,CAAC;QAAE,GAAG,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAA;IACpD,OAAO,aAAa,CAAA;AACtB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { FastifyInstance } from 'fastify';
2
+ export declare function apply(server: FastifyInstance): Promise<void>;
3
+ //# sourceMappingURL=tenant.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant.d.ts","sourceRoot":"","sources":["../../../lib/loader/tenant.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAGzC,wBAAsB,KAAK,CAAC,MAAM,EAAE,eAAe,iBA2ElD"}
@@ -0,0 +1,61 @@
1
+ export async function apply(server) {
2
+ const { multi_tenant } = global.config.options || {};
3
+ if (!multi_tenant?.enabled) {
4
+ if (log.d)
5
+ log.debug('Multi-Tenant: Disabled by configuration');
6
+ return;
7
+ }
8
+ if (log.i)
9
+ log.info('Multi-Tenant: 🟢 Enabled');
10
+ server.addHook('onRequest', async (req, reply) => {
11
+ const tm = server['tenantManager'];
12
+ if (!tm || !tm.isImplemented()) {
13
+ const errorMsg = 'Multi-Tenant enabled but no TenantManager provided/implemented!';
14
+ if (log.f)
15
+ log.fatal(errorMsg);
16
+ throw new Error(errorMsg);
17
+ }
18
+ try {
19
+ const tenant = await tm.resolveTenant(req);
20
+ if (!tenant) {
21
+ if (log.w)
22
+ log.warn(`Multi-Tenant: Tenant resolution failed for request ${req.id}`);
23
+ return reply.code(404).send({
24
+ statusCode: 404,
25
+ error: 'Not Found',
26
+ message: 'Tenant not found or resolution failed'
27
+ });
28
+ }
29
+ req.tenant = tenant;
30
+ if (log.t)
31
+ log.trace(`Multi-Tenant: Context switched to ${tenant.slug || tenant.id}`);
32
+ const dataSource = global.connection;
33
+ if (dataSource) {
34
+ const qr = dataSource.createQueryRunner();
35
+ await qr.connect();
36
+ req.db = qr.manager;
37
+ await tm.switchContext(tenant, qr.manager);
38
+ reply.raw.on('finish', async () => {
39
+ if (!qr.isReleased) {
40
+ await qr.release();
41
+ }
42
+ });
43
+ }
44
+ else {
45
+ if (log.w)
46
+ log.warn('Multi-Tenant: Global connection not found! Skipping DB context creation.');
47
+ }
48
+ }
49
+ catch (err) {
50
+ const message = err instanceof Error ? err.message : String(err);
51
+ if (log.e)
52
+ log.error(`Multi-Tenant Error: ${message}`);
53
+ return reply.code(500).send({
54
+ statusCode: 500,
55
+ error: 'Internal Server Error',
56
+ message: 'Tenant Context Switch Failed'
57
+ });
58
+ }
59
+ });
60
+ }
61
+ //# sourceMappingURL=tenant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant.js","sourceRoot":"","sources":["../../../lib/loader/tenant.ts"],"names":[],"mappings":"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"}
@@ -23,13 +23,13 @@ export async function register(req: FastifyRequest, reply: FastifyReply) {
23
23
  return reply.status(400).send(new Error('Repeated password not match'))
24
24
  }
25
25
 
26
- let existings = await req.server['userManager'].retrieveUserByEmail(data.email)
26
+ let existings = await req.server['userManager'].retrieveUserByEmail(data.email, req.runner)
27
27
  if (existings) {
28
28
  return reply.status(400).send(new Error('Email already registered'))
29
29
  }
30
30
 
31
31
  if ((data.requiredRoles || []).includes('admin')) {
32
- existings = await req.server['userManager'].findQuery({ 'roles:in': 'admin' })
32
+ existings = await req.server['userManager'].findQuery({ 'roles:in': 'admin' }, req.runner)
33
33
  if (existings?.records?.length) {
34
34
  return reply.status(400).send(new Error('User admin already registered'))
35
35
  }
@@ -42,7 +42,7 @@ export async function register(req: FastifyRequest, reply: FastifyReply) {
42
42
  data.roles.push(publicRole)
43
43
  }
44
44
 
45
- const user = await req.server['userManager'].createUser({ ...data, password: password })
45
+ const user = await req.server['userManager'].createUser({ ...data, password: password }, req.runner)
46
46
  if (!user) {
47
47
  return reply.status(400).send(new Error('User not registered'))
48
48
  }
@@ -53,7 +53,7 @@ export async function register(req: FastifyRequest, reply: FastifyReply) {
53
53
  export async function unregister(req: FastifyRequest, reply: FastifyReply) {
54
54
  const { email, password } = req.data()
55
55
 
56
- let user = await req.server['userManager'].retrieveUserByPassword(email, password)
56
+ let user = await req.server['userManager'].retrieveUserByPassword(email, password, req.runner)
57
57
  let isValid = await req.server['userManager'].isValidUser(user)
58
58
 
59
59
  if (!isValid) {
@@ -64,7 +64,7 @@ export async function unregister(req: FastifyRequest, reply: FastifyReply) {
64
64
  return reply.status(403).send(new Error('User blocked'))
65
65
  }
66
66
 
67
- user = await req.server['userManager'].disableUserById(user.getId())
67
+ user = await req.server['userManager'].disableUserById(user.getId(), req.runner)
68
68
  isValid = await req.server['userManager'].isValidUser(user)
69
69
 
70
70
  if (!isValid) {
@@ -113,7 +113,7 @@ export async function changePassword(req: FastifyRequest, reply: FastifyReply) {
113
113
  return reply.status(400).send(new Error('Repeated new password not match'))
114
114
  }
115
115
 
116
- let user = await req.server['userManager'].retrieveUserByPassword(email, oldPassword)
116
+ let user = await req.server['userManager'].retrieveUserByPassword(email, oldPassword, req.runner)
117
117
  let isValid = await req.server['userManager'].isValidUser(user)
118
118
 
119
119
  if (!isValid) {
@@ -124,7 +124,7 @@ export async function changePassword(req: FastifyRequest, reply: FastifyReply) {
124
124
  return reply.status(403).send(new Error('User blocked'))
125
125
  }
126
126
 
127
- user = await req.server['userManager'].changePassword(email, newPassword1, oldPassword)
127
+ user = await req.server['userManager'].changePassword(email, newPassword1, oldPassword, req.runner)
128
128
  isValid = await req.server['userManager'].isValidUser(user)
129
129
  return { ok: isValid }
130
130
  }
@@ -142,9 +142,9 @@ export async function forgotPassword(req: FastifyRequest, reply: FastifyReply) {
142
142
 
143
143
  let user = null as any
144
144
  if (email) {
145
- user = await req.server['userManager'].retrieveUserByEmail(email)
145
+ user = await req.server['userManager'].retrieveUserByEmail(email, req.runner)
146
146
  } else if (username) {
147
- user = await req.server['userManager'].retrieveUserByUsername(username)
147
+ user = await req.server['userManager'].retrieveUserByUsername(username, req.runner)
148
148
  }
149
149
 
150
150
  let isValid = await req.server['userManager'].isValidUser(user)
@@ -157,7 +157,7 @@ export async function forgotPassword(req: FastifyRequest, reply: FastifyReply) {
157
157
  return reply.status(403).send(new Error('User blocked'))
158
158
  }
159
159
 
160
- user = await req.server['userManager'].forgotPassword(user.email)
160
+ user = await req.server['userManager'].forgotPassword(user.email, req.runner)
161
161
  isValid = await req.server['userManager'].isValidUser(user)
162
162
 
163
163
  return { ok: isValid }
@@ -170,7 +170,7 @@ export async function confirmEmail(req: FastifyRequest, reply: FastifyReply) {
170
170
  return reply.status(400).send(new Error('Missing the confirm email token'))
171
171
  }
172
172
 
173
- let user = await req.server['userManager'].retrieveUserByConfirmationToken(code)
173
+ let user = await req.server['userManager'].retrieveUserByConfirmationToken(code, req.runner)
174
174
  let isValid = await req.server['userManager'].isValidUser(user)
175
175
 
176
176
  if (!isValid) {
@@ -181,7 +181,7 @@ export async function confirmEmail(req: FastifyRequest, reply: FastifyReply) {
181
181
  return reply.status(403).send(new Error('User blocked'))
182
182
  }
183
183
 
184
- user = await req.server['userManager'].userConfirmation(user)
184
+ user = await req.server['userManager'].userConfirmation(user, req.runner)
185
185
  isValid = await req.server['userManager'].isValidUser(user)
186
186
 
187
187
  return { ok: isValid }
@@ -202,7 +202,7 @@ export async function resetPassword(req: FastifyRequest, reply: FastifyReply) {
202
202
  return reply.status(400).send(new Error('Repeated new password not match'))
203
203
  }
204
204
 
205
- let user = await req.server['userManager'].retrieveUserByResetPasswordToken(code)
205
+ let user = await req.server['userManager'].retrieveUserByResetPasswordToken(code, req.runner)
206
206
  let isValid = await req.server['userManager'].isValidUser(user)
207
207
 
208
208
  if (!isValid) {
@@ -213,7 +213,7 @@ export async function resetPassword(req: FastifyRequest, reply: FastifyReply) {
213
213
  return reply.status(403).send(new Error('User blocked'))
214
214
  }
215
215
 
216
- user = await req.server['userManager'].resetPassword(user, newPassword1)
216
+ user = await req.server['userManager'].resetPassword(user, newPassword1, req.runner)
217
217
  isValid = await req.server['userManager'].isValidUser(user)
218
218
  return { ok: isValid, user }
219
219
  }
@@ -233,7 +233,7 @@ export async function login(req: FastifyRequest, reply: FastifyReply) {
233
233
  return reply.status(400).send(new Error('Password not valid'))
234
234
  }
235
235
 
236
- let user = await req.server['userManager'].retrieveUserByPassword(email, password)
236
+ let user = await req.server['userManager'].retrieveUserByPassword(email, password, req.runner)
237
237
  if (!user) {
238
238
  return reply.status(403).send(new Error('Wrong credentials'))
239
239
  }
@@ -262,7 +262,10 @@ export async function login(req: FastifyRequest, reply: FastifyReply) {
262
262
  const isMandatory = mfa_policy === MfaPolicy.MANDATORY
263
263
 
264
264
  if (isMfaEnabled || isMandatory) {
265
- const tempToken = await reply.jwtSign({ sub: user.externalId, role: 'pre-auth-mfa' }, { expiresIn: '5m' })
265
+ const tempToken = await reply.jwtSign(
266
+ { sub: user.externalId, role: 'pre-auth-mfa', tid: req.tenant?.id },
267
+ { expiresIn: '5m' }
268
+ )
266
269
  // Use 202 Accepted to bypass 200 OK strict schema filtering
267
270
  return reply.status(202).send({
268
271
  mfaRequired: isMfaEnabled, // If enabled, verify. If not enabled but mandatory, setup.
@@ -272,16 +275,39 @@ export async function login(req: FastifyRequest, reply: FastifyReply) {
272
275
  }
273
276
 
274
277
  if (config.options.reset_external_id_on_login) {
275
- user = await req.server['userManager'].resetExternalId(user.getId())
278
+ user = await req.server['userManager'].resetExternalId(user.getId(), req.runner)
276
279
  }
277
280
 
278
281
  // https://www.iana.org/assignments/jwt/jwt.xhtml
279
- const token = await reply.jwtSign({ sub: user.externalId })
282
+ const token = await reply.jwtSign({ sub: user.externalId, tid: req.tenant?.id })
280
283
  const refreshToken = reply.server.jwt['refreshToken']
281
- ? await reply.server.jwt['refreshToken'].sign({ sub: user.externalId })
284
+ ? await reply.server.jwt['refreshToken'].sign({ sub: user.externalId, tid: req.tenant?.id })
282
285
  : undefined
283
286
 
284
- // Standard 200 OK
287
+ const AUTH_MODE = process.env.AUTH_MODE || 'BEARER'
288
+
289
+ if (AUTH_MODE === 'COOKIE') {
290
+ reply.setCookie('auth_token', token, {
291
+ path: '/',
292
+ httpOnly: true,
293
+ secure: process.env.NODE_ENV === 'production',
294
+ sameSite: 'strict',
295
+ signed: true,
296
+ maxAge: 86400
297
+ })
298
+
299
+ return {
300
+ ...user,
301
+ roles: (user.roles || [global.role?.public?.code || 'public']).map((r) => r?.code || r),
302
+ token: null, // Token hidden in cookie
303
+ refreshToken: null,
304
+ securityPolicy: {
305
+ mfaPolicy: mfa_policy
306
+ }
307
+ }
308
+ }
309
+
310
+ // Standard 200 OK (BEARER MODE)
285
311
  return {
286
312
  ...user,
287
313
  roles: (user.roles || [global.role?.public?.code || 'public']).map((r) => r?.code || r),
@@ -293,6 +319,13 @@ export async function login(req: FastifyRequest, reply: FastifyReply) {
293
319
  }
294
320
  }
295
321
 
322
+ export async function logout(_req: FastifyRequest, reply: FastifyReply) {
323
+ if (process.env.AUTH_MODE === 'COOKIE') {
324
+ reply.clearCookie('auth_token', { path: '/' })
325
+ }
326
+ return { ok: true }
327
+ }
328
+
296
329
  export async function refreshToken(req: FastifyRequest, reply: FastifyReply) {
297
330
  const { token, refreshToken } = req.data()
298
331
 
@@ -312,14 +345,14 @@ export async function refreshToken(req: FastifyRequest, reply: FastifyReply) {
312
345
  return reply.status(403).send(new Error('Mismatched tokens'))
313
346
  }
314
347
 
315
- const user = await req.server['userManager'].retrieveUserByExternalId(tokenData.sub)
348
+ const user = await req.server['userManager'].retrieveUserByExternalId(tokenData.sub, req.runner)
316
349
  const isValid = await req.server['userManager'].isValidUser(user)
317
350
 
318
351
  if (!isValid) {
319
352
  return reply.status(403).send(new Error('Wrong refresh token'))
320
353
  }
321
354
 
322
- const newToken = await reply.jwtSign({ sub: user.externalId })
355
+ const newToken = await reply.jwtSign({ sub: user.externalId, tid: req.tenant?.id })
323
356
  return {
324
357
  token: newToken
325
358
  }
@@ -331,43 +364,12 @@ export async function invalidateTokens(req: FastifyRequest, reply: FastifyReply)
331
364
  return reply.status(403).send(new Error('User not linked'))
332
365
  }
333
366
 
334
- const user = await req.server['userManager'].resetExternalId(req.user.getId())
367
+ const user = await req.server['userManager'].resetExternalId(req.user.getId(), req.runner)
335
368
  isValid = await req.server['userManager'].isValidUser(user)
336
369
  return { ok: isValid }
337
370
  }
338
371
 
339
- export async function block(req: FastifyRequest, reply: FastifyReply) {
340
- if (!req.server['userManager'].isImplemented()) {
341
- throw new Error('Not implemented')
342
- }
343
-
344
- if (!req.hasRole(roles.admin) && !req.hasRole(roles.backoffice)) {
345
- return reply.status(403).send({ statusCode: 403, code: 'ROLE_NOT_ALLOWED', message: 'Not allowed to block a user' })
346
- }
347
-
348
- const { id: userId } = req.parameters()
349
- const { reason } = req.data()
350
-
351
- let user = await req.server['userManager'].blockUserById(userId, reason)
352
- user = await req.server['userManager'].resetExternalId(user.getId())
353
- return { ok: !!user.getId() }
354
- }
355
-
356
- export async function unblock(req: FastifyRequest, reply: FastifyReply) {
357
- if (!req.server['userManager'].isImplemented()) {
358
- throw new Error('Not implemented')
359
- }
360
-
361
- if (!req.hasRole(roles.admin) && !req.hasRole(roles.backoffice)) {
362
- return reply
363
- .status(403)
364
- .send({ statusCode: 403, code: 'ROLE_NOT_ALLOWED', message: 'Not allowed to unblock a user' })
365
- }
366
372
 
367
- const { id: userId } = req.parameters()
368
- const user = await req.server['userManager'].unblockUserById(userId)
369
- return { ok: !!user.getId() }
370
- }
371
373
 
372
374
  export async function mfaSetup(req: FastifyRequest, reply: FastifyReply) {
373
375
  const user = req.user
@@ -399,16 +401,16 @@ export async function mfaEnable(req: FastifyRequest, reply: FastifyReply) {
399
401
  }
400
402
 
401
403
  // 2. Save using userManager (typeorm)
402
- await req.server['userManager'].saveMfaSecret(user.getId(), secret)
403
- await req.server['userManager'].enableMfa(user.getId())
404
+ await req.server['userManager'].saveMfaSecret(user.getId(), secret, req.runner)
405
+ await req.server['userManager'].enableMfa(user.getId(), req.runner)
404
406
 
405
407
  // IMPORTANT: Return full tokens upon enablement if user was in pending state
406
408
  // BUT usually user is already logged in via temp token or full token.
407
409
  // If user is setting up from "Forced Setup", they need tokens now.
408
410
 
409
- const finalToken = await reply.jwtSign({ sub: user.externalId })
411
+ const finalToken = await reply.jwtSign({ sub: user.externalId, tid: req.tenant?.id })
410
412
  const refreshToken = reply.server.jwt['refreshToken']
411
- ? await reply.server.jwt['refreshToken'].sign({ sub: user.externalId })
413
+ ? await reply.server.jwt['refreshToken'].sign({ sub: user.externalId, tid: req.tenant?.id })
412
414
  : undefined
413
415
 
414
416
  return {
@@ -450,10 +452,10 @@ export async function mfaVerify(req: FastifyRequest, reply: FastifyReply) {
450
452
  if (!token) return reply.status(400).send(new Error('Missing token'))
451
453
 
452
454
  // 1. Retrieve secret via userManager
453
- const user = await req.server['userManager'].retrieveUserByExternalId(subjectId)
455
+ const user = await req.server['userManager'].retrieveUserByExternalId(subjectId, req.runner)
454
456
  if (!user) return reply.status(404).send(new Error('User not found'))
455
457
 
456
- const secret = await req.server['userManager'].retrieveMfaSecret(user.getId())
458
+ const secret = await req.server['userManager'].retrieveMfaSecret(user.getId(), req.runner)
457
459
  if (!secret) return reply.status(403).send(new Error('MFA not configured for user'))
458
460
 
459
461
  // 2. Verify via mfaManager
@@ -461,12 +463,12 @@ export async function mfaVerify(req: FastifyRequest, reply: FastifyReply) {
461
463
  if (!isValid) return reply.status(403).send(new Error('Invalid MFA token'))
462
464
 
463
465
  if (config.options.reset_external_id_on_login) {
464
- await req.server['userManager'].resetExternalId(user.getId())
466
+ await req.server['userManager'].resetExternalId(user.getId(), req.runner)
465
467
  }
466
468
 
467
- const finalToken = await reply.jwtSign({ sub: user.externalId })
469
+ const finalToken = await reply.jwtSign({ sub: user.externalId, tid: req.tenant?.id })
468
470
  const refreshToken = reply.server.jwt['refreshToken']
469
- ? await reply.server.jwt['refreshToken'].sign({ sub: user.externalId })
471
+ ? await reply.server.jwt['refreshToken'].sign({ sub: user.externalId, tid: req.tenant?.id })
470
472
  : undefined
471
473
 
472
474
  return {
@@ -490,7 +492,7 @@ export async function mfaDisable(req: FastifyRequest, reply: FastifyReply) {
490
492
  }
491
493
 
492
494
  try {
493
- await req.server['userManager'].disableMfa(user.getId())
495
+ await req.server['userManager'].disableMfa(user.getId(), req.runner)
494
496
  return { ok: true }
495
497
  } catch (error: any) {
496
498
  req.log.error({ err: error }, 'MFA Disable failed')
@@ -498,22 +500,4 @@ export async function mfaDisable(req: FastifyRequest, reply: FastifyReply) {
498
500
  }
499
501
  }
500
502
 
501
- export async function resetMfa(req: FastifyRequest, reply: FastifyReply) {
502
- const { id } = req.parameters()
503
-
504
- if (!req.hasRole(roles.admin)) {
505
- return reply.status(403).send(new Error('Only admins can reset MFA'))
506
- }
507
-
508
- if (!id) {
509
- return reply.status(400).send(new Error('Missing user id'))
510
- }
511
503
 
512
- try {
513
- await req.server['userManager'].disableMfa(id)
514
- return { ok: true }
515
- } catch (error: any) {
516
- req.log.error({ err: error }, 'MFA Reset failed')
517
- return reply.status(500).send(new Error('Failed to reset MFA'))
518
- }
519
- }
@@ -131,6 +131,20 @@ export default {
131
131
  }
132
132
  }
133
133
  },
134
+ {
135
+ method: 'POST',
136
+ path: '/logout',
137
+ roles: [],
138
+ handler: 'auth.logout',
139
+ middlewares: [],
140
+ config: {
141
+ title: 'Logout',
142
+ description: 'Logout (clears cookie if in cookie mode)',
143
+ response: {
144
+ 200: { $ref: 'defaultResponse#' }
145
+ }
146
+ }
147
+ },
134
148
  {
135
149
  method: 'POST',
136
150
  path: '/refresh-token',
@@ -160,37 +174,7 @@ export default {
160
174
  }
161
175
  }
162
176
  },
163
- {
164
- method: 'POST',
165
- path: '/block/:id',
166
- roles: [roles.admin, roles.backoffice],
167
- handler: 'auth.block',
168
- middlewares: ['global.isAuthenticated'],
169
- config: {
170
- title: 'Block a user by id',
171
- description: 'Block a user by id',
172
- params: { $ref: 'onlyIdSchema#' },
173
- body: { $ref: 'blockBodySchema#' },
174
- response: {
175
- 200: { $ref: 'defaultResponse#' }
176
- }
177
- }
178
- },
179
- {
180
- method: 'POST',
181
- path: '/unblock/:id',
182
- roles: [roles.admin, roles.backoffice],
183
- handler: 'auth.unblock',
184
- middlewares: ['global.isAuthenticated'],
185
- config: {
186
- title: 'Unblock a user by id',
187
- description: 'Unblock a user by id',
188
- params: { $ref: 'onlyIdSchema#' },
189
- response: {
190
- 200: { $ref: 'defaultResponse#' }
191
- }
192
- }
193
- },
177
+
194
178
  {
195
179
  method: 'POST',
196
180
  path: '/mfa/setup',
@@ -223,7 +207,7 @@ export default {
223
207
  {
224
208
  method: 'POST',
225
209
  path: '/mfa/verify',
226
- roles: [], // Open, validation via temp token manually in controller
210
+ roles: [],
227
211
  handler: 'auth.mfaVerify',
228
212
  middlewares: [],
229
213
  config: {
@@ -249,6 +233,7 @@ export default {
249
233
  200: { $ref: 'defaultResponse#' }
250
234
  }
251
235
  }
252
- }
236
+ },
237
+
253
238
  ]
254
239
  }
@@ -1,6 +1,11 @@
1
1
  import { FastifyReply, FastifyRequest } from 'fastify'
2
2
 
3
3
  export async function synchronizeSchemas(req: FastifyRequest, reply: FastifyReply) {
4
+ const { multi_tenant } = global.config?.options || {}
5
+ if (multi_tenant?.enabled) {
6
+ throw new Error('Schema synchronization is not supported in multi-tenant mode.')
7
+ }
8
+
4
9
  if (!req.server['dataBaseManager'].isImplemented()) {
5
10
  throw new Error('Not implemented')
6
11
  }