@drax/identity-back 0.11.5 → 0.12.2
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/dist/controllers/RoleController.js +8 -39
- package/dist/controllers/TenantController.js +1 -28
- package/dist/controllers/UserApiKeyController.js +3 -3
- package/dist/controllers/UserController.js +48 -209
- package/dist/errors/BadCredentialsError.js +12 -0
- package/dist/factory/RoleServiceFactory.js +1 -0
- package/dist/factory/TenantServiceFactory.js +1 -0
- package/dist/factory/UserApiKeyServiceFactory.js +5 -4
- package/dist/factory/UserServiceFactory.js +1 -0
- package/dist/graphql/resolvers/role.resolvers.js +2 -2
- package/dist/graphql/resolvers/tenant.resolvers.js +2 -2
- package/dist/graphql/resolvers/user-api-key.resolvers.js +2 -2
- package/dist/graphql/resolvers/user.resolvers.js +1 -1
- package/dist/index.js +6 -0
- package/dist/middleware/apiKeyMiddleware.js +2 -2
- package/dist/models/RoleModel.js +10 -7
- package/dist/models/TenantModel.js +11 -8
- package/dist/models/UserApiKeyModel.js +10 -7
- package/dist/models/UserGroupModel.js +7 -7
- package/dist/models/UserModel.js +10 -8
- package/dist/rbac/Rbac.js +10 -8
- package/dist/repository/mongo/RoleMongoRepository.js +20 -65
- package/dist/repository/mongo/TenantMongoRepository.js +18 -66
- package/dist/repository/mongo/UserApiKeyMongoRepository.js +29 -47
- package/dist/repository/mongo/UserMongoRepository.js +56 -85
- package/dist/repository/sqlite/RoleSqliteRepository.js +30 -115
- package/dist/repository/sqlite/TenantSqliteRepository.js +15 -105
- package/dist/repository/sqlite/UserApiKeySqliteRepository.js +42 -117
- package/dist/repository/sqlite/UserSqliteRepository.js +49 -130
- package/dist/routes/RoleRoutes.js +35 -10
- package/dist/routes/TenantRoutes.js +18 -9
- package/dist/routes/UserApiKeyRoutes.js +20 -4
- package/dist/routes/UserRoutes.js +92 -17
- package/dist/schemas/LoginSchema.js +9 -0
- package/dist/schemas/PasswordSchema.js +12 -0
- package/dist/schemas/RegisterSchema.js +19 -0
- package/dist/schemas/RoleSchema.js +23 -0
- package/dist/schemas/TenantSchema.js +13 -0
- package/dist/schemas/UserApiKeySchema.js +14 -0
- package/dist/schemas/UserSchema.js +39 -0
- package/dist/services/PermissionService.js +5 -5
- package/dist/services/RoleService.js +6 -6
- package/dist/services/TenantService.js +6 -6
- package/dist/services/UserApiKeyService.js +5 -5
- package/dist/services/UserService.js +14 -14
- package/dist/setup/CreateOrUpdateRole.js +5 -2
- package/dist/setup/CreateUserIfNotExist.js +3 -1
- package/dist/setup/RecoveryUserPassword.js +1 -1
- package/dist/zod/EndpointZod.js +9 -0
- package/dist/zod/TenantSchema.js +12 -0
- package/dist/zod/TenantZod.js +5 -3
- package/dist/zod/UserApiKeyZod.js +7 -3
- package/package.json +10 -9
- package/src/controllers/RoleController.ts +8 -36
- package/src/controllers/TenantController.ts +2 -25
- package/src/controllers/UserApiKeyController.ts +3 -3
- package/src/controllers/UserController.ts +50 -183
- package/src/errors/BadCredentialsError.ts +18 -1
- package/src/factory/RoleServiceFactory.ts +1 -0
- package/src/factory/TenantServiceFactory.ts +1 -0
- package/src/factory/UserApiKeyServiceFactory.ts +5 -4
- package/src/factory/UserServiceFactory.ts +1 -0
- package/src/graphql/resolvers/role.resolvers.ts +3 -2
- package/src/graphql/resolvers/tenant.resolvers.ts +3 -2
- package/src/graphql/resolvers/user-api-key.resolvers.ts +3 -2
- package/src/graphql/resolvers/user.resolvers.ts +2 -1
- package/src/index.ts +16 -0
- package/src/interfaces/ITenantRepository.ts +2 -2
- package/src/interfaces/IUserApiKeyRepository.ts +2 -2
- package/src/interfaces/IUserRepository.ts +3 -2
- package/src/middleware/apiKeyMiddleware.ts +2 -2
- package/src/models/RoleModel.ts +12 -7
- package/src/models/TenantModel.ts +13 -8
- package/src/models/UserApiKeyModel.ts +12 -7
- package/src/models/UserGroupModel.ts +7 -7
- package/src/models/UserModel.ts +10 -8
- package/src/rbac/Rbac.ts +12 -9
- package/src/repository/mongo/RoleMongoRepository.ts +23 -94
- package/src/repository/mongo/TenantMongoRepository.ts +19 -98
- package/src/repository/mongo/UserApiKeyMongoRepository.ts +31 -56
- package/src/repository/mongo/UserMongoRepository.ts +71 -130
- package/src/repository/sqlite/RoleSqliteRepository.ts +37 -146
- package/src/repository/sqlite/TenantSqliteRepository.ts +16 -156
- package/src/repository/sqlite/UserApiKeySqliteRepository.ts +46 -151
- package/src/repository/sqlite/UserSqliteRepository.ts +59 -173
- package/src/routes/RoleRoutes.ts +35 -12
- package/src/routes/TenantRoutes.ts +25 -9
- package/src/routes/UserApiKeyRoutes.ts +23 -7
- package/src/routes/UserRoutes.ts +117 -34
- package/src/schemas/LoginSchema.ts +12 -0
- package/src/schemas/PasswordSchema.ts +16 -0
- package/src/{zod/UserZod.ts → schemas/RegisterSchema.ts} +7 -10
- package/src/schemas/RoleSchema.ts +29 -0
- package/src/schemas/TenantSchema.ts +22 -0
- package/src/{zod/UserApiKeyZod.ts → schemas/UserApiKeySchema.ts} +8 -3
- package/src/schemas/UserSchema.ts +57 -0
- package/src/services/PermissionService.ts +6 -5
- package/src/services/RoleService.ts +6 -6
- package/src/services/TenantService.ts +10 -10
- package/src/services/UserApiKeyService.ts +5 -5
- package/src/services/UserService.ts +15 -16
- package/src/setup/CreateOrUpdateRole.ts +7 -4
- package/src/setup/CreateUserIfNotExist.ts +5 -3
- package/src/setup/RecoveryUserPassword.ts +1 -1
- package/test/data-obj/apikey/root-mongo-user-apikey.ts +2 -1
- package/test/data-obj/roles/admin-sqlite-role.ts +2 -2
- package/test/data-obj/roles/operator-sqlite-role.ts +1 -1
- package/test/data-obj/tenants/company-sqlite-tenant.ts +6 -0
- package/test/data-obj/users/root-sqlite-user.ts +2 -2
- package/test/initializers/RoleSqliteInitializer.ts +1 -1
- package/test/repository/mongo/role-mongo-repository.test.ts +3 -3
- package/test/repository/mongo/user-apikey-mongo-repository.test.ts +5 -4
- package/test/repository/mongo/user-mongo-repository.test.ts +4 -4
- package/test/repository/sqlite/role-sqlite-repository.test.ts +21 -9
- package/test/repository/sqlite/tenant-sqlite-repository.test.ts +74 -0
- package/test/repository/sqlite/user-sqlite-repository.test.ts +15 -9
- package/test/routes/data/admin-role.ts +10 -0
- package/test/routes/data/root-user.ts +13 -0
- package/test/routes/helpers/CreateRootUserAndAdminRole.ts +17 -0
- package/test/routes/helpers/FastifyTestServerFactory.ts +34 -0
- package/test/routes/helpers/InitializePermissions.ts +23 -0
- package/test/routes/helpers/SetupIdentityDrax.ts +22 -0
- package/test/routes/tenant-route.test.ts +336 -0
- package/test/routes/user-route.test.ts +186 -0
- package/test/schemas/lab-schema.test.ts +110 -0
- package/test/service/mock-service.test.ts +3 -3
- package/test/service/role-service.test.ts +3 -3
- package/test/service/user-service.test.ts +16 -25
- package/test.db +0 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/types/controllers/RoleController.d.ts +0 -1
- package/types/controllers/RoleController.d.ts.map +1 -1
- package/types/controllers/TenantController.d.ts +0 -1
- package/types/controllers/TenantController.d.ts.map +1 -1
- package/types/controllers/UserController.d.ts +11 -4
- package/types/controllers/UserController.d.ts.map +1 -1
- package/types/errors/BadCredentialsError.d.ts +9 -1
- package/types/errors/BadCredentialsError.d.ts.map +1 -1
- package/types/factory/RoleServiceFactory.d.ts.map +1 -1
- package/types/factory/TenantServiceFactory.d.ts.map +1 -1
- package/types/factory/UserApiKeyServiceFactory.d.ts.map +1 -1
- package/types/factory/UserServiceFactory.d.ts.map +1 -1
- package/types/graphql/resolvers/role.resolvers.d.ts +3 -9
- package/types/graphql/resolvers/role.resolvers.d.ts.map +1 -1
- package/types/graphql/resolvers/tenant.resolvers.d.ts +3 -9
- package/types/graphql/resolvers/tenant.resolvers.d.ts.map +1 -1
- package/types/graphql/resolvers/user-api-key.resolvers.d.ts +3 -9
- package/types/graphql/resolvers/user-api-key.resolvers.d.ts.map +1 -1
- package/types/graphql/resolvers/user.resolvers.d.ts +3 -9
- package/types/graphql/resolvers/user.resolvers.d.ts.map +1 -1
- package/types/index.d.ts +5 -1
- package/types/index.d.ts.map +1 -1
- package/types/interfaces/ITenantRepository.d.ts +2 -2
- package/types/interfaces/ITenantRepository.d.ts.map +1 -1
- package/types/interfaces/IUserApiKeyRepository.d.ts +2 -2
- package/types/interfaces/IUserApiKeyRepository.d.ts.map +1 -1
- package/types/interfaces/IUserRepository.d.ts +3 -2
- package/types/interfaces/IUserRepository.d.ts.map +1 -1
- package/types/models/RoleModel.d.ts +7 -7
- package/types/models/RoleModel.d.ts.map +1 -1
- package/types/models/TenantModel.d.ts +7 -7
- package/types/models/TenantModel.d.ts.map +1 -1
- package/types/models/UserApiKeyModel.d.ts +7 -7
- package/types/models/UserApiKeyModel.d.ts.map +1 -1
- package/types/models/UserGroupModel.d.ts +2 -2
- package/types/models/UserGroupModel.d.ts.map +1 -1
- package/types/models/UserModel.d.ts +7 -7
- package/types/models/UserModel.d.ts.map +1 -1
- package/types/rbac/Rbac.d.ts +1 -1
- package/types/rbac/Rbac.d.ts.map +1 -1
- package/types/repository/mongo/RoleMongoRepository.d.ts +9 -11
- package/types/repository/mongo/RoleMongoRepository.d.ts.map +1 -1
- package/types/repository/mongo/TenantMongoRepository.d.ts +8 -11
- package/types/repository/mongo/TenantMongoRepository.d.ts.map +1 -1
- package/types/repository/mongo/UserApiKeyMongoRepository.d.ts +12 -5
- package/types/repository/mongo/UserApiKeyMongoRepository.d.ts.map +1 -1
- package/types/repository/mongo/UserMongoRepository.d.ts +11 -12
- package/types/repository/mongo/UserMongoRepository.d.ts.map +1 -1
- package/types/repository/sqlite/RoleSqliteRepository.d.ts +14 -14
- package/types/repository/sqlite/RoleSqliteRepository.d.ts.map +1 -1
- package/types/repository/sqlite/TenantSqliteRepository.d.ts +12 -14
- package/types/repository/sqlite/TenantSqliteRepository.d.ts.map +1 -1
- package/types/repository/sqlite/UserApiKeySqliteRepository.d.ts +15 -11
- package/types/repository/sqlite/UserApiKeySqliteRepository.d.ts.map +1 -1
- package/types/repository/sqlite/UserSqliteRepository.d.ts +15 -12
- package/types/repository/sqlite/UserSqliteRepository.d.ts.map +1 -1
- package/types/routes/RoleRoutes.d.ts.map +1 -1
- package/types/routes/TenantRoutes.d.ts.map +1 -1
- package/types/routes/UserApiKeyRoutes.d.ts.map +1 -1
- package/types/routes/UserRoutes.d.ts.map +1 -1
- package/types/schemas/LoginSchema.d.ts +20 -0
- package/types/schemas/LoginSchema.d.ts.map +1 -0
- package/types/schemas/PasswordSchema.d.ts +27 -0
- package/types/schemas/PasswordSchema.d.ts.map +1 -0
- package/types/schemas/RegisterSchema.d.ts +32 -0
- package/types/schemas/RegisterSchema.d.ts.map +1 -0
- package/types/schemas/RoleSchema.d.ts +67 -0
- package/types/schemas/RoleSchema.d.ts.map +1 -0
- package/types/schemas/TenantSchema.d.ts +29 -0
- package/types/schemas/TenantSchema.d.ts.map +1 -0
- package/types/schemas/UserApiKeySchema.d.ts +39 -0
- package/types/schemas/UserApiKeySchema.d.ts.map +1 -0
- package/types/schemas/UserSchema.d.ts +161 -0
- package/types/schemas/UserSchema.d.ts.map +1 -0
- package/types/services/PermissionService.d.ts +1 -0
- package/types/services/PermissionService.d.ts.map +1 -1
- package/types/services/TenantService.d.ts +3 -3
- package/types/services/TenantService.d.ts.map +1 -1
- package/types/services/UserService.d.ts.map +1 -1
- package/types/setup/CreateOrUpdateRole.d.ts +2 -2
- package/types/setup/CreateOrUpdateRole.d.ts.map +1 -1
- package/types/setup/CreateUserIfNotExist.d.ts +2 -2
- package/types/setup/CreateUserIfNotExist.d.ts.map +1 -1
- package/types/zod/EndpointZod.d.ts +20 -0
- package/types/zod/EndpointZod.d.ts.map +1 -0
- package/types/zod/TenantSchema.d.ts +26 -0
- package/types/zod/TenantSchema.d.ts.map +1 -0
- package/types/zod/TenantZod.d.ts +13 -3
- package/types/zod/TenantZod.d.ts.map +1 -1
- package/types/zod/UserApiKeyZod.d.ts +23 -3
- package/types/zod/UserApiKeyZod.d.ts.map +1 -1
- package/types/zod/UserZod.d.ts +6 -6
- package/src/zod/RoleZod.ts +0 -14
- package/src/zod/TenantZod.ts +0 -14
|
@@ -5,10 +5,8 @@ import {
|
|
|
5
5
|
CommonConfig,
|
|
6
6
|
DraxConfig,
|
|
7
7
|
StoreManager,
|
|
8
|
-
UploadFileError,
|
|
9
8
|
ValidationError,
|
|
10
9
|
UnauthorizedError,
|
|
11
|
-
SecuritySensitiveError
|
|
12
10
|
} from "@drax/common-back";
|
|
13
11
|
|
|
14
12
|
import UserServiceFactory from "../factory/UserServiceFactory.js";
|
|
@@ -19,6 +17,7 @@ import BadCredentialsError from "../errors/BadCredentialsError.js";
|
|
|
19
17
|
import {join} from "path";
|
|
20
18
|
import {IdentityConfig} from "../config/IdentityConfig.js";
|
|
21
19
|
import UserEmailService from "../services/UserEmailService.js";
|
|
20
|
+
import {IDraxFieldFilter} from "@drax/crud-share";
|
|
22
21
|
|
|
23
22
|
const BASE_FILE_DIR = DraxConfig.getOrLoad(CommonConfig.FileDir) || 'files';
|
|
24
23
|
const AVATAR_DIR = DraxConfig.getOrLoad(IdentityConfig.AvatarDir) || 'avatar';
|
|
@@ -42,8 +41,8 @@ class UserController extends AbstractFastifyController<IUser, IUserCreate, IUser
|
|
|
42
41
|
} catch (e) {
|
|
43
42
|
console.error('/api/auth error', e)
|
|
44
43
|
if (e instanceof BadCredentialsError) {
|
|
45
|
-
reply.code(
|
|
46
|
-
reply.send(
|
|
44
|
+
reply.code(e.statusCode)
|
|
45
|
+
reply.send(e.body)
|
|
47
46
|
}
|
|
48
47
|
reply.code(500)
|
|
49
48
|
reply.send({error: 'error.server'})
|
|
@@ -54,7 +53,7 @@ class UserController extends AbstractFastifyController<IUser, IUserCreate, IUser
|
|
|
54
53
|
try {
|
|
55
54
|
if (request.authUser) {
|
|
56
55
|
const userService = UserServiceFactory()
|
|
57
|
-
let user = await userService.findById(request.
|
|
56
|
+
let user = await userService.findById(request.rbac.userId)
|
|
58
57
|
user.password = undefined
|
|
59
58
|
delete user.password
|
|
60
59
|
return user
|
|
@@ -63,16 +62,7 @@ class UserController extends AbstractFastifyController<IUser, IUserCreate, IUser
|
|
|
63
62
|
|
|
64
63
|
}
|
|
65
64
|
} catch (e) {
|
|
66
|
-
|
|
67
|
-
reply.code(401)
|
|
68
|
-
reply.send({error: "Unauthorized"})
|
|
69
|
-
} else if (e instanceof UnauthorizedError) {
|
|
70
|
-
reply.statusCode = e.statusCode
|
|
71
|
-
reply.send({error: e.message})
|
|
72
|
-
} else {
|
|
73
|
-
reply.statusCode = 500
|
|
74
|
-
reply.send({error: 'error.server'})
|
|
75
|
-
}
|
|
65
|
+
this.handleError(e,reply)
|
|
76
66
|
}
|
|
77
67
|
}
|
|
78
68
|
|
|
@@ -85,7 +75,7 @@ class UserController extends AbstractFastifyController<IUser, IUserCreate, IUser
|
|
|
85
75
|
const order = request.query.order
|
|
86
76
|
const search = request.query.search
|
|
87
77
|
const userService = UserServiceFactory()
|
|
88
|
-
const filters =
|
|
78
|
+
const filters: IDraxFieldFilter[] = this.parseFilters(request.query.filters)
|
|
89
79
|
if (request.rbac.getAuthUser.tenantId) {
|
|
90
80
|
filters.push({field: 'tenant', operator: 'eq', value: request.rbac.getAuthUser.tenantId})
|
|
91
81
|
}
|
|
@@ -96,16 +86,7 @@ class UserController extends AbstractFastifyController<IUser, IUserCreate, IUser
|
|
|
96
86
|
}
|
|
97
87
|
return paginateResult
|
|
98
88
|
} catch (e) {
|
|
99
|
-
|
|
100
|
-
reply.statusCode = e.statusCode
|
|
101
|
-
reply.send({error: e.message, inputErrors: e.errors})
|
|
102
|
-
} else if (e instanceof UnauthorizedError) {
|
|
103
|
-
reply.statusCode = e.statusCode
|
|
104
|
-
reply.send({error: e.message})
|
|
105
|
-
} else {
|
|
106
|
-
reply.statusCode = 500
|
|
107
|
-
reply.send({error: 'error.server'})
|
|
108
|
-
}
|
|
89
|
+
this.handleError(e,reply)
|
|
109
90
|
}
|
|
110
91
|
}
|
|
111
92
|
|
|
@@ -121,17 +102,7 @@ class UserController extends AbstractFastifyController<IUser, IUserCreate, IUser
|
|
|
121
102
|
let item = await this.service.search(search, 1000, filters)
|
|
122
103
|
return item
|
|
123
104
|
} catch (e) {
|
|
124
|
-
|
|
125
|
-
if (e instanceof ValidationError) {
|
|
126
|
-
reply.statusCode = e.statusCode
|
|
127
|
-
reply.send({error: e.message, inputErrors: e.errors})
|
|
128
|
-
} else if (e instanceof UnauthorizedError) {
|
|
129
|
-
reply.statusCode = e.statusCode
|
|
130
|
-
reply.send({error: e.message})
|
|
131
|
-
} else {
|
|
132
|
-
reply.statusCode = 500
|
|
133
|
-
reply.send({error: 'INTERNAL_SERVER_ERROR'})
|
|
134
|
-
}
|
|
105
|
+
this.handleError(e,reply)
|
|
135
106
|
}
|
|
136
107
|
}
|
|
137
108
|
|
|
@@ -158,28 +129,25 @@ class UserController extends AbstractFastifyController<IUser, IUserCreate, IUser
|
|
|
158
129
|
payload.tenant = null
|
|
159
130
|
}
|
|
160
131
|
|
|
161
|
-
payload.role = role.
|
|
132
|
+
payload.role = role._id.toString()
|
|
162
133
|
payload.origin ??= 'Registry'
|
|
163
134
|
|
|
164
135
|
const userService = UserServiceFactory()
|
|
165
136
|
let user = await userService.register(payload)
|
|
166
137
|
|
|
167
|
-
|
|
168
|
-
|
|
138
|
+
if(user){
|
|
139
|
+
//SEND EMAIL FOR EMAIL VERIFICATION
|
|
140
|
+
await UserEmailService.emailVerifyCode(user.emailCode, user.email)
|
|
169
141
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
reply.statusCode = e.statusCode
|
|
175
|
-
reply.send({error: e.message, inputErrors: e.errors})
|
|
176
|
-
} else if (e instanceof UnauthorizedError) {
|
|
177
|
-
reply.statusCode = e.statusCode
|
|
178
|
-
reply.send({error: e.message})
|
|
179
|
-
} else {
|
|
180
|
-
reply.statusCode = 500
|
|
181
|
-
reply.send({error: 'error.server'})
|
|
142
|
+
return {
|
|
143
|
+
success: true,
|
|
144
|
+
message: 'User registered successfully.'
|
|
145
|
+
}
|
|
182
146
|
}
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
} catch (e) {
|
|
150
|
+
this.handleError(e,reply)
|
|
183
151
|
}
|
|
184
152
|
}
|
|
185
153
|
|
|
@@ -193,13 +161,7 @@ class UserController extends AbstractFastifyController<IUser, IUserCreate, IUser
|
|
|
193
161
|
reply.header('Content-Type', 'text/html; charset=utf-8').send(html)
|
|
194
162
|
}
|
|
195
163
|
} catch (e) {
|
|
196
|
-
|
|
197
|
-
if (e instanceof ValidationError) {
|
|
198
|
-
reply.statusCode = e.statusCode
|
|
199
|
-
reply.send({error: e.message, inputErrors: e.errors})
|
|
200
|
-
}
|
|
201
|
-
reply.code(500)
|
|
202
|
-
reply.send({error: 'error.server'})
|
|
164
|
+
this.handleError(e,reply)
|
|
203
165
|
}
|
|
204
166
|
}
|
|
205
167
|
|
|
@@ -209,13 +171,7 @@ class UserController extends AbstractFastifyController<IUser, IUserCreate, IUser
|
|
|
209
171
|
const userService = UserServiceFactory()
|
|
210
172
|
return await userService.verifyPhone(phoneCode)
|
|
211
173
|
} catch (e) {
|
|
212
|
-
|
|
213
|
-
if (e instanceof ValidationError) {
|
|
214
|
-
reply.statusCode = e.statusCode
|
|
215
|
-
reply.send({error: e.message, inputErrors: e.errors})
|
|
216
|
-
}
|
|
217
|
-
reply.code(500)
|
|
218
|
-
reply.send({error: 'error.server'})
|
|
174
|
+
this.handleError(e,reply)
|
|
219
175
|
}
|
|
220
176
|
}
|
|
221
177
|
|
|
@@ -224,13 +180,7 @@ class UserController extends AbstractFastifyController<IUser, IUserCreate, IUser
|
|
|
224
180
|
request.rbac.assertPermission(UserPermissions.Create)
|
|
225
181
|
const payload = request.body
|
|
226
182
|
|
|
227
|
-
|
|
228
|
-
const role = await roleService.findById(payload.role)
|
|
229
|
-
if (!role) {
|
|
230
|
-
throw new ValidationError([{field: 'role', reason: 'Role not found'}])
|
|
231
|
-
} else if (role.name === 'Admin') {
|
|
232
|
-
payload.tenant = null
|
|
233
|
-
} else if (request.rbac.getAuthUser.tenantId) {
|
|
183
|
+
if (request.rbac.getAuthUser.tenantId) {
|
|
234
184
|
payload.tenant = request.rbac.getAuthUser.tenantId
|
|
235
185
|
}
|
|
236
186
|
|
|
@@ -240,17 +190,7 @@ class UserController extends AbstractFastifyController<IUser, IUserCreate, IUser
|
|
|
240
190
|
let user = await userService.create(payload)
|
|
241
191
|
return user
|
|
242
192
|
} catch (e) {
|
|
243
|
-
|
|
244
|
-
if (e instanceof ValidationError) {
|
|
245
|
-
reply.statusCode = e.statusCode
|
|
246
|
-
reply.send({error: e.message, inputErrors: e.errors})
|
|
247
|
-
} else if (e instanceof UnauthorizedError) {
|
|
248
|
-
reply.statusCode = e.statusCode
|
|
249
|
-
reply.send({error: e.message})
|
|
250
|
-
} else {
|
|
251
|
-
reply.statusCode = 500
|
|
252
|
-
reply.send({error: 'error.server'})
|
|
253
|
-
}
|
|
193
|
+
this.handleError(e,reply)
|
|
254
194
|
}
|
|
255
195
|
}
|
|
256
196
|
|
|
@@ -260,14 +200,7 @@ class UserController extends AbstractFastifyController<IUser, IUserCreate, IUser
|
|
|
260
200
|
const id = request.params.id
|
|
261
201
|
const payload = request.body
|
|
262
202
|
|
|
263
|
-
|
|
264
|
-
const roleService = RoleServiceFactory()
|
|
265
|
-
const role = await roleService.findById(payload.role)
|
|
266
|
-
if (!role) {
|
|
267
|
-
throw new ValidationError([{field: 'role', reason: 'Role not found'}])
|
|
268
|
-
} else if (role.name === 'Admin') {
|
|
269
|
-
payload.tenant = null
|
|
270
|
-
} else if (request.rbac.getAuthUser.tenantId) {
|
|
203
|
+
if (request.rbac.getAuthUser.tenantId) {
|
|
271
204
|
payload.tenant = request.rbac.getAuthUser.tenantId
|
|
272
205
|
}
|
|
273
206
|
|
|
@@ -275,21 +208,7 @@ class UserController extends AbstractFastifyController<IUser, IUserCreate, IUser
|
|
|
275
208
|
let user = await userService.update(id, payload)
|
|
276
209
|
return user
|
|
277
210
|
} catch (e) {
|
|
278
|
-
|
|
279
|
-
if (e instanceof ValidationError) {
|
|
280
|
-
reply.statusCode = e.statusCode
|
|
281
|
-
reply.send({error: e.message, inputErrors: e.errors})
|
|
282
|
-
}
|
|
283
|
-
if (e instanceof UnauthorizedError) {
|
|
284
|
-
reply.statusCode = e.statusCode
|
|
285
|
-
reply.send({error: e.message})
|
|
286
|
-
} else if (e instanceof UnauthorizedError) {
|
|
287
|
-
reply.statusCode = e.statusCode
|
|
288
|
-
reply.send({error: e.message})
|
|
289
|
-
} else {
|
|
290
|
-
reply.statusCode = 500
|
|
291
|
-
reply.send({error: 'error.server'})
|
|
292
|
-
}
|
|
211
|
+
this.handleError(e,reply)
|
|
293
212
|
}
|
|
294
213
|
}
|
|
295
214
|
|
|
@@ -300,22 +219,22 @@ class UserController extends AbstractFastifyController<IUser, IUserCreate, IUser
|
|
|
300
219
|
const userService = UserServiceFactory()
|
|
301
220
|
let r: boolean = await userService.delete(id)
|
|
302
221
|
if (r) {
|
|
303
|
-
reply.send({
|
|
222
|
+
reply.send({
|
|
223
|
+
id: id,
|
|
224
|
+
message: 'Item deleted successfully',
|
|
225
|
+
deleted: true,
|
|
226
|
+
deletedAt: new Date(),
|
|
227
|
+
})
|
|
304
228
|
} else {
|
|
305
|
-
reply.
|
|
229
|
+
reply.send({
|
|
230
|
+
id: id,
|
|
231
|
+
message: 'Item not deleted',
|
|
232
|
+
deleted: false,
|
|
233
|
+
deletedAt: new Date(),
|
|
234
|
+
})
|
|
306
235
|
}
|
|
307
236
|
} catch (e) {
|
|
308
|
-
|
|
309
|
-
if (e instanceof ValidationError) {
|
|
310
|
-
reply.statusCode = e.statusCode
|
|
311
|
-
reply.send({error: e.message, inputErrors: e.errors})
|
|
312
|
-
} else if (e instanceof UnauthorizedError) {
|
|
313
|
-
reply.statusCode = e.statusCode
|
|
314
|
-
reply.send({error: e.message})
|
|
315
|
-
} else {
|
|
316
|
-
reply.statusCode = 500
|
|
317
|
-
reply.send({error: 'error.server'})
|
|
318
|
-
}
|
|
237
|
+
this.handleError(e,reply)
|
|
319
238
|
}
|
|
320
239
|
}
|
|
321
240
|
|
|
@@ -341,17 +260,7 @@ class UserController extends AbstractFastifyController<IUser, IUserCreate, IUser
|
|
|
341
260
|
reply.send({message})
|
|
342
261
|
|
|
343
262
|
} catch (e) {
|
|
344
|
-
|
|
345
|
-
if (e instanceof ValidationError) {
|
|
346
|
-
reply.statusCode = e.statusCode
|
|
347
|
-
reply.send({error: e.message, inputErrors: e.errors})
|
|
348
|
-
}else if (e instanceof SecuritySensitiveError) {
|
|
349
|
-
reply.statusCode = e.statusCode
|
|
350
|
-
reply.send({message})
|
|
351
|
-
} else {
|
|
352
|
-
reply.statusCode = 500
|
|
353
|
-
reply.send({error: 'error.server'})
|
|
354
|
-
}
|
|
263
|
+
this.handleError(e,reply)
|
|
355
264
|
}
|
|
356
265
|
}
|
|
357
266
|
|
|
@@ -379,14 +288,7 @@ class UserController extends AbstractFastifyController<IUser, IUserCreate, IUser
|
|
|
379
288
|
}
|
|
380
289
|
|
|
381
290
|
} catch (e) {
|
|
382
|
-
|
|
383
|
-
if (e instanceof ValidationError) {
|
|
384
|
-
reply.statusCode = e.statusCode
|
|
385
|
-
reply.send({error: e.message, inputErrors: e.errors})
|
|
386
|
-
} else {
|
|
387
|
-
reply.statusCode = 500
|
|
388
|
-
reply.send({error: 'error.server'})
|
|
389
|
-
}
|
|
291
|
+
this.handleError(e,reply)
|
|
390
292
|
}
|
|
391
293
|
}
|
|
392
294
|
|
|
@@ -400,19 +302,10 @@ class UserController extends AbstractFastifyController<IUser, IUserCreate, IUser
|
|
|
400
302
|
const currentPassword = request.body.currentPassword
|
|
401
303
|
const newPassword = request.body.newPassword
|
|
402
304
|
const userService = UserServiceFactory()
|
|
403
|
-
|
|
305
|
+
await userService.changeOwnPassword(userId, currentPassword, newPassword)
|
|
306
|
+
return {message: 'Password updated successfully'}
|
|
404
307
|
} catch (e) {
|
|
405
|
-
|
|
406
|
-
if (e instanceof ValidationError) {
|
|
407
|
-
reply.statusCode = e.statusCode
|
|
408
|
-
reply.send({error: e.message, inputErrors: e.errors})
|
|
409
|
-
} else if (e instanceof UnauthorizedError) {
|
|
410
|
-
reply.statusCode = e.statusCode
|
|
411
|
-
reply.send({error: e.message})
|
|
412
|
-
} else {
|
|
413
|
-
reply.statusCode = 500
|
|
414
|
-
reply.send({error: 'error.server'})
|
|
415
|
-
}
|
|
308
|
+
this.handleError(e,reply)
|
|
416
309
|
}
|
|
417
310
|
}
|
|
418
311
|
|
|
@@ -425,19 +318,10 @@ class UserController extends AbstractFastifyController<IUser, IUserCreate, IUser
|
|
|
425
318
|
}
|
|
426
319
|
const newPassword = request.body.newPassword
|
|
427
320
|
const userService = UserServiceFactory()
|
|
428
|
-
|
|
321
|
+
await userService.changeUserPassword(userId, newPassword)
|
|
322
|
+
return {message: 'Password updated successfully'}
|
|
429
323
|
} catch (e) {
|
|
430
|
-
|
|
431
|
-
if (e instanceof ValidationError) {
|
|
432
|
-
reply.statusCode = e.statusCode
|
|
433
|
-
reply.send({error: e.message, inputErrors: e.errors})
|
|
434
|
-
} else if (e instanceof UnauthorizedError) {
|
|
435
|
-
reply.statusCode = e.statusCode
|
|
436
|
-
reply.send({error: e.message})
|
|
437
|
-
} else {
|
|
438
|
-
reply.statusCode = 500
|
|
439
|
-
reply.send({error: 'error.server'})
|
|
440
|
-
}
|
|
324
|
+
this.handleError(e,reply)
|
|
441
325
|
}
|
|
442
326
|
}
|
|
443
327
|
|
|
@@ -445,7 +329,7 @@ class UserController extends AbstractFastifyController<IUser, IUserCreate, IUser
|
|
|
445
329
|
async updateAvatar(request, reply) {
|
|
446
330
|
try {
|
|
447
331
|
request.rbac.assertAuthenticated()
|
|
448
|
-
const userId = request.rbac.
|
|
332
|
+
const userId = request.rbac.userId
|
|
449
333
|
|
|
450
334
|
const data = await request.file()
|
|
451
335
|
|
|
@@ -470,17 +354,7 @@ class UserController extends AbstractFastifyController<IUser, IUserCreate, IUser
|
|
|
470
354
|
url: urlFile,
|
|
471
355
|
}
|
|
472
356
|
} catch (e) {
|
|
473
|
-
|
|
474
|
-
if (e instanceof UploadFileError) {
|
|
475
|
-
reply.statusCode = e.statusCode
|
|
476
|
-
reply.send({error: e.message})
|
|
477
|
-
} else if (e instanceof UnauthorizedError) {
|
|
478
|
-
reply.statusCode = e.statusCode
|
|
479
|
-
reply.send({error: e.message})
|
|
480
|
-
} else {
|
|
481
|
-
reply.statusCode = 500
|
|
482
|
-
reply.send({error: 'INTERNAL_SERVER_ERROR'})
|
|
483
|
-
}
|
|
357
|
+
this.handleError(e,reply)
|
|
484
358
|
}
|
|
485
359
|
|
|
486
360
|
}
|
|
@@ -493,14 +367,7 @@ class UserController extends AbstractFastifyController<IUser, IUserCreate, IUser
|
|
|
493
367
|
//console.log("FILE_DIR: ",fileDir, " FILENAME:", filename)
|
|
494
368
|
return reply.sendFile(filename, fileDir)
|
|
495
369
|
} catch (e) {
|
|
496
|
-
|
|
497
|
-
if (e instanceof UnauthorizedError) {
|
|
498
|
-
reply.statusCode = e.statusCode
|
|
499
|
-
reply.send({error: e.message})
|
|
500
|
-
} else {
|
|
501
|
-
reply.statusCode = 500
|
|
502
|
-
reply.send({error: 'INTERNAL_SERVER_ERROR'})
|
|
503
|
-
}
|
|
370
|
+
this.handleError(e,reply)
|
|
504
371
|
}
|
|
505
372
|
|
|
506
373
|
}
|
|
@@ -1,13 +1,30 @@
|
|
|
1
|
-
|
|
1
|
+
import type {IError} from "@drax/common-back";
|
|
2
|
+
|
|
3
|
+
class BadCredentialsError extends Error implements IError{
|
|
2
4
|
constructor() {
|
|
3
5
|
super('error.badCredentials')
|
|
4
6
|
this.name = 'BadCredentialsError';
|
|
7
|
+
this.message = 'error.badCredentials'
|
|
5
8
|
}
|
|
6
9
|
|
|
7
10
|
get statusCode(){
|
|
8
11
|
return 401
|
|
9
12
|
}
|
|
10
13
|
|
|
14
|
+
|
|
15
|
+
get i18nMessage(){
|
|
16
|
+
return 'error.badCredentials'
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
get body(){
|
|
20
|
+
return {
|
|
21
|
+
statusCode: this.statusCode,
|
|
22
|
+
error: this.name,
|
|
23
|
+
message: this.message,
|
|
24
|
+
i18nMessage: this.i18nMessage,
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
11
28
|
}
|
|
12
29
|
|
|
13
30
|
export default BadCredentialsError
|
|
@@ -18,6 +18,7 @@ const RoleServiceFactory = (verbose: boolean = false): RoleService => {
|
|
|
18
18
|
case COMMON.DB_ENGINES.SQLITE:
|
|
19
19
|
const dbFile = DraxConfig.getOrLoad(CommonConfig.SqliteDbFile)
|
|
20
20
|
roleRepository = new RoleSqliteRepository(dbFile, verbose)
|
|
21
|
+
roleRepository.build()
|
|
21
22
|
break;
|
|
22
23
|
default:
|
|
23
24
|
throw new Error("DraxConfig.DB_ENGINE must be one of " + Object.values(COMMON.DB_ENGINES).join(", "));
|
|
@@ -18,6 +18,7 @@ const TenantServiceFactory = (verbose: boolean = false): TenantService => {
|
|
|
18
18
|
case COMMON.DB_ENGINES.SQLITE:
|
|
19
19
|
const dbFile = DraxConfig.getOrLoad(CommonConfig.SqliteDbFile)
|
|
20
20
|
tenantRepository = new TenantSqliteRepository(dbFile, verbose)
|
|
21
|
+
tenantRepository.build()
|
|
21
22
|
break;
|
|
22
23
|
default:
|
|
23
24
|
throw new Error("DraxConfig.DB_ENGINE must be one of " + Object.values(COMMON.DB_ENGINES).join(", "));
|
|
@@ -8,20 +8,21 @@ let userService: UserApiKeyService
|
|
|
8
8
|
|
|
9
9
|
const UserApiKeyServiceFactory = (verbose: boolean = false): UserApiKeyService => {
|
|
10
10
|
if (!userService) {
|
|
11
|
-
let
|
|
11
|
+
let userApiKeyRepository: IUserApiKeyRepository
|
|
12
12
|
switch (DraxConfig.getOrLoad(CommonConfig.DbEngine)) {
|
|
13
13
|
case COMMON.DB_ENGINES.MONGODB:
|
|
14
|
-
|
|
14
|
+
userApiKeyRepository = new UserApiKeyMongoRepository()
|
|
15
15
|
break;
|
|
16
16
|
case COMMON.DB_ENGINES.SQLITE:
|
|
17
17
|
const dbFile = DraxConfig.getOrLoad(CommonConfig.SqliteDbFile)
|
|
18
|
-
|
|
18
|
+
userApiKeyRepository = new UserApiKeySqliteRepository(dbFile, verbose)
|
|
19
|
+
userApiKeyRepository.build()
|
|
19
20
|
break;
|
|
20
21
|
default:
|
|
21
22
|
throw new Error("DraxConfig.DB_ENGINE must be one of " + Object.values(COMMON.DB_ENGINES).join(", "));
|
|
22
23
|
}
|
|
23
24
|
|
|
24
|
-
userService = new UserApiKeyService(
|
|
25
|
+
userService = new UserApiKeyService(userApiKeyRepository)
|
|
25
26
|
}
|
|
26
27
|
|
|
27
28
|
return userService
|
|
@@ -16,6 +16,7 @@ const UserServiceFactory = (verbose:boolean = false) : UserService => {
|
|
|
16
16
|
case COMMON.DB_ENGINES.SQLITE:
|
|
17
17
|
const dbFile = DraxConfig.getOrLoad(CommonConfig.SqliteDbFile)
|
|
18
18
|
userRepository = new UserSqliteRepository(dbFile,verbose)
|
|
19
|
+
userRepository.build()
|
|
19
20
|
break;
|
|
20
21
|
default:
|
|
21
22
|
throw new Error("DraxConfig.DB_ENGINE must be one of " + Object.values(COMMON.DB_ENGINES).join(", "));
|
|
@@ -3,6 +3,7 @@ import {IdentityPermissions} from "../../permissions/IdentityPermissions.js";
|
|
|
3
3
|
import {ValidationError, ValidationErrorToGraphQLError, UnauthorizedError} from "@drax/common-back";
|
|
4
4
|
import {GraphQLError} from "graphql";
|
|
5
5
|
import {PermissionService} from "../../services/PermissionService.js";
|
|
6
|
+
import {IDraxPaginateOptions} from "@drax/crud-share";
|
|
6
7
|
|
|
7
8
|
|
|
8
9
|
export default {
|
|
@@ -37,7 +38,7 @@ export default {
|
|
|
37
38
|
const roleService = RoleServiceFactory()
|
|
38
39
|
const roles = await roleService.fetchAll()
|
|
39
40
|
if(rbac.getRole?.childRoles?.length > 0) {
|
|
40
|
-
return roles.filter(role => rbac.getRole.childRoles.some(childRole => childRole.
|
|
41
|
+
return roles.filter(role => rbac.getRole.childRoles.some(childRole => childRole._id === role._id));
|
|
41
42
|
}else{
|
|
42
43
|
return roles
|
|
43
44
|
}
|
|
@@ -61,7 +62,7 @@ export default {
|
|
|
61
62
|
throw new GraphQLError('error.server')
|
|
62
63
|
}
|
|
63
64
|
},
|
|
64
|
-
paginateRole: async (_, {options= {page:1, limit:5, orderBy:"", order:
|
|
65
|
+
paginateRole: async (_, {options= {page:1, limit:5, orderBy:"", order:"asc", search:"", filters: []} as IDraxPaginateOptions }, {rbac}) => {
|
|
65
66
|
try {
|
|
66
67
|
rbac.assertPermission(IdentityPermissions.ViewRole)
|
|
67
68
|
const roleService = RoleServiceFactory()
|
|
@@ -2,6 +2,7 @@ import TenantServiceFactory from "../../factory/TenantServiceFactory.js";
|
|
|
2
2
|
import {IdentityPermissions} from "../../permissions/IdentityPermissions.js";
|
|
3
3
|
import {ValidationError, ValidationErrorToGraphQLError, UnauthorizedError} from "@drax/common-back";
|
|
4
4
|
import {GraphQLError} from "graphql";
|
|
5
|
+
import {IDraxPaginateOptions} from "@drax/crud-share";
|
|
5
6
|
|
|
6
7
|
|
|
7
8
|
export default {
|
|
@@ -36,7 +37,7 @@ export default {
|
|
|
36
37
|
const tenantService = TenantServiceFactory()
|
|
37
38
|
const tenants = await tenantService.fetchAll()
|
|
38
39
|
if(rbac.getAuthUser.tenantId){
|
|
39
|
-
return tenants.filter(t => t.
|
|
40
|
+
return tenants.filter(t => t._id === rbac.getAuthUser.tenantId)
|
|
40
41
|
}else{
|
|
41
42
|
return tenants
|
|
42
43
|
}
|
|
@@ -48,7 +49,7 @@ export default {
|
|
|
48
49
|
throw new GraphQLError('error.server')
|
|
49
50
|
}
|
|
50
51
|
},
|
|
51
|
-
paginateTenant: async (_, {options= {page:1, limit:5, orderBy:"", order:
|
|
52
|
+
paginateTenant: async (_, {options= {page:1, limit:5, orderBy:"", order:"asc", search:"", filters: []} as IDraxPaginateOptions }, {rbac}) => {
|
|
52
53
|
try {
|
|
53
54
|
rbac.assertPermission(IdentityPermissions.ViewTenant)
|
|
54
55
|
const tenantService = TenantServiceFactory()
|
|
@@ -3,11 +3,12 @@ import {IdentityPermissions} from "../../permissions/IdentityPermissions.js";
|
|
|
3
3
|
import {ValidationError, ValidationErrorToGraphQLError, UnauthorizedError} from "@drax/common-back";
|
|
4
4
|
import {GraphQLError} from "graphql";
|
|
5
5
|
import * as crypto from "node:crypto";
|
|
6
|
+
import {IDraxPaginateOptions} from "@drax/crud-share";
|
|
6
7
|
|
|
7
8
|
|
|
8
9
|
export default {
|
|
9
10
|
Query: {
|
|
10
|
-
paginateUserApiKey: async (_, {options= {page:1, limit:5, orderBy:"", order:
|
|
11
|
+
paginateUserApiKey: async (_, {options= {page:1, limit:5, orderBy:"", order:"asc", search:"", filters: []} as IDraxPaginateOptions }, {rbac, authUser}) => {
|
|
11
12
|
try {
|
|
12
13
|
rbac.assertAuthenticated()
|
|
13
14
|
|
|
@@ -22,7 +23,7 @@ export default {
|
|
|
22
23
|
}
|
|
23
24
|
|
|
24
25
|
if(!rbac.hasPermission(IdentityPermissions.ViewUserApiKey)){
|
|
25
|
-
options.filters.push({field: "user", operator: "eq", value: rbac.
|
|
26
|
+
options.filters.push({field: "user", operator: "eq", value: rbac.userId})
|
|
26
27
|
}
|
|
27
28
|
|
|
28
29
|
const userApiKeyService = UserApiKeyServiceFactory()
|
|
@@ -12,6 +12,7 @@ import {UnauthorizedError} from "@drax/common-back";
|
|
|
12
12
|
import BadCredentialsError from "../../errors/BadCredentialsError.js";
|
|
13
13
|
import {join} from "path";
|
|
14
14
|
import IdentityConfig from "../../config/IdentityConfig.js";
|
|
15
|
+
import {IDraxPaginateOptions} from "@drax/crud-share";
|
|
15
16
|
|
|
16
17
|
export default {
|
|
17
18
|
Query: {
|
|
@@ -45,7 +46,7 @@ export default {
|
|
|
45
46
|
}
|
|
46
47
|
|
|
47
48
|
},
|
|
48
|
-
paginateUser: async (_, { options= {page:1, limit:5, orderBy:"", order:
|
|
49
|
+
paginateUser: async (_, { options= {page:1, limit:5, orderBy:"", order:"asc", search:"", filters: []} as IDraxPaginateOptions }, {rbac}) => {
|
|
49
50
|
try {
|
|
50
51
|
rbac.assertPermission(IdentityPermissions.ViewUser)
|
|
51
52
|
let userService = UserServiceFactory()
|
package/src/index.ts
CHANGED
|
@@ -42,6 +42,11 @@ import {TenantPermissions} from "./permissions/TenantPermissions.js";
|
|
|
42
42
|
import {UserPermissions} from "./permissions/UserPermissions.js";
|
|
43
43
|
import {UserApiKeyPermissions} from "./permissions/UserApiKeyPermissions.js";
|
|
44
44
|
|
|
45
|
+
import {UserSchema, UserBaseSchema} from "./schemas/UserSchema.js";
|
|
46
|
+
import {TenantSchema,TenantBaseSchema} from "./schemas/TenantSchema.js";
|
|
47
|
+
import {RoleSchema, RoleBaseSchema} from "./schemas/RoleSchema.js";
|
|
48
|
+
import {UserApiKeySchema, UserApiKeyBaseSchema} from "./schemas/UserApiKeySchema.js";
|
|
49
|
+
|
|
45
50
|
|
|
46
51
|
const graphqlMergeResult = await GraphqlMerge()
|
|
47
52
|
const identityTypeDefs = await graphqlMergeResult.typeDefs;
|
|
@@ -56,6 +61,17 @@ export type {
|
|
|
56
61
|
}
|
|
57
62
|
|
|
58
63
|
export {
|
|
64
|
+
|
|
65
|
+
//Schemas
|
|
66
|
+
UserSchema,
|
|
67
|
+
UserBaseSchema,
|
|
68
|
+
TenantSchema,
|
|
69
|
+
TenantBaseSchema,
|
|
70
|
+
RoleSchema,
|
|
71
|
+
RoleBaseSchema,
|
|
72
|
+
UserApiKeyBaseSchema,
|
|
73
|
+
UserApiKeySchema,
|
|
74
|
+
|
|
59
75
|
//Service
|
|
60
76
|
UserService,
|
|
61
77
|
RoleService,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {ITenant, ITenantBase} from '@drax/identity-share'
|
|
2
|
-
import {
|
|
3
|
-
interface ITenantRepository extends
|
|
2
|
+
import {IDraxCrudRepository} from "@drax/crud-share";
|
|
3
|
+
interface ITenantRepository extends IDraxCrudRepository<ITenant,ITenantBase,ITenantBase>{
|
|
4
4
|
findById(id: string): Promise<ITenant | null>;
|
|
5
5
|
findByName(name: string): Promise<ITenant | null>;
|
|
6
6
|
fetchAll(): Promise<ITenant[]>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {IUserApiKey, IUserApiKeyBase} from '@drax/identity-share'
|
|
2
|
-
import {
|
|
2
|
+
import {IDraxCrudRepository} from "@drax/crud-share";
|
|
3
3
|
|
|
4
|
-
interface IUserApiKeyRepository extends
|
|
4
|
+
interface IUserApiKeyRepository extends IDraxCrudRepository<IUserApiKey, IUserApiKeyBase, IUserApiKeyBase>{
|
|
5
5
|
findBySecret(username: string): Promise<IUserApiKey | null>;
|
|
6
6
|
}
|
|
7
7
|
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import {IUser, IUserCreate, IUserUpdate} from '@drax/identity-share'
|
|
2
|
-
import {
|
|
2
|
+
import {IDraxCrudRepository} from "@drax/crud-share";
|
|
3
3
|
|
|
4
|
-
interface IUserRepository extends
|
|
4
|
+
interface IUserRepository extends IDraxCrudRepository<IUser, IUserCreate, IUserUpdate>{
|
|
5
5
|
findById(id: string): Promise<IUser | null>;
|
|
6
6
|
findByUsername(username: string): Promise<IUser | null>;
|
|
7
7
|
findByUsernameWithPassword(username: string): Promise<IUser | null>;
|
|
8
|
+
findByIdWithPassword(id: string): Promise<IUser | null>;
|
|
8
9
|
findByEmail(email: string): Promise<IUser | null>;
|
|
9
10
|
changePassword(id: string, password:string):Promise<Boolean>;
|
|
10
11
|
changeAvatar(id: string, avatarUrl: string): Promise<Boolean>;
|
|
@@ -30,8 +30,8 @@ async function apiKeyMiddleware (request, reply) {
|
|
|
30
30
|
const userApiKey = await draxCache.getOrLoad(apiKey, userApiKeyLoader)
|
|
31
31
|
if(userApiKey && userApiKey.user){
|
|
32
32
|
request.authUser = userApiKey.user
|
|
33
|
-
request.authUser.roleId = userApiKey.user.role.
|
|
34
|
-
request.authUser.tenantId = userApiKey.user?.tenant?.
|
|
33
|
+
request.authUser.roleId = userApiKey.user.role._id
|
|
34
|
+
request.authUser.tenantId = userApiKey.user?.tenant?._id
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
37
|
return
|