@drax/identity-back 0.0.27 → 0.0.29
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/graphql/resolvers/role.resolvers.js +2 -2
- package/dist/graphql/resolvers/tenant.resolvers.js +2 -2
- package/dist/graphql/resolvers/user.resolvers.js +39 -4
- package/dist/graphql/types/user.graphql +2 -0
- package/dist/index.js +2 -2
- package/dist/rbac/Rbac.js +5 -0
- package/dist/repository/mongo/UserMongoRepository.js +10 -0
- package/dist/repository/sqlite/RoleSqliteRepository.js +1 -1
- package/dist/repository/sqlite/TenantSqliteRepository.js +1 -1
- package/dist/repository/sqlite/UserSqliteRepository.js +7 -0
- package/dist/routes/UserAvatarRoutes.js +69 -0
- package/dist/services/UserService.js +13 -0
- package/package.json +5 -5
- package/src/graphql/resolvers/role.resolvers.ts +2 -2
- package/src/graphql/resolvers/tenant.resolvers.ts +2 -2
- package/src/graphql/resolvers/user.resolvers.ts +56 -16
- package/src/graphql/types/user.graphql +2 -0
- package/src/index.ts +2 -1
- package/src/interfaces/IUserRepository.ts +1 -0
- package/src/rbac/Rbac.ts +6 -0
- package/src/repository/mongo/UserMongoRepository.ts +10 -0
- package/src/repository/sqlite/RoleSqliteRepository.ts +1 -1
- package/src/repository/sqlite/TenantSqliteRepository.ts +1 -1
- package/src/repository/sqlite/UserSqliteRepository.ts +8 -0
- package/src/routes/UserAvatarRoutes.ts +80 -0
- package/src/services/UserService.ts +17 -0
- package/test/data-obj/roles/admin-mongo-role.ts +1 -1
- package/test/repository/mongo/role-mongo-repository.test.ts +2 -3
- package/test/repository/mongo/user-mongo-repository.test.ts +2 -2
- package/test/repository/sqlite/role-sqlite-repository.test.ts +2 -2
- package/test/repository/sqlite/user-sqlite-repository.test.ts +1 -1
- package/tsconfig.json +1 -11
- package/tsconfig.tsbuildinfo +1 -1
- package/types/graphql/resolvers/role.resolvers.d.ts +9 -6
- package/types/graphql/resolvers/role.resolvers.d.ts.map +1 -1
- package/types/graphql/resolvers/tenant.resolvers.d.ts +9 -6
- package/types/graphql/resolvers/tenant.resolvers.d.ts.map +1 -1
- package/types/graphql/resolvers/user.resolvers.d.ts +15 -7
- package/types/graphql/resolvers/user.resolvers.d.ts.map +1 -1
- package/types/routes/UserAvatarRoutes.d.ts.map +1 -0
- package/types/services/UserService.d.ts.map +1 -1
- package/types/config/IdentityConfig.d.ts +0 -12
- package/types/config/IdentityConfig.d.ts.map +0 -1
- package/types/errors/BadCredentialsError.d.ts +0 -6
- package/types/errors/BadCredentialsError.d.ts.map +0 -1
- package/types/errors/UnauthorizedError.d.ts +0 -6
- package/types/errors/UnauthorizedError.d.ts.map +0 -1
- package/types/factory/RoleServiceFactory.d.ts +0 -4
- package/types/factory/RoleServiceFactory.d.ts.map +0 -1
- package/types/factory/TenantServiceFactory.d.ts +0 -4
- package/types/factory/TenantServiceFactory.d.ts.map +0 -1
- package/types/factory/UserServiceFactory.d.ts +0 -4
- package/types/factory/UserServiceFactory.d.ts.map +0 -1
- package/types/graphql/index.d.ts +0 -6
- package/types/graphql/index.d.ts.map +0 -1
- package/types/index.d.ts +0 -31
- package/types/index.d.ts.map +0 -1
- package/types/interfaces/IID.d.ts +0 -6
- package/types/interfaces/IID.d.ts.map +0 -1
- package/types/interfaces/IJwtUser.d.ts +0 -7
- package/types/interfaces/IJwtUser.d.ts.map +0 -1
- package/types/interfaces/IRole.d.ts +0 -18
- package/types/interfaces/IRole.d.ts.map +0 -1
- package/types/interfaces/IRoleRepository.d.ts +0 -9
- package/types/interfaces/IRoleRepository.d.ts.map +0 -1
- package/types/interfaces/ITenant.d.ts +0 -7
- package/types/interfaces/ITenant.d.ts.map +0 -1
- package/types/interfaces/ITenantRepository.d.ts +0 -9
- package/types/interfaces/ITenantRepository.d.ts.map +0 -1
- package/types/interfaces/IUser.d.ts +0 -45
- package/types/interfaces/IUser.d.ts.map +0 -1
- package/types/interfaces/IUserGroup.d.ts +0 -11
- package/types/interfaces/IUserGroup.d.ts.map +0 -1
- package/types/interfaces/IUserRepository.d.ts +0 -9
- package/types/interfaces/IUserRepository.d.ts.map +0 -1
- package/types/middleware/jwtMiddleware.d.ts +0 -4
- package/types/middleware/jwtMiddleware.d.ts.map +0 -1
- package/types/middleware/rbacMiddleware.d.ts +0 -4
- package/types/middleware/rbacMiddleware.d.ts.map +0 -1
- package/types/models/RoleModel.d.ts +0 -16
- package/types/models/RoleModel.d.ts.map +0 -1
- package/types/models/TenantModel.d.ts +0 -16
- package/types/models/TenantModel.d.ts.map +0 -1
- package/types/models/UserGroupModel.d.ts +0 -16
- package/types/models/UserGroupModel.d.ts.map +0 -1
- package/types/models/UserModel.d.ts +0 -16
- package/types/models/UserModel.d.ts.map +0 -1
- package/types/permissions/IdentityPermissions.d.ts +0 -21
- package/types/permissions/IdentityPermissions.d.ts.map +0 -1
- package/types/rbac/Rbac.d.ts +0 -13
- package/types/rbac/Rbac.d.ts.map +0 -1
- package/types/repository/mongo/RoleMongoRepository.d.ts +0 -14
- package/types/repository/mongo/RoleMongoRepository.d.ts.map +0 -1
- package/types/repository/mongo/TenantMongoRepository.d.ts +0 -14
- package/types/repository/mongo/TenantMongoRepository.d.ts.map +0 -1
- package/types/repository/mongo/UserMongoRepository.d.ts +0 -16
- package/types/repository/mongo/UserMongoRepository.d.ts.map +0 -1
- package/types/repository/sqlite/RoleSqliteRepository.d.ts +0 -21
- package/types/repository/sqlite/RoleSqliteRepository.d.ts.map +0 -1
- package/types/repository/sqlite/TenantSqliteRepository.d.ts +0 -18
- package/types/repository/sqlite/TenantSqliteRepository.d.ts.map +0 -1
- package/types/repository/sqlite/UserSqliteRepository.d.ts +0 -23
- package/types/repository/sqlite/UserSqliteRepository.d.ts.map +0 -1
- package/types/routes/RoleRoutes.d.ts +0 -4
- package/types/routes/RoleRoutes.d.ts.map +0 -1
- package/types/routes/TenantRoutes.d.ts +0 -4
- package/types/routes/TenantRoutes.d.ts.map +0 -1
- package/types/routes/UserRoutes.d.ts +0 -4
- package/types/routes/UserRoutes.d.ts.map +0 -1
- package/types/services/PermissionService.d.ts +0 -9
- package/types/services/PermissionService.d.ts.map +0 -1
- package/types/services/RoleService.d.ts +0 -16
- package/types/services/RoleService.d.ts.map +0 -1
- package/types/services/TenantService.d.ts +0 -16
- package/types/services/TenantService.d.ts.map +0 -1
- package/types/services/UserService.d.ts +0 -20
- package/types/setup/CreateOrUpdateRole.d.ts +0 -5
- package/types/setup/CreateOrUpdateRole.d.ts.map +0 -1
- package/types/setup/CreateUserIfNotExist.d.ts +0 -5
- package/types/setup/CreateUserIfNotExist.d.ts.map +0 -1
- package/types/setup/LoadConfigFromEnv.d.ts +0 -4
- package/types/setup/LoadConfigFromEnv.d.ts.map +0 -1
- package/types/setup/LoadIdentityConfigFromEnv.d.ts +0 -4
- package/types/setup/LoadIdentityConfigFromEnv.d.ts.map +0 -1
- package/types/setup/LoadPermissions.d.ts +0 -4
- package/types/setup/LoadPermissions.d.ts.map +0 -1
- package/types/setup/RecoveryUserPassword.d.ts +0 -4
- package/types/setup/RecoveryUserPassword.d.ts.map +0 -1
- package/types/utils/AuthUtils.d.ts +0 -16
- package/types/utils/AuthUtils.d.ts.map +0 -1
- package/types/utils/DbSetupUtils.d.ts +0 -10
- package/types/utils/DbSetupUtils.d.ts.map +0 -1
- package/types/zod/RoleZod.d.ts +0 -10
- package/types/zod/RoleZod.d.ts.map +0 -1
- package/types/zod/TenantZod.d.ts +0 -10
- package/types/zod/TenantZod.d.ts.map +0 -1
- package/types/zod/UserZod.d.ts +0 -53
- package/types/zod/UserZod.d.ts.map +0 -1
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import {join} from "path";
|
|
2
|
+
import {UnauthorizedError} from "@drax/identity-back";
|
|
3
|
+
import {StoreManager, UploadFileError} from "@drax/common-back";
|
|
4
|
+
import UserServiceFactory from "../factory/UserServiceFactory.js";
|
|
5
|
+
|
|
6
|
+
const FILE_DIR = process.env.DRAX_AVATAR_DIR || 'avatars';
|
|
7
|
+
const BASE_URL = process.env.DRAX_BASE_URL.replace(/\/$/, '') || ''
|
|
8
|
+
|
|
9
|
+
async function UserAvatarRoutes(fastify, options) {
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
fastify.post('/api/user/avatar', async (request, reply): Promise<any> => {
|
|
13
|
+
try {
|
|
14
|
+
request.rbac.assertAuthenticated()
|
|
15
|
+
const userId = request.rbac.getAuthUser.id
|
|
16
|
+
|
|
17
|
+
const data = await request.file()
|
|
18
|
+
|
|
19
|
+
const file = {
|
|
20
|
+
filename: data.filename,
|
|
21
|
+
fileStream: data.file,
|
|
22
|
+
mimetype: data.mimetype
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const destinationPath = join(FILE_DIR)
|
|
26
|
+
const storedFile = await StoreManager.saveFile(file, destinationPath)
|
|
27
|
+
const urlFile = BASE_URL + '/api/user/avatar/' + storedFile.filename
|
|
28
|
+
|
|
29
|
+
//Save into DB
|
|
30
|
+
const userService = UserServiceFactory()
|
|
31
|
+
return await userService.changeAvatar(userId, urlFile)
|
|
32
|
+
|
|
33
|
+
return {
|
|
34
|
+
filename: storedFile.filename,
|
|
35
|
+
size: storedFile.size,
|
|
36
|
+
mimetype: storedFile.mimetype,
|
|
37
|
+
url: urlFile,
|
|
38
|
+
}
|
|
39
|
+
} catch (e) {
|
|
40
|
+
console.error(e)
|
|
41
|
+
if (e instanceof UploadFileError) {
|
|
42
|
+
reply.statusCode = e.statusCode
|
|
43
|
+
reply.send({error: e.message})
|
|
44
|
+
} else if (e instanceof UnauthorizedError) {
|
|
45
|
+
reply.statusCode = e.statusCode
|
|
46
|
+
reply.send({error: e.message})
|
|
47
|
+
} else {
|
|
48
|
+
reply.statusCode = 500
|
|
49
|
+
reply.send({error: 'INTERNAL_SERVER_ERROR'})
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
fastify.get('/api/user/avatar/:filename', async (request, reply): Promise<any> => {
|
|
57
|
+
try {
|
|
58
|
+
const filename = request.params.filename
|
|
59
|
+
const [year, month] = filename.split('-')
|
|
60
|
+
const fileDir = join(FILE_DIR, year, month)
|
|
61
|
+
console.log("FILE_DIR: ",fileDir, " FILENAME:", filename)
|
|
62
|
+
return reply.sendFile(filename, fileDir)
|
|
63
|
+
} catch (e) {
|
|
64
|
+
console.error(e)
|
|
65
|
+
if (e instanceof UnauthorizedError) {
|
|
66
|
+
reply.statusCode = e.statusCode
|
|
67
|
+
reply.send({error: e.message})
|
|
68
|
+
} else {
|
|
69
|
+
reply.statusCode = 500
|
|
70
|
+
reply.send({error: 'INTERNAL_SERVER_ERROR'})
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export default UserAvatarRoutes;
|
|
80
|
+
export {UserAvatarRoutes}
|
|
@@ -44,7 +44,14 @@ class UserService {
|
|
|
44
44
|
|
|
45
45
|
async changeOwnPassword(userId : string, currentPassword : string, newPassword : string){
|
|
46
46
|
const user = await this.findById(userId)
|
|
47
|
+
|
|
48
|
+
|
|
47
49
|
if(user && user.active){
|
|
50
|
+
|
|
51
|
+
if(currentPassword === newPassword){
|
|
52
|
+
throw new ValidationError([{field: 'newPassword', reason: 'validation.password.currentDifferent'}])
|
|
53
|
+
}
|
|
54
|
+
|
|
48
55
|
if (AuthUtils.checkPassword(currentPassword, user.password)) {
|
|
49
56
|
newPassword = AuthUtils.hashPassword(newPassword)
|
|
50
57
|
await this._repository.changePassword(userId, newPassword)
|
|
@@ -58,6 +65,16 @@ class UserService {
|
|
|
58
65
|
}
|
|
59
66
|
}
|
|
60
67
|
|
|
68
|
+
async changeAvatar(userId : string, avatar: string){
|
|
69
|
+
const user = await this.findById(userId)
|
|
70
|
+
if(user && user.active){
|
|
71
|
+
await this._repository.changeAvatar(userId, avatar)
|
|
72
|
+
return true
|
|
73
|
+
}else{
|
|
74
|
+
throw new BadCredentialsError()
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
61
78
|
|
|
62
79
|
async create(userData: IUserCreate): Promise<IUser> {
|
|
63
80
|
try{
|
|
@@ -3,8 +3,7 @@ import {equal} from "assert";
|
|
|
3
3
|
import RoleMongoRepository from "../../../src/repository/mongo/RoleMongoRepository";
|
|
4
4
|
import MongoInMemory from "../../db/MongoInMemory";
|
|
5
5
|
import {IRole} from "../../../../identity-share/src/interfaces/IRole";
|
|
6
|
-
import {
|
|
7
|
-
import {IPaginateResult} from "@drax/common-back";
|
|
6
|
+
import {IDraxPaginateResult} from "@drax/common-share";
|
|
8
7
|
|
|
9
8
|
describe("RoleRepositoryTest", function() {
|
|
10
9
|
|
|
@@ -48,7 +47,7 @@ describe("RoleRepositoryTest", function() {
|
|
|
48
47
|
})
|
|
49
48
|
|
|
50
49
|
it("Paginate roles successfully.", async function() {
|
|
51
|
-
let paginateRoles:
|
|
50
|
+
let paginateRoles: IDraxPaginateResult<IRole> = await roleReposirory.paginate({page: 1, limit: 5})
|
|
52
51
|
equal(paginateRoles.items.length,1)
|
|
53
52
|
equal(paginateRoles.total,1)
|
|
54
53
|
equal(paginateRoles.page,1)
|
|
@@ -4,7 +4,7 @@ import UserMongoRepository from "../../../src/repository/mongo/UserMongoReposito
|
|
|
4
4
|
import MongoInMemory from "../../db/MongoInMemory";
|
|
5
5
|
import RoleMongoInitializer from "../../initializers/RoleMongoInitializer";
|
|
6
6
|
import {IUser} from "../../../../identity-share/src/interfaces/IUser";
|
|
7
|
-
import type {
|
|
7
|
+
import type {IDraxPaginateResult} from "@drax/common-share";
|
|
8
8
|
import {mongoose, ValidationError} from "@drax/common-back";
|
|
9
9
|
|
|
10
10
|
|
|
@@ -113,7 +113,7 @@ test.describe("UserRepositoryTest", function () {
|
|
|
113
113
|
|
|
114
114
|
|
|
115
115
|
test("Paginate mongo users successfully.", async function() {
|
|
116
|
-
let paginateUsers:
|
|
116
|
+
let paginateUsers: IDraxPaginateResult<IUser> = await userRepository.paginate({page: 1, limit: 5})
|
|
117
117
|
equal(paginateUsers.items.length,1)
|
|
118
118
|
equal(paginateUsers.total,1)
|
|
119
119
|
equal(paginateUsers.page,1)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {describe,it, before, after} from "node:test"
|
|
2
2
|
import {equal} from "assert";
|
|
3
3
|
import {IRole} from "../../../../identity-share/src/interfaces/IRole";
|
|
4
|
-
import {
|
|
4
|
+
import {IDraxPaginateResult} from "@drax/common-share";
|
|
5
5
|
import RoleSqliteRepository from "../../../src/repository/sqlite/RoleSqliteRepository";
|
|
6
6
|
import {UUID} from "crypto";
|
|
7
7
|
|
|
@@ -45,7 +45,7 @@ describe("RoleRepositoryTest", function() {
|
|
|
45
45
|
})
|
|
46
46
|
|
|
47
47
|
it("Paginate roles successfully.", async function() {
|
|
48
|
-
let paginateRoles:
|
|
48
|
+
let paginateRoles: IDraxPaginateResult<IRole> = await roleReposirory.paginate({page: 1, limit: 5})
|
|
49
49
|
console.log(paginateRoles)
|
|
50
50
|
equal(paginateRoles.items.length,2)
|
|
51
51
|
equal(paginateRoles.total,2)
|
|
@@ -114,7 +114,7 @@ test.describe("UserRepositoryTest", function () {
|
|
|
114
114
|
})
|
|
115
115
|
|
|
116
116
|
test("Paginate users successfully.", async function() {
|
|
117
|
-
let paginateUsers = await userRepository.paginate()
|
|
117
|
+
let paginateUsers = await userRepository.paginate({page: 1, limit:5})
|
|
118
118
|
|
|
119
119
|
equal(paginateUsers.total,1)
|
|
120
120
|
equal(paginateUsers.page,1)
|
package/tsconfig.json
CHANGED
|
@@ -4,18 +4,8 @@
|
|
|
4
4
|
"rootDir": "src",
|
|
5
5
|
"outDir": "dist",
|
|
6
6
|
"declarationDir": "./types",
|
|
7
|
-
"moduleResolution": "node"
|
|
8
7
|
},
|
|
9
|
-
"exclude": [
|
|
10
|
-
"test",
|
|
11
|
-
"types",
|
|
12
|
-
"dist"
|
|
13
|
-
],
|
|
14
|
-
"references": [
|
|
15
|
-
{
|
|
16
|
-
"path": "../../common/common-back"
|
|
17
|
-
}
|
|
18
|
-
],
|
|
8
|
+
"exclude": ["test", "types","dist"],
|
|
19
9
|
"ts-node": {
|
|
20
10
|
"esm": true
|
|
21
11
|
},
|