@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.
Files changed (138) hide show
  1. package/dist/graphql/resolvers/role.resolvers.js +2 -2
  2. package/dist/graphql/resolvers/tenant.resolvers.js +2 -2
  3. package/dist/graphql/resolvers/user.resolvers.js +39 -4
  4. package/dist/graphql/types/user.graphql +2 -0
  5. package/dist/index.js +2 -2
  6. package/dist/rbac/Rbac.js +5 -0
  7. package/dist/repository/mongo/UserMongoRepository.js +10 -0
  8. package/dist/repository/sqlite/RoleSqliteRepository.js +1 -1
  9. package/dist/repository/sqlite/TenantSqliteRepository.js +1 -1
  10. package/dist/repository/sqlite/UserSqliteRepository.js +7 -0
  11. package/dist/routes/UserAvatarRoutes.js +69 -0
  12. package/dist/services/UserService.js +13 -0
  13. package/package.json +5 -5
  14. package/src/graphql/resolvers/role.resolvers.ts +2 -2
  15. package/src/graphql/resolvers/tenant.resolvers.ts +2 -2
  16. package/src/graphql/resolvers/user.resolvers.ts +56 -16
  17. package/src/graphql/types/user.graphql +2 -0
  18. package/src/index.ts +2 -1
  19. package/src/interfaces/IUserRepository.ts +1 -0
  20. package/src/rbac/Rbac.ts +6 -0
  21. package/src/repository/mongo/UserMongoRepository.ts +10 -0
  22. package/src/repository/sqlite/RoleSqliteRepository.ts +1 -1
  23. package/src/repository/sqlite/TenantSqliteRepository.ts +1 -1
  24. package/src/repository/sqlite/UserSqliteRepository.ts +8 -0
  25. package/src/routes/UserAvatarRoutes.ts +80 -0
  26. package/src/services/UserService.ts +17 -0
  27. package/test/data-obj/roles/admin-mongo-role.ts +1 -1
  28. package/test/repository/mongo/role-mongo-repository.test.ts +2 -3
  29. package/test/repository/mongo/user-mongo-repository.test.ts +2 -2
  30. package/test/repository/sqlite/role-sqlite-repository.test.ts +2 -2
  31. package/test/repository/sqlite/user-sqlite-repository.test.ts +1 -1
  32. package/tsconfig.json +1 -11
  33. package/tsconfig.tsbuildinfo +1 -1
  34. package/types/graphql/resolvers/role.resolvers.d.ts +9 -6
  35. package/types/graphql/resolvers/role.resolvers.d.ts.map +1 -1
  36. package/types/graphql/resolvers/tenant.resolvers.d.ts +9 -6
  37. package/types/graphql/resolvers/tenant.resolvers.d.ts.map +1 -1
  38. package/types/graphql/resolvers/user.resolvers.d.ts +15 -7
  39. package/types/graphql/resolvers/user.resolvers.d.ts.map +1 -1
  40. package/types/routes/UserAvatarRoutes.d.ts.map +1 -0
  41. package/types/services/UserService.d.ts.map +1 -1
  42. package/types/config/IdentityConfig.d.ts +0 -12
  43. package/types/config/IdentityConfig.d.ts.map +0 -1
  44. package/types/errors/BadCredentialsError.d.ts +0 -6
  45. package/types/errors/BadCredentialsError.d.ts.map +0 -1
  46. package/types/errors/UnauthorizedError.d.ts +0 -6
  47. package/types/errors/UnauthorizedError.d.ts.map +0 -1
  48. package/types/factory/RoleServiceFactory.d.ts +0 -4
  49. package/types/factory/RoleServiceFactory.d.ts.map +0 -1
  50. package/types/factory/TenantServiceFactory.d.ts +0 -4
  51. package/types/factory/TenantServiceFactory.d.ts.map +0 -1
  52. package/types/factory/UserServiceFactory.d.ts +0 -4
  53. package/types/factory/UserServiceFactory.d.ts.map +0 -1
  54. package/types/graphql/index.d.ts +0 -6
  55. package/types/graphql/index.d.ts.map +0 -1
  56. package/types/index.d.ts +0 -31
  57. package/types/index.d.ts.map +0 -1
  58. package/types/interfaces/IID.d.ts +0 -6
  59. package/types/interfaces/IID.d.ts.map +0 -1
  60. package/types/interfaces/IJwtUser.d.ts +0 -7
  61. package/types/interfaces/IJwtUser.d.ts.map +0 -1
  62. package/types/interfaces/IRole.d.ts +0 -18
  63. package/types/interfaces/IRole.d.ts.map +0 -1
  64. package/types/interfaces/IRoleRepository.d.ts +0 -9
  65. package/types/interfaces/IRoleRepository.d.ts.map +0 -1
  66. package/types/interfaces/ITenant.d.ts +0 -7
  67. package/types/interfaces/ITenant.d.ts.map +0 -1
  68. package/types/interfaces/ITenantRepository.d.ts +0 -9
  69. package/types/interfaces/ITenantRepository.d.ts.map +0 -1
  70. package/types/interfaces/IUser.d.ts +0 -45
  71. package/types/interfaces/IUser.d.ts.map +0 -1
  72. package/types/interfaces/IUserGroup.d.ts +0 -11
  73. package/types/interfaces/IUserGroup.d.ts.map +0 -1
  74. package/types/interfaces/IUserRepository.d.ts +0 -9
  75. package/types/interfaces/IUserRepository.d.ts.map +0 -1
  76. package/types/middleware/jwtMiddleware.d.ts +0 -4
  77. package/types/middleware/jwtMiddleware.d.ts.map +0 -1
  78. package/types/middleware/rbacMiddleware.d.ts +0 -4
  79. package/types/middleware/rbacMiddleware.d.ts.map +0 -1
  80. package/types/models/RoleModel.d.ts +0 -16
  81. package/types/models/RoleModel.d.ts.map +0 -1
  82. package/types/models/TenantModel.d.ts +0 -16
  83. package/types/models/TenantModel.d.ts.map +0 -1
  84. package/types/models/UserGroupModel.d.ts +0 -16
  85. package/types/models/UserGroupModel.d.ts.map +0 -1
  86. package/types/models/UserModel.d.ts +0 -16
  87. package/types/models/UserModel.d.ts.map +0 -1
  88. package/types/permissions/IdentityPermissions.d.ts +0 -21
  89. package/types/permissions/IdentityPermissions.d.ts.map +0 -1
  90. package/types/rbac/Rbac.d.ts +0 -13
  91. package/types/rbac/Rbac.d.ts.map +0 -1
  92. package/types/repository/mongo/RoleMongoRepository.d.ts +0 -14
  93. package/types/repository/mongo/RoleMongoRepository.d.ts.map +0 -1
  94. package/types/repository/mongo/TenantMongoRepository.d.ts +0 -14
  95. package/types/repository/mongo/TenantMongoRepository.d.ts.map +0 -1
  96. package/types/repository/mongo/UserMongoRepository.d.ts +0 -16
  97. package/types/repository/mongo/UserMongoRepository.d.ts.map +0 -1
  98. package/types/repository/sqlite/RoleSqliteRepository.d.ts +0 -21
  99. package/types/repository/sqlite/RoleSqliteRepository.d.ts.map +0 -1
  100. package/types/repository/sqlite/TenantSqliteRepository.d.ts +0 -18
  101. package/types/repository/sqlite/TenantSqliteRepository.d.ts.map +0 -1
  102. package/types/repository/sqlite/UserSqliteRepository.d.ts +0 -23
  103. package/types/repository/sqlite/UserSqliteRepository.d.ts.map +0 -1
  104. package/types/routes/RoleRoutes.d.ts +0 -4
  105. package/types/routes/RoleRoutes.d.ts.map +0 -1
  106. package/types/routes/TenantRoutes.d.ts +0 -4
  107. package/types/routes/TenantRoutes.d.ts.map +0 -1
  108. package/types/routes/UserRoutes.d.ts +0 -4
  109. package/types/routes/UserRoutes.d.ts.map +0 -1
  110. package/types/services/PermissionService.d.ts +0 -9
  111. package/types/services/PermissionService.d.ts.map +0 -1
  112. package/types/services/RoleService.d.ts +0 -16
  113. package/types/services/RoleService.d.ts.map +0 -1
  114. package/types/services/TenantService.d.ts +0 -16
  115. package/types/services/TenantService.d.ts.map +0 -1
  116. package/types/services/UserService.d.ts +0 -20
  117. package/types/setup/CreateOrUpdateRole.d.ts +0 -5
  118. package/types/setup/CreateOrUpdateRole.d.ts.map +0 -1
  119. package/types/setup/CreateUserIfNotExist.d.ts +0 -5
  120. package/types/setup/CreateUserIfNotExist.d.ts.map +0 -1
  121. package/types/setup/LoadConfigFromEnv.d.ts +0 -4
  122. package/types/setup/LoadConfigFromEnv.d.ts.map +0 -1
  123. package/types/setup/LoadIdentityConfigFromEnv.d.ts +0 -4
  124. package/types/setup/LoadIdentityConfigFromEnv.d.ts.map +0 -1
  125. package/types/setup/LoadPermissions.d.ts +0 -4
  126. package/types/setup/LoadPermissions.d.ts.map +0 -1
  127. package/types/setup/RecoveryUserPassword.d.ts +0 -4
  128. package/types/setup/RecoveryUserPassword.d.ts.map +0 -1
  129. package/types/utils/AuthUtils.d.ts +0 -16
  130. package/types/utils/AuthUtils.d.ts.map +0 -1
  131. package/types/utils/DbSetupUtils.d.ts +0 -10
  132. package/types/utils/DbSetupUtils.d.ts.map +0 -1
  133. package/types/zod/RoleZod.d.ts +0 -10
  134. package/types/zod/RoleZod.d.ts.map +0 -1
  135. package/types/zod/TenantZod.d.ts +0 -10
  136. package/types/zod/TenantZod.d.ts.map +0 -1
  137. package/types/zod/UserZod.d.ts +0 -53
  138. 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,7 +3,7 @@ import {IRole} from "../../../../identity-share/src/interfaces/IRole"
3
3
 
4
4
 
5
5
  const role = {
6
- _id: new mongoose.Types.ObjectId("646a661e44c93567c23d8d62"),
6
+ _id: "646a661e44c93567c23d8d62",
7
7
  name: "Admin",
8
8
  permissions: [],
9
9
  childRoles: [],
@@ -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 {PaginateResult} from "mongoose";
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: IPaginateResult = await roleReposirory.paginate(1,5)
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 {IPaginateResult} from "@drax/common-back";
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: IPaginateResult = await userRepository.paginate()
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 {IPaginateResult} from "@drax/common-back";
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: IPaginateResult = await roleReposirory.paginate(1,5)
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
  },