@volcanicminds/backend 2.3.2 → 3.0.0
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/README.md +221 -28
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -36
- package/dist/index.js.map +1 -1
- package/dist/lib/api/auth/controller/auth.d.ts.map +1 -1
- package/dist/lib/api/auth/controller/auth.js +14 -7
- package/dist/lib/api/auth/controller/auth.js.map +1 -1
- package/dist/lib/api/health/controller/health.d.ts +1 -1
- package/dist/lib/api/health/controller/health.d.ts.map +1 -1
- package/dist/lib/api/health/controller/health.js +1 -1
- package/dist/lib/api/health/controller/health.js.map +1 -1
- package/dist/lib/api/health/routes.d.ts +1 -0
- package/dist/lib/api/health/routes.d.ts.map +1 -1
- package/dist/lib/api/health/routes.js +1 -0
- package/dist/lib/api/health/routes.js.map +1 -1
- package/dist/lib/api/tenants/controller/tenants.d.ts +17 -0
- package/dist/lib/api/tenants/controller/tenants.d.ts.map +1 -0
- package/dist/lib/api/tenants/controller/tenants.js +150 -0
- package/dist/lib/api/tenants/controller/tenants.js.map +1 -0
- package/dist/lib/api/tenants/routes.d.ts +167 -0
- package/dist/lib/api/tenants/routes.d.ts.map +1 -0
- package/dist/lib/api/tenants/routes.js +143 -0
- package/dist/lib/api/tenants/routes.js.map +1 -0
- package/dist/lib/config/plugins.js +1 -1
- package/dist/lib/config/plugins.js.map +1 -1
- package/dist/lib/database/typeorm/entities/change.d.ts +11 -0
- package/dist/lib/database/typeorm/entities/change.d.ts.map +1 -0
- package/dist/lib/database/typeorm/entities/change.js +4 -0
- package/dist/lib/database/typeorm/entities/change.js.map +1 -0
- package/dist/lib/database/typeorm/entities/tenant.d.ts +13 -0
- package/dist/lib/database/typeorm/entities/tenant.d.ts.map +1 -0
- package/dist/lib/database/typeorm/entities/tenant.js +4 -0
- package/dist/lib/database/typeorm/entities/tenant.js.map +1 -0
- package/dist/lib/database/typeorm/entities/token.d.ts +16 -0
- package/dist/lib/database/typeorm/entities/token.d.ts.map +1 -0
- package/dist/lib/database/typeorm/entities/token.js +4 -0
- package/dist/lib/database/typeorm/entities/token.js.map +1 -0
- package/dist/lib/database/typeorm/entities/user.d.ts +28 -0
- package/dist/lib/database/typeorm/entities/user.d.ts.map +1 -0
- package/dist/lib/database/typeorm/entities/user.js +4 -0
- package/dist/lib/database/typeorm/entities/user.js.map +1 -0
- package/dist/lib/database/typeorm/loader/dataBaseManager.d.ts +6 -0
- package/dist/lib/database/typeorm/loader/dataBaseManager.d.ts.map +1 -0
- package/dist/lib/database/typeorm/loader/dataBaseManager.js +73 -0
- package/dist/lib/database/typeorm/loader/dataBaseManager.js.map +1 -0
- package/dist/lib/database/typeorm/loader/entities.d.ts +6 -0
- package/dist/lib/database/typeorm/loader/entities.d.ts.map +1 -0
- package/dist/lib/database/typeorm/loader/entities.js +37 -0
- package/dist/lib/database/typeorm/loader/entities.js.map +1 -0
- package/dist/lib/database/typeorm/loader/tenantManager.d.ts +17 -0
- package/dist/lib/database/typeorm/loader/tenantManager.d.ts.map +1 -0
- package/dist/lib/database/typeorm/loader/tenantManager.js +193 -0
- package/dist/lib/database/typeorm/loader/tenantManager.js.map +1 -0
- package/dist/lib/database/typeorm/loader/tokenManager.d.ts +23 -0
- package/dist/lib/database/typeorm/loader/tokenManager.d.ts.map +1 -0
- package/dist/lib/database/typeorm/loader/tokenManager.js +131 -0
- package/dist/lib/database/typeorm/loader/tokenManager.js.map +1 -0
- package/dist/lib/database/typeorm/loader/userManager.d.ts +39 -0
- package/dist/lib/database/typeorm/loader/userManager.d.ts.map +1 -0
- package/dist/lib/database/typeorm/loader/userManager.js +358 -0
- package/dist/lib/database/typeorm/loader/userManager.js.map +1 -0
- package/dist/lib/database/typeorm/query/builder.d.ts +2 -0
- package/dist/lib/database/typeorm/query/builder.d.ts.map +1 -0
- package/dist/lib/database/typeorm/query/builder.js +33 -0
- package/dist/lib/database/typeorm/query/builder.js.map +1 -0
- package/dist/lib/database/typeorm/query/parser.d.ts +2 -0
- package/dist/lib/database/typeorm/query/parser.d.ts.map +1 -0
- package/dist/lib/database/typeorm/query/parser.js +27 -0
- package/dist/lib/database/typeorm/query/parser.js.map +1 -0
- package/dist/lib/database/typeorm/query.d.ts +36 -0
- package/dist/lib/database/typeorm/query.d.ts.map +1 -0
- package/dist/lib/database/typeorm/query.js +259 -0
- package/dist/lib/database/typeorm/query.js.map +1 -0
- package/dist/lib/database/typeorm/util/crypto.d.ts +3 -0
- package/dist/lib/database/typeorm/util/crypto.d.ts.map +1 -0
- package/dist/lib/database/typeorm/util/crypto.js +46 -0
- package/dist/lib/database/typeorm/util/crypto.js.map +1 -0
- package/dist/lib/database/typeorm/util/error.d.ts +5 -0
- package/dist/lib/database/typeorm/util/error.d.ts.map +1 -0
- package/dist/lib/database/typeorm/util/error.js +8 -0
- package/dist/lib/database/typeorm/util/error.js.map +1 -0
- package/dist/lib/database/typeorm/util/logger.d.ts +7 -0
- package/dist/lib/database/typeorm/util/logger.d.ts.map +1 -0
- package/dist/lib/database/typeorm/util/logger.js +31 -0
- package/dist/lib/database/typeorm/util/logger.js.map +1 -0
- package/dist/lib/database/typeorm/util/yn.d.ts +2 -0
- package/dist/lib/database/typeorm/util/yn.d.ts.map +1 -0
- package/dist/lib/database/typeorm/util/yn.js +15 -0
- package/dist/lib/database/typeorm/util/yn.js.map +1 -0
- package/dist/lib/defaults/managers.d.ts.map +1 -1
- package/dist/lib/defaults/managers.js +186 -58
- package/dist/lib/defaults/managers.js.map +1 -1
- package/dist/lib/hooks/onRequest.d.ts.map +1 -1
- package/dist/lib/hooks/onRequest.js +11 -48
- package/dist/lib/hooks/onRequest.js.map +1 -1
- package/dist/lib/loader/router.d.ts.map +1 -1
- package/dist/lib/loader/router.js +92 -83
- package/dist/lib/loader/router.js.map +1 -1
- package/dist/lib/loader/tenant.d.ts.map +1 -1
- package/dist/lib/loader/tenant.js +18 -1
- package/dist/lib/loader/tenant.js.map +1 -1
- package/dist/lib/locales/en.json +12 -0
- package/dist/lib/locales/it.json +12 -0
- package/dist/lib/schemas/tenant.d.ts +88 -0
- package/dist/lib/schemas/tenant.d.ts.map +1 -0
- package/dist/lib/schemas/tenant.js +45 -0
- package/dist/lib/schemas/tenant.js.map +1 -0
- package/dist/lib/util/regexp.d.ts +2 -0
- package/dist/lib/util/regexp.d.ts.map +1 -1
- package/dist/lib/util/regexp.js +5 -3
- package/dist/lib/util/regexp.js.map +1 -1
- package/dist/lib/util/secret.d.ts +11 -0
- package/dist/lib/util/secret.d.ts.map +1 -0
- package/dist/lib/util/secret.js +70 -0
- package/dist/lib/util/secret.js.map +1 -0
- package/dist/server.js +4 -1
- package/dist/server.js.map +1 -1
- package/dist/typeorm.d.ts +15 -0
- package/dist/typeorm.d.ts.map +1 -0
- package/dist/typeorm.js +86 -0
- package/dist/typeorm.js.map +1 -0
- package/dist/types/database/typeorm/global.d.ts +56 -0
- package/dist/types/database/typeorm/global.d.ts.map +1 -0
- package/dist/types/database/typeorm/global.js +2 -0
- package/dist/types/database/typeorm/global.js.map +1 -0
- package/dist/types/global.d.ts +318 -0
- package/dist/types/orm.d.ts +22 -0
- package/lib/api/auth/controller/auth.ts +28 -12
- package/lib/api/health/controller/health.ts +1 -1
- package/lib/api/health/routes.ts +1 -0
- package/lib/api/tenants/controller/tenants.ts +211 -0
- package/lib/api/tenants/routes.ts +145 -0
- package/lib/config/plugins.ts +1 -1
- package/lib/database/typeorm/entities/change.ts +11 -0
- package/lib/database/typeorm/entities/tenant.ts +20 -0
- package/lib/database/typeorm/entities/token.ts +18 -0
- package/lib/database/typeorm/entities/user.ts +33 -0
- package/lib/database/typeorm/loader/dataBaseManager.ts +89 -0
- package/lib/database/typeorm/loader/entities.ts +47 -0
- package/lib/database/typeorm/loader/tenantManager.ts +260 -0
- package/lib/database/typeorm/loader/tokenManager.ts +157 -0
- package/lib/database/typeorm/loader/userManager.ts +432 -0
- package/lib/database/typeorm/query/builder.ts +39 -0
- package/lib/database/typeorm/query/parser.ts +29 -0
- package/lib/database/typeorm/query.ts +326 -0
- package/lib/database/typeorm/util/crypto.ts +52 -0
- package/lib/database/typeorm/util/error.ts +7 -0
- package/lib/database/typeorm/util/logger.ts +35 -0
- package/lib/database/typeorm/util/yn.ts +20 -0
- package/lib/defaults/managers.ts +191 -64
- package/lib/hooks/onRequest.ts +12 -64
- package/lib/loader/router.ts +133 -110
- package/lib/loader/tenant.ts +29 -13
- package/lib/schemas/tenant.ts +49 -0
- package/lib/util/regexp.ts +31 -8
- package/lib/util/secret.ts +113 -0
- package/package.json +54 -13
- package/dist/lib/apollo/context.d.ts +0 -6
- package/dist/lib/apollo/context.d.ts.map +0 -1
- package/dist/lib/apollo/context.js +0 -5
- package/dist/lib/apollo/context.js.map +0 -1
- package/dist/lib/apollo/resolvers.d.ts +0 -8
- package/dist/lib/apollo/resolvers.d.ts.map +0 -1
- package/dist/lib/apollo/resolvers.js +0 -8
- package/dist/lib/apollo/resolvers.js.map +0 -1
- package/dist/lib/apollo/type-defs.d.ts +0 -3
- package/dist/lib/apollo/type-defs.d.ts.map +0 -1
- package/dist/lib/apollo/type-defs.js +0 -8
- package/dist/lib/apollo/type-defs.js.map +0 -1
- package/lib/apollo/context.ts +0 -11
- package/lib/apollo/resolvers.ts +0 -12
- package/lib/apollo/type-defs.ts +0 -9
|
@@ -1,71 +1,199 @@
|
|
|
1
1
|
export const defaultTenantManager = {
|
|
2
|
-
isImplemented() {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
isImplemented() {
|
|
3
|
+
return false;
|
|
4
|
+
},
|
|
5
|
+
resolveTenant(_req) {
|
|
6
|
+
throw new Error('Not implemented');
|
|
7
|
+
},
|
|
8
|
+
switchContext(_tenant, _db) {
|
|
9
|
+
throw new Error('Not implemented');
|
|
10
|
+
},
|
|
11
|
+
createTenant(_data) {
|
|
12
|
+
throw new Error('Not implemented');
|
|
13
|
+
},
|
|
14
|
+
deleteTenant(_id) {
|
|
15
|
+
throw new Error('Not implemented');
|
|
16
|
+
},
|
|
17
|
+
listTenants() {
|
|
18
|
+
throw new Error('Not implemented');
|
|
19
|
+
},
|
|
20
|
+
getTenant(_id) {
|
|
21
|
+
throw new Error('Not implemented');
|
|
22
|
+
},
|
|
23
|
+
updateTenant(_id, _data) {
|
|
24
|
+
throw new Error('Not implemented');
|
|
25
|
+
},
|
|
26
|
+
restoreTenant(_id) {
|
|
27
|
+
throw new Error('Not implemented');
|
|
28
|
+
}
|
|
7
29
|
};
|
|
8
30
|
export const defaultUserManager = {
|
|
9
|
-
isImplemented() {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
31
|
+
isImplemented() {
|
|
32
|
+
return false;
|
|
33
|
+
},
|
|
34
|
+
isValidUser(_data) {
|
|
35
|
+
throw new Error('Not implemented.');
|
|
36
|
+
},
|
|
37
|
+
createUser(_data) {
|
|
38
|
+
throw new Error('Not implemented.');
|
|
39
|
+
},
|
|
40
|
+
deleteUser(_data) {
|
|
41
|
+
throw new Error('Not implemented.');
|
|
42
|
+
},
|
|
43
|
+
resetExternalId(_data) {
|
|
44
|
+
throw new Error('Not implemented.');
|
|
45
|
+
},
|
|
46
|
+
updateUserById(_id, _user) {
|
|
47
|
+
throw new Error('Not implemented.');
|
|
48
|
+
},
|
|
49
|
+
retrieveUserById(_id) {
|
|
50
|
+
throw new Error('Not implemented.');
|
|
51
|
+
},
|
|
52
|
+
retrieveUserByEmail(_email) {
|
|
53
|
+
throw new Error('Not implemented.');
|
|
54
|
+
},
|
|
55
|
+
retrieveUserByConfirmationToken(_code) {
|
|
56
|
+
throw new Error('Not implemented.');
|
|
57
|
+
},
|
|
58
|
+
retrieveUserByResetPasswordToken(_code) {
|
|
59
|
+
throw new Error('Not implemented.');
|
|
60
|
+
},
|
|
61
|
+
retrieveUserByUsername(_username) {
|
|
62
|
+
throw new Error('Not implemented.');
|
|
63
|
+
},
|
|
64
|
+
retrieveUserByExternalId(_externalId) {
|
|
65
|
+
throw new Error('Not implemented.');
|
|
66
|
+
},
|
|
67
|
+
retrieveUserByPassword(_email, _password) {
|
|
68
|
+
throw new Error('Not implemented.');
|
|
69
|
+
},
|
|
70
|
+
changePassword(_email, _password, _oldPassword) {
|
|
71
|
+
throw new Error('Not implemented.');
|
|
72
|
+
},
|
|
73
|
+
forgotPassword(_email) {
|
|
74
|
+
throw new Error('Not implemented.');
|
|
75
|
+
},
|
|
76
|
+
userConfirmation(_user) {
|
|
77
|
+
throw new Error('Not implemented.');
|
|
78
|
+
},
|
|
79
|
+
resetPassword(_user, _password) {
|
|
80
|
+
throw new Error('Not implemented.');
|
|
81
|
+
},
|
|
82
|
+
blockUserById(_id, _reason) {
|
|
83
|
+
throw new Error('Not implemented.');
|
|
84
|
+
},
|
|
85
|
+
unblockUserById(_data) {
|
|
86
|
+
throw new Error('Not implemented.');
|
|
87
|
+
},
|
|
88
|
+
countQuery(_data) {
|
|
89
|
+
throw new Error('Not implemented.');
|
|
90
|
+
},
|
|
91
|
+
findQuery(_data) {
|
|
92
|
+
throw new Error('Not implemented.');
|
|
93
|
+
},
|
|
94
|
+
disableUserById(_id) {
|
|
95
|
+
throw new Error('Not implemented.');
|
|
96
|
+
},
|
|
97
|
+
saveMfaSecret(_userId, _secret) {
|
|
98
|
+
throw new Error('Not implemented.');
|
|
99
|
+
},
|
|
100
|
+
retrieveMfaSecret(_userId) {
|
|
101
|
+
throw new Error('Not implemented.');
|
|
102
|
+
},
|
|
103
|
+
enableMfa(_userId) {
|
|
104
|
+
throw new Error('Not implemented.');
|
|
105
|
+
},
|
|
106
|
+
disableMfa(_userId) {
|
|
107
|
+
throw new Error('Not implemented.');
|
|
108
|
+
},
|
|
109
|
+
forceDisableMfaForAdmin(_email) {
|
|
110
|
+
throw new Error('Not implemented.');
|
|
111
|
+
}
|
|
36
112
|
};
|
|
37
113
|
export const defaultTokenManager = {
|
|
38
|
-
isImplemented() {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
114
|
+
isImplemented() {
|
|
115
|
+
return false;
|
|
116
|
+
},
|
|
117
|
+
isValidToken(_data) {
|
|
118
|
+
throw new Error('Not implemented.');
|
|
119
|
+
},
|
|
120
|
+
createToken(_data) {
|
|
121
|
+
throw new Error('Not implemented.');
|
|
122
|
+
},
|
|
123
|
+
resetExternalId(_id) {
|
|
124
|
+
throw new Error('Not implemented.');
|
|
125
|
+
},
|
|
126
|
+
updateTokenById(_id, _token) {
|
|
127
|
+
throw new Error('Not implemented.');
|
|
128
|
+
},
|
|
129
|
+
retrieveTokenById(_id) {
|
|
130
|
+
throw new Error('Not implemented.');
|
|
131
|
+
},
|
|
132
|
+
retrieveTokenByExternalId(_id) {
|
|
133
|
+
throw new Error('Not implemented.');
|
|
134
|
+
},
|
|
135
|
+
blockTokenById(_id, _reason) {
|
|
136
|
+
throw new Error('Not implemented.');
|
|
137
|
+
},
|
|
138
|
+
unblockTokenById(_id) {
|
|
139
|
+
throw new Error('Not implemented.');
|
|
140
|
+
},
|
|
141
|
+
countQuery(_data) {
|
|
142
|
+
throw new Error('Not implemented.');
|
|
143
|
+
},
|
|
144
|
+
findQuery(_data) {
|
|
145
|
+
throw new Error('Not implemented.');
|
|
146
|
+
},
|
|
147
|
+
removeTokenById(_id) {
|
|
148
|
+
throw new Error('Not implemented.');
|
|
149
|
+
}
|
|
50
150
|
};
|
|
51
151
|
export const defaultDataBaseManager = {
|
|
52
|
-
isImplemented() {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
152
|
+
isImplemented() {
|
|
153
|
+
return false;
|
|
154
|
+
},
|
|
155
|
+
synchronizeSchemas() {
|
|
156
|
+
throw new Error('Not implemented.');
|
|
157
|
+
},
|
|
158
|
+
retrieveBy(_entityName, _entityId) {
|
|
159
|
+
throw new Error('Not implemented.');
|
|
160
|
+
},
|
|
161
|
+
addChange(_entityName, _entityId, _status, _userId, _contents, _changeEntity) {
|
|
162
|
+
throw new Error('Not implemented.');
|
|
163
|
+
}
|
|
56
164
|
};
|
|
57
165
|
export const defaultMfaManager = {
|
|
58
|
-
generateSetup(_appName, _email) {
|
|
59
|
-
|
|
166
|
+
generateSetup(_appName, _email) {
|
|
167
|
+
throw new Error('Not implemented.');
|
|
168
|
+
},
|
|
169
|
+
verify(_token, _secret) {
|
|
170
|
+
throw new Error('Not implemented.');
|
|
171
|
+
}
|
|
60
172
|
};
|
|
61
173
|
export const defaultTransferManager = {
|
|
62
|
-
isImplemented() {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
174
|
+
isImplemented() {
|
|
175
|
+
return false;
|
|
176
|
+
},
|
|
177
|
+
getPath() {
|
|
178
|
+
throw new Error('Not implemented.');
|
|
179
|
+
},
|
|
180
|
+
getServer() {
|
|
181
|
+
throw new Error('Not implemented.');
|
|
182
|
+
},
|
|
183
|
+
onUploadCreate(_callback) {
|
|
184
|
+
throw new Error('Not implemented.');
|
|
185
|
+
},
|
|
186
|
+
onUploadFinish(_callback) {
|
|
187
|
+
throw new Error('Not implemented.');
|
|
188
|
+
},
|
|
189
|
+
onUploadTerminate(_callback) {
|
|
190
|
+
throw new Error('Not implemented.');
|
|
191
|
+
},
|
|
192
|
+
handle(_req, _res) {
|
|
193
|
+
throw new Error('Not implemented.');
|
|
194
|
+
},
|
|
195
|
+
isValid(_req) {
|
|
196
|
+
throw new Error('Not implemented.');
|
|
197
|
+
}
|
|
70
198
|
};
|
|
71
199
|
//# sourceMappingURL=managers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"managers.js","sourceRoot":"","sources":["../../../lib/defaults/managers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"managers.js","sourceRoot":"","sources":["../../../lib/defaults/managers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onRequest.d.ts","sourceRoot":"","sources":["../../../lib/hooks/onRequest.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"onRequest.d.ts","sourceRoot":"","sources":["../../../lib/hooks/onRequest.ts"],"names":[],"mappings":"yBAoBsB,QAAG,EAAE,UAAK;AAAhC,wBA0JC"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { getParams, getData } from '../util/common.js';
|
|
2
|
-
const { embedded_auth = true } = global.config?.options || {};
|
|
3
2
|
const MFA_SETUP_WHITELIST = ['/auth/mfa/setup', '/auth/mfa/enable', '/auth/mfa/verify', '/auth/logout'];
|
|
4
3
|
const normalizeRoles = (rolesArray) => {
|
|
5
4
|
if (!rolesArray || rolesArray.length === 0) {
|
|
@@ -17,50 +16,6 @@ const normalizeRoles = (rolesArray) => {
|
|
|
17
16
|
export default async (req, reply) => {
|
|
18
17
|
if (log.i)
|
|
19
18
|
req.startedAt = new Date();
|
|
20
|
-
const { multi_tenant } = global.config?.options || {};
|
|
21
|
-
if (multi_tenant?.enabled) {
|
|
22
|
-
let tenantSlug;
|
|
23
|
-
if (multi_tenant.resolver === 'subdomain') {
|
|
24
|
-
const host = req.headers.host || '';
|
|
25
|
-
const parts = host.split('.');
|
|
26
|
-
if (parts.length >= 2) {
|
|
27
|
-
if (parts[0] !== 'www') {
|
|
28
|
-
tenantSlug = parts[0];
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
else if (multi_tenant.resolver === 'header') {
|
|
33
|
-
tenantSlug = req.headers[multi_tenant?.header_key || 'x-tenant-id'];
|
|
34
|
-
}
|
|
35
|
-
else if (multi_tenant.resolver === 'query') {
|
|
36
|
-
tenantSlug = req.query[multi_tenant?.query_key || 'tid'];
|
|
37
|
-
}
|
|
38
|
-
if (!tenantSlug) {
|
|
39
|
-
return reply.code(400).send({ statusCode: 400, error: 'Tenant ID missing', message: 'Tenant ID is required' });
|
|
40
|
-
}
|
|
41
|
-
if (!global.connection) {
|
|
42
|
-
log.error('Multi-tenant enabled but global.connection not found');
|
|
43
|
-
return reply.code(500).send({ statusCode: 500, error: 'Internal Server Error' });
|
|
44
|
-
}
|
|
45
|
-
const tenant = await global.connection.getRepository(global.entity.Tenant).findOneBy({ slug: tenantSlug });
|
|
46
|
-
if (!tenant) {
|
|
47
|
-
return reply
|
|
48
|
-
.code(404)
|
|
49
|
-
.send({ statusCode: 404, error: 'Tenant Not Found', message: `Tenant '${tenantSlug}' not found` });
|
|
50
|
-
}
|
|
51
|
-
if (tenant.status !== 'active') {
|
|
52
|
-
return reply.code(403).send({ statusCode: 403, error: 'Tenant Inactive', message: 'Tenant is not active' });
|
|
53
|
-
}
|
|
54
|
-
const runner = global.connection.createQueryRunner();
|
|
55
|
-
await runner.connect();
|
|
56
|
-
if (!/^[a-z0-9_]+$/i.test(tenant.schema)) {
|
|
57
|
-
await runner.release();
|
|
58
|
-
return reply.code(400).send({ statusCode: 400, error: 'Invalid Schema Name' });
|
|
59
|
-
}
|
|
60
|
-
await runner.query(`SET search_path TO "${tenant.schema}", "public"`);
|
|
61
|
-
req.runner = runner;
|
|
62
|
-
req.tenant = tenant;
|
|
63
|
-
}
|
|
64
19
|
req.data = () => getData(req);
|
|
65
20
|
req.parameters = () => getParams(req);
|
|
66
21
|
if (global.transferPath) {
|
|
@@ -79,6 +34,7 @@ export default async (req, reply) => {
|
|
|
79
34
|
}
|
|
80
35
|
}
|
|
81
36
|
}
|
|
37
|
+
const { embedded_auth = true } = global.config?.options || {};
|
|
82
38
|
if (embedded_auth) {
|
|
83
39
|
req.roles = () => [roles.public.code];
|
|
84
40
|
req.hasRole = (r) => req.roles().includes(r?.code);
|
|
@@ -105,7 +61,14 @@ export default async (req, reply) => {
|
|
|
105
61
|
try {
|
|
106
62
|
const tokenData = reply.server.jwt.verify(bearerToken);
|
|
107
63
|
const { multi_tenant } = global.config?.options || {};
|
|
108
|
-
if (multi_tenant?.enabled &&
|
|
64
|
+
if (multi_tenant?.enabled && cfg.tenantContext !== false) {
|
|
65
|
+
if (!req.tenant || !tokenData.tid) {
|
|
66
|
+
return reply.status(403).send({
|
|
67
|
+
statusCode: 403,
|
|
68
|
+
code: 'TENANT_NOT_FOUND',
|
|
69
|
+
message: 'Token does not belong to this tenant'
|
|
70
|
+
});
|
|
71
|
+
}
|
|
109
72
|
if (tokenData.tid !== req.tenant.id) {
|
|
110
73
|
return reply.status(403).send({
|
|
111
74
|
statusCode: 403,
|
|
@@ -134,7 +97,7 @@ export default async (req, reply) => {
|
|
|
134
97
|
let user = null;
|
|
135
98
|
let token = null;
|
|
136
99
|
if (req.server['userManager']?.isImplemented()) {
|
|
137
|
-
user = await req.server['userManager'].retrieveUserByExternalId(subjectId);
|
|
100
|
+
user = await req.server['userManager'].retrieveUserByExternalId(subjectId, req.db);
|
|
138
101
|
if (user) {
|
|
139
102
|
const isValid = await req.server['userManager'].isValidUser(user);
|
|
140
103
|
if (!isValid) {
|
|
@@ -146,7 +109,7 @@ export default async (req, reply) => {
|
|
|
146
109
|
}
|
|
147
110
|
}
|
|
148
111
|
if (!user && req.server['tokenManager']?.isImplemented()) {
|
|
149
|
-
token = await req.server['tokenManager'].retrieveTokenByExternalId(subjectId);
|
|
112
|
+
token = await req.server['tokenManager'].retrieveTokenByExternalId(subjectId, req.db);
|
|
150
113
|
if (token) {
|
|
151
114
|
const isValid = await req.server['tokenManager'].isValidToken(token);
|
|
152
115
|
if (!isValid) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onRequest.js","sourceRoot":"","sources":["../../../lib/hooks/onRequest.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAGtD,MAAM,
|
|
1
|
+
{"version":3,"file":"onRequest.js","sourceRoot":"","sources":["../../../lib/hooks/onRequest.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../../lib/loader/router.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../../lib/loader/router.ts"],"names":[],"mappings":"AA4RA,wBAAsB,KAAK,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAGtD"}
|
|
@@ -53,6 +53,92 @@ async function loadMiddlewares(base, middlewares = []) {
|
|
|
53
53
|
}
|
|
54
54
|
return midds;
|
|
55
55
|
}
|
|
56
|
+
function processRoute(route, index, file, dir, base, defaultConfig, authMiddlewares, validRoutes) {
|
|
57
|
+
const errors = [];
|
|
58
|
+
const { method: methodCase, path: pathName = '/', handler, roles: rs = [], config = {}, middlewares = [], rateLimit } = route;
|
|
59
|
+
const rsp = !rs.length ? [roles.public] : rs;
|
|
60
|
+
let requiredRoles = [];
|
|
61
|
+
try {
|
|
62
|
+
requiredRoles = rsp.some((r) => r.code === roles.admin.code) ? rsp : [...rsp, roles.admin];
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
if (log.e)
|
|
66
|
+
log.error(`Error in loading roles for ${methodCase} ${pathName} (${handler})`);
|
|
67
|
+
if (log.t)
|
|
68
|
+
log.trace(err);
|
|
69
|
+
config.enable = false;
|
|
70
|
+
}
|
|
71
|
+
const reqAuth = middlewares.some((m) => authMiddlewares.includes(m)) ||
|
|
72
|
+
requiredRoles.every((r) => r.code !== roles.public.code);
|
|
73
|
+
if (!config?.security && reqAuth) {
|
|
74
|
+
config.security = 'bearer';
|
|
75
|
+
}
|
|
76
|
+
const { title = '', description = '', enable = yn(defaultConfig.enable, true), deprecated = yn(defaultConfig.deprecated, false), tenantContext = yn(defaultConfig.tenantContext, true), tags = defaultConfig.tags, version = defaultConfig.version || '', security = defaultConfig.security, query, params, body, response, consumes, rawBody = false } = config || {};
|
|
77
|
+
const endpoint = `${dir}${pathName.replace(/\/+$/, '')}`;
|
|
78
|
+
const method = methodCase.toUpperCase();
|
|
79
|
+
const num = index + 1;
|
|
80
|
+
const handlerParts = handler.split('.');
|
|
81
|
+
if (enable) {
|
|
82
|
+
if (!pathName.startsWith('/'))
|
|
83
|
+
errors.push(`Error in [${file}] bad path [${pathName}] at route n. ${num}`);
|
|
84
|
+
if (!methods.includes(method))
|
|
85
|
+
errors.push(`Error in [${file}] bad method [${method}] at route n. ${num}`);
|
|
86
|
+
if (handlerParts.length !== 2)
|
|
87
|
+
errors.push(`Error in [${file}] bad handler [${handler}] at route n. ${num}`);
|
|
88
|
+
const key = method + endpoint + version;
|
|
89
|
+
if (validRoutes.some((r) => `${r.method}${r.path}${r.doc?.version}` === key)) {
|
|
90
|
+
errors.push(`Error in [${file}] duplicated path [${pathName}] at route n. ${num}`);
|
|
91
|
+
}
|
|
92
|
+
if (errors.length > 0) {
|
|
93
|
+
if (log.e)
|
|
94
|
+
errors.forEach((error) => log.error(error));
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
const toAdd = enable && errors.length === 0;
|
|
98
|
+
if (toAdd) {
|
|
99
|
+
if (log.t)
|
|
100
|
+
log.trace(`* Method [${method}] path ${endpoint} handler ${handler} enabled with ${middlewares?.length || 0} middlewares`);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
if (log.w)
|
|
104
|
+
log.warn(`* Method [${method}] path ${endpoint} handler ${handler} disabled. Skip.`);
|
|
105
|
+
}
|
|
106
|
+
if (toAdd) {
|
|
107
|
+
const doc = {
|
|
108
|
+
summary: title,
|
|
109
|
+
description,
|
|
110
|
+
deprecated,
|
|
111
|
+
tags,
|
|
112
|
+
version,
|
|
113
|
+
security: security === 'bearer' ? [{ Bearer: [] }] : security,
|
|
114
|
+
response
|
|
115
|
+
};
|
|
116
|
+
if (query)
|
|
117
|
+
doc.querystring = query;
|
|
118
|
+
if (params)
|
|
119
|
+
doc.params = params;
|
|
120
|
+
if (body)
|
|
121
|
+
doc.body = body;
|
|
122
|
+
if (consumes)
|
|
123
|
+
doc.consumes = consumes;
|
|
124
|
+
return {
|
|
125
|
+
handler,
|
|
126
|
+
method,
|
|
127
|
+
path: '/' + endpoint,
|
|
128
|
+
middlewares,
|
|
129
|
+
roles: requiredRoles,
|
|
130
|
+
enable,
|
|
131
|
+
tenantContext,
|
|
132
|
+
rawBody,
|
|
133
|
+
rateLimit,
|
|
134
|
+
base,
|
|
135
|
+
file: path.join(base, defaultConfig.controller || 'controller', handlerParts[0]),
|
|
136
|
+
func: handlerParts[1],
|
|
137
|
+
doc: doc
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
56
142
|
async function load() {
|
|
57
143
|
const validRoutes = [];
|
|
58
144
|
const patterns = normalizePatterns(['..', 'api', '**', 'routes.{ts,js}'], ['src', 'api', '**', 'routes.{ts,js}']);
|
|
@@ -73,87 +159,9 @@ async function load() {
|
|
|
73
159
|
if (log.t)
|
|
74
160
|
log.trace(`* Add ${routes.length} routes from ${file}`);
|
|
75
161
|
routes.forEach((route, index) => {
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
let requiredRoles = [];
|
|
80
|
-
try {
|
|
81
|
-
requiredRoles = rsp.some((r) => r.code === roles.admin.code) ? rsp : [...rsp, roles.admin];
|
|
82
|
-
}
|
|
83
|
-
catch (err) {
|
|
84
|
-
if (log.e)
|
|
85
|
-
log.error(`Error in loading roles for ${methodCase} ${pathName} (${handler})`);
|
|
86
|
-
if (log.t)
|
|
87
|
-
log.trace(err);
|
|
88
|
-
config.enable = false;
|
|
89
|
-
}
|
|
90
|
-
const reqAuth = middlewares.some((m) => authMiddlewares.includes(m)) ||
|
|
91
|
-
requiredRoles.every((r) => r.code !== roles.public.code);
|
|
92
|
-
if (!config?.security && reqAuth) {
|
|
93
|
-
config.security = 'bearer';
|
|
94
|
-
}
|
|
95
|
-
const { title = '', description = '', enable = yn(defaultConfig.enable, true), deprecated = yn(defaultConfig.deprecated, false), tags = defaultConfig.tags, version = defaultConfig.version || '', security = defaultConfig.security, query, params, body, response, consumes, rawBody = false } = config || {};
|
|
96
|
-
const endpoint = `${dir}${pathName.replace(/\/+$/, '')}`;
|
|
97
|
-
const method = methodCase.toUpperCase();
|
|
98
|
-
const num = index + 1;
|
|
99
|
-
const handlerParts = handler.split('.');
|
|
100
|
-
if (enable) {
|
|
101
|
-
if (!pathName.startsWith('/'))
|
|
102
|
-
errors.push(`Error in [${file}] bad path [${pathName}] at route n. ${num}`);
|
|
103
|
-
if (!methods.includes(method))
|
|
104
|
-
errors.push(`Error in [${file}] bad method [${method}] at route n. ${num}`);
|
|
105
|
-
if (handlerParts.length !== 2)
|
|
106
|
-
errors.push(`Error in [${file}] bad handler [${handler}] at route n. ${num}`);
|
|
107
|
-
const key = method + endpoint + version;
|
|
108
|
-
if (validRoutes.some((r) => `${r.method}${r.path}${r.doc?.version}` === key)) {
|
|
109
|
-
errors.push(`Error in [${file}] duplicated path [${pathName}] at route n. ${num}`);
|
|
110
|
-
}
|
|
111
|
-
if (errors.length > 0) {
|
|
112
|
-
if (log.e)
|
|
113
|
-
errors.forEach((error) => log.error(error));
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
const toAdd = enable && errors.length === 0;
|
|
117
|
-
if (toAdd) {
|
|
118
|
-
if (log.t)
|
|
119
|
-
log.trace(`* Method [${method}] path ${endpoint} handler ${handler} enabled with ${middlewares?.length || 0} middlewares`);
|
|
120
|
-
}
|
|
121
|
-
else {
|
|
122
|
-
if (log.w)
|
|
123
|
-
log.warn(`* Method [${method}] path ${endpoint} handler ${handler} disabled. Skip.`);
|
|
124
|
-
}
|
|
125
|
-
if (toAdd) {
|
|
126
|
-
const doc = {
|
|
127
|
-
summary: title,
|
|
128
|
-
description,
|
|
129
|
-
deprecated,
|
|
130
|
-
tags,
|
|
131
|
-
version,
|
|
132
|
-
security: security === 'bearer' ? [{ Bearer: [] }] : security,
|
|
133
|
-
response
|
|
134
|
-
};
|
|
135
|
-
if (query)
|
|
136
|
-
doc.querystring = query;
|
|
137
|
-
if (params)
|
|
138
|
-
doc.params = params;
|
|
139
|
-
if (body)
|
|
140
|
-
doc.body = body;
|
|
141
|
-
if (consumes)
|
|
142
|
-
doc.consumes = consumes;
|
|
143
|
-
validRoutes.push({
|
|
144
|
-
handler,
|
|
145
|
-
method,
|
|
146
|
-
path: '/' + endpoint,
|
|
147
|
-
middlewares,
|
|
148
|
-
roles: requiredRoles,
|
|
149
|
-
enable,
|
|
150
|
-
rawBody,
|
|
151
|
-
rateLimit,
|
|
152
|
-
base,
|
|
153
|
-
file: path.join(base, defaultConfig.controller || 'controller', handlerParts[0]),
|
|
154
|
-
func: handlerParts[1],
|
|
155
|
-
doc: doc
|
|
156
|
-
});
|
|
162
|
+
const configuredRoute = processRoute(route, index, file, dir, base, defaultConfig, authMiddlewares, validRoutes);
|
|
163
|
+
if (configuredRoute) {
|
|
164
|
+
validRoutes.push(configuredRoute);
|
|
157
165
|
}
|
|
158
166
|
});
|
|
159
167
|
}
|
|
@@ -171,7 +179,7 @@ async function applyRoutes(server, routes) {
|
|
|
171
179
|
let countRoutes = 0;
|
|
172
180
|
for (const route of routes) {
|
|
173
181
|
if (route?.enable) {
|
|
174
|
-
const { handler, method, path, middlewares, roles, rawBody, rateLimit, base, file, func, doc } = route;
|
|
182
|
+
const { handler, method, path, middlewares, roles, rawBody, rateLimit, base, file, func, doc, tenantContext } = route;
|
|
175
183
|
if (log.d)
|
|
176
184
|
log.debug(`* Add path ${method} ${path} on handle ${handler}`);
|
|
177
185
|
const midds = await loadMiddlewares(base, middlewares);
|
|
@@ -183,7 +191,8 @@ async function applyRoutes(server, routes) {
|
|
|
183
191
|
config: {
|
|
184
192
|
requiredRoles: roles || [],
|
|
185
193
|
rawBody: rawBody || false,
|
|
186
|
-
rateLimit: rateLimit || undefined
|
|
194
|
+
rateLimit: rateLimit || undefined,
|
|
195
|
+
tenantContext: tenantContext
|
|
187
196
|
},
|
|
188
197
|
handler: async function (req, reply) {
|
|
189
198
|
let module;
|