@drax/identity-back 0.0.13 → 0.0.15

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 (72) hide show
  1. package/dist/config/IdentityConfig.js +12 -0
  2. package/dist/factory/RoleServiceFactory.js +16 -13
  3. package/dist/factory/UserServiceFactory.js +16 -14
  4. package/dist/graphql/resolvers/role.resolvers.js +7 -1
  5. package/dist/graphql/resolvers/user.resolvers.js +9 -1
  6. package/dist/index.js +11 -1
  7. package/dist/middleware/rbacMiddleware.js +4 -3
  8. package/dist/routes/RoleRoutes.js +7 -1
  9. package/dist/routes/UserRoutes.js +8 -1
  10. package/dist/setup/CreateOrUpdateRole.js +15 -0
  11. package/dist/setup/CreateUserIfNotExist.js +17 -0
  12. package/dist/setup/LoadConfigFromEnv.js +12 -0
  13. package/dist/setup/LoadPermissions.js +8 -0
  14. package/dist/setup/RecoveryUserPassword.js +9 -0
  15. package/dist/utils/AuthUtils.js +9 -5
  16. package/dist/utils/DbSetupUtils.js +10 -8
  17. package/package.json +2 -2
  18. package/src/config/IdentityConfig.ts +17 -0
  19. package/src/factory/RoleServiceFactory.ts +19 -13
  20. package/src/factory/UserServiceFactory.ts +18 -14
  21. package/src/graphql/resolvers/role.resolvers.ts +8 -2
  22. package/src/graphql/resolvers/user.resolvers.ts +9 -4
  23. package/src/index.ts +18 -1
  24. package/src/middleware/rbacMiddleware.ts +5 -3
  25. package/src/routes/RoleRoutes.ts +8 -2
  26. package/src/routes/UserRoutes.ts +8 -3
  27. package/src/setup/CreateOrUpdateRole.ts +19 -0
  28. package/src/setup/CreateUserIfNotExist.ts +21 -0
  29. package/src/setup/LoadConfigFromEnv.ts +16 -0
  30. package/src/setup/LoadPermissions.ts +12 -0
  31. package/src/setup/RecoveryUserPassword.ts +13 -0
  32. package/src/utils/AuthUtils.ts +10 -5
  33. package/src/utils/DbSetupUtils.ts +10 -8
  34. package/tsconfig.tsbuildinfo +1 -1
  35. package/types/config/IdentityConfig.d.ts +12 -0
  36. package/types/config/IdentityConfig.d.ts.map +1 -0
  37. package/types/factory/RoleServiceFactory.d.ts +2 -2
  38. package/types/factory/RoleServiceFactory.d.ts.map +1 -1
  39. package/types/factory/UserServiceFactory.d.ts +2 -2
  40. package/types/factory/UserServiceFactory.d.ts.map +1 -1
  41. package/types/graphql/resolvers/role.resolvers.d.ts.map +1 -1
  42. package/types/graphql/resolvers/user.resolvers.d.ts.map +1 -1
  43. package/types/index.d.ts +7 -1
  44. package/types/index.d.ts.map +1 -1
  45. package/types/interfaces/IID.d.ts +1 -1
  46. package/types/middleware/rbacMiddleware.d.ts.map +1 -1
  47. package/types/routes/RoleRoutes.d.ts.map +1 -1
  48. package/types/routes/UserRoutes.d.ts +1 -1
  49. package/types/routes/UserRoutes.d.ts.map +1 -1
  50. package/types/setup/CreateOrUpdateRole.d.ts +5 -0
  51. package/types/setup/CreateOrUpdateRole.d.ts.map +1 -0
  52. package/types/setup/CreateUserIfNotExist.d.ts +5 -0
  53. package/types/setup/CreateUserIfNotExist.d.ts.map +1 -0
  54. package/types/setup/LoadConfigFromEnv.d.ts +4 -0
  55. package/types/setup/LoadConfigFromEnv.d.ts.map +1 -0
  56. package/types/setup/LoadPermissions.d.ts +4 -0
  57. package/types/setup/LoadPermissions.d.ts.map +1 -0
  58. package/types/setup/RecoveryUserPassword.d.ts +4 -0
  59. package/types/setup/RecoveryUserPassword.d.ts.map +1 -0
  60. package/types/utils/AuthUtils.d.ts.map +1 -1
  61. package/types/utils/DbSetupUtils.d.ts +1 -1
  62. package/types/utils/DbSetupUtils.d.ts.map +1 -1
  63. package/types/zod/UserZod.d.ts +6 -6
  64. package/dist/i18n/messages/validation-i18n.js +0 -21
  65. package/dist/routes/authRoutes.js +0 -29
  66. package/dist/services/AuthService.js +0 -6
  67. package/types/i18n/messages/validation-i18n.d.ts +0 -4
  68. package/types/i18n/messages/validation-i18n.d.ts.map +0 -1
  69. package/types/routes/authRoutes.d.ts +0 -4
  70. package/types/routes/authRoutes.d.ts.map +0 -1
  71. package/types/services/AuthService.d.ts +0 -7
  72. package/types/services/AuthService.d.ts.map +0 -1
@@ -1,27 +1,31 @@
1
1
  import UserMongoRepository from "../repository/mongo/UserMongoRepository.js";
2
2
  import UserService from "../services/UserService.js";
3
3
  import UserSqliteRepository from "../repository/sqlite/UserSqliteRepository.js";
4
- import process from "node:process";
5
4
  import {DbEngine, DbSetupUtils} from "../utils/DbSetupUtils.js";
6
5
  import {IUserRepository} from "../interfaces/IUserRepository";
7
6
 
7
+ let userService: UserService
8
+
8
9
  const UserServiceFactory = () : UserService => {
9
10
 
10
- let userRepository: IUserRepository
11
- switch (DbSetupUtils.getDbEngine()) {
12
- case DbEngine.Mongo:
13
- console.log("UserServiceFactory DB ENGINE MONGODB")
14
- userRepository = new UserMongoRepository()
15
- break;
16
- case DbEngine.Sqlite:
17
- console.log("UserServiceFactory DB ENGINE SQLITE")
18
- userRepository = new UserSqliteRepository(process.env.SQLITE_DATABASE,false)
19
- userRepository.table()
20
- break;
11
+ if(!userService){
12
+ let userRepository: IUserRepository
13
+ switch (DbSetupUtils.getDbEngine()) {
14
+ case DbEngine.Mongo:
15
+ console.log("UserServiceFactory DB ENGINE MONGODB")
16
+ userRepository = new UserMongoRepository()
17
+ break;
18
+ case DbEngine.Sqlite:
19
+ console.log("UserServiceFactory DB ENGINE SQLITE")
20
+ userRepository = new UserSqliteRepository(DbSetupUtils.getDbConfig(),false)
21
+ userRepository.table()
22
+ break;
23
+ }
24
+
25
+ userService = new UserService(userRepository)
21
26
  }
22
27
 
23
- const userService = new UserService(userRepository)
24
28
  return userService
25
29
  }
26
30
 
27
- export default UserServiceFactory()
31
+ export default UserServiceFactory
@@ -5,12 +5,13 @@ import {GraphQLError} from "graphql";
5
5
  import {PermissionService} from "../../services/PermissionService.js";
6
6
  import UnauthorizedError from "../../errors/UnauthorizedError.js";
7
7
 
8
- const roleService = RoleServiceFactory
8
+
9
9
  export default {
10
10
  Query: {
11
11
  findRoleById: async (_, {id}, {rbac}) => {
12
12
  try {
13
13
  rbac.assertPermission(IdentityPermissions.ViewRole)
14
+ const roleService = RoleServiceFactory()
14
15
  return await roleService.findById(id)
15
16
  } catch (e) {
16
17
  if (e instanceof UnauthorizedError) {
@@ -22,6 +23,7 @@ export default {
22
23
  findRoleByName: async (_, {name}, {rbac}) => {
23
24
  try {
24
25
  rbac.assertPermission(IdentityPermissions.ViewRole)
26
+ const roleService = RoleServiceFactory()
25
27
  return await roleService.findByName(name)
26
28
  } catch (e) {
27
29
  if (e instanceof UnauthorizedError) {
@@ -33,6 +35,7 @@ export default {
33
35
  fetchRole: async (_, {}, {rbac}) => {
34
36
  try {
35
37
  rbac.assertPermission(IdentityPermissions.ViewRole)
38
+ const roleService = RoleServiceFactory()
36
39
  return await roleService.fetchAll()
37
40
  } catch (e) {
38
41
  if (e instanceof UnauthorizedError) {
@@ -55,6 +58,7 @@ export default {
55
58
  paginateRole: async (_, {page, limit, seach}, {rbac}) => {
56
59
  try {
57
60
  rbac.assertPermission(IdentityPermissions.ViewRole)
61
+ const roleService = RoleServiceFactory()
58
62
  return await roleService.paginate(page, limit, seach)
59
63
  } catch (e) {
60
64
  console.error("paginateRole",e)
@@ -69,6 +73,7 @@ export default {
69
73
  createRole: async (_, {input}, {rbac}) => {
70
74
  try {
71
75
  rbac.assertPermission(IdentityPermissions.CreateRole)
76
+ const roleService = RoleServiceFactory()
72
77
  return await roleService.create(input)
73
78
  } catch (e) {
74
79
  console.error("createRole",e)
@@ -85,7 +90,7 @@ export default {
85
90
  updateRole: async (_, {id, input}, {rbac}) => {
86
91
  try {
87
92
  rbac.assertPermission(IdentityPermissions.UpdateRole)
88
-
93
+ const roleService = RoleServiceFactory()
89
94
  const currentRole = await roleService.findById(id)
90
95
  if(currentRole.readonly){
91
96
  throw new ValidationError([{field:'name', reason:"role.readonly", value:input.name}])
@@ -106,6 +111,7 @@ export default {
106
111
  deleteRole: async (_, {id}, {rbac}) => {
107
112
  try {
108
113
  rbac.assertPermission(IdentityPermissions.DeleteRole)
114
+ const roleService = RoleServiceFactory()
109
115
  return await roleService.delete(id)
110
116
  } catch (e) {
111
117
  console.error("deleteRole",e)
@@ -5,13 +5,12 @@ import {IdentityPermissions} from "../../permissions/IdentityPermissions.js";
5
5
  import UnauthorizedError from "../../errors/UnauthorizedError.js";
6
6
  import BadCredentialsError from "../../errors/BadCredentialsError.js";
7
7
 
8
- const userService = UserServiceFactory
9
-
10
8
  export default {
11
9
  Query: {
12
10
  me: async (_, {}, {authUser}) => {
13
11
  try {
14
12
  if (authUser) {
13
+ let userService= UserServiceFactory()
15
14
  let user = await userService.findById(authUser.id)
16
15
  delete user.password
17
16
  return user
@@ -26,6 +25,7 @@ export default {
26
25
  findUserById: async (_, {id}, {rbac}) => {
27
26
  try {
28
27
  rbac.assertPermission(IdentityPermissions.ViewUser)
28
+ let userService= UserServiceFactory()
29
29
  return await userService.findById(id)
30
30
  } catch (e) {
31
31
  if (e instanceof UnauthorizedError) {
@@ -38,6 +38,7 @@ export default {
38
38
  paginateUser: async (_, {page, limit, search}, {rbac}) => {
39
39
  try {
40
40
  rbac.assertPermission(IdentityPermissions.ViewUser)
41
+ let userService= UserServiceFactory()
41
42
  return await userService.paginate(page, limit, search)
42
43
  } catch (e) {
43
44
  if (e instanceof UnauthorizedError) {
@@ -50,6 +51,7 @@ export default {
50
51
  Mutation: {
51
52
  auth: async (_, {input}) => {
52
53
  try {
54
+ let userService= UserServiceFactory()
53
55
  return await userService.auth(input.username, input.password)
54
56
  } catch (e) {
55
57
  console.error("auth", e)
@@ -63,6 +65,7 @@ export default {
63
65
  createUser: async (_, {input}, {rbac}) => {
64
66
  try {
65
67
  rbac.assertPermission(IdentityPermissions.CreateUser)
68
+ let userService= UserServiceFactory()
66
69
  const user = await userService.create(input)
67
70
  return user
68
71
  } catch (e) {
@@ -79,7 +82,7 @@ export default {
79
82
  updateUser: async (_, {id, input}, {rbac}) => {
80
83
  try {
81
84
  rbac.assertPermission(IdentityPermissions.UpdateUser)
82
-
85
+ let userService= UserServiceFactory()
83
86
  const user = await userService.update(id, input)
84
87
  return user
85
88
  } catch (e) {
@@ -94,6 +97,7 @@ export default {
94
97
  deleteUser: async (_, {id}, {rbac}) => {
95
98
  try {
96
99
  rbac.assertPermission(IdentityPermissions.DeleteUser)
100
+ let userService= UserServiceFactory()
97
101
  return await userService.delete(id)
98
102
  } catch (e) {
99
103
  console.error("deleteUser", e)
@@ -111,6 +115,7 @@ export default {
111
115
  throw new UnauthorizedError()
112
116
  }
113
117
  let userId = authUser.id
118
+ let userService= UserServiceFactory()
114
119
  return await userService.changeOwnPassword(userId, currentPassword, newPassword)
115
120
  } catch (e) {
116
121
  if (e instanceof ValidationError) {
@@ -124,7 +129,7 @@ export default {
124
129
  changeUserPassword: async (_, {userId, newPassword}, {rbac}) => {
125
130
  try {
126
131
  rbac.assertPermission(IdentityPermissions.UpdateUser)
127
-
132
+ let userService= UserServiceFactory()
128
133
  return await userService.changeUserPassword(userId, newPassword)
129
134
  } catch (e) {
130
135
  if (e instanceof ValidationError) {
package/src/index.ts CHANGED
@@ -12,9 +12,16 @@ import {jwtMiddleware} from "./middleware/jwtMiddleware.js";
12
12
  import {rbacMiddleware} from "./middleware/rbacMiddleware.js";
13
13
 
14
14
  import IdentityPermissions from "./permissions/IdentityPermissions.js";
15
+ import IdentityConfig from "./config/IdentityConfig.js";
15
16
  import UnauthorizedError from "./errors/UnauthorizedError.js";
16
17
  import BadCredentialsError from "./errors/BadCredentialsError.js";
17
18
 
19
+ import CreateUserIfNotExist from "./setup/CreateUserIfNotExist.js";
20
+ import CreateOrUpdateRole from "./setup/CreateOrUpdateRole.js";
21
+ import LoadPermissions from "./setup/LoadPermissions.js";
22
+ import LoadConfigFromEnv from "./setup/LoadConfigFromEnv.js";
23
+ import RecoveryUserPassword from "./setup/RecoveryUserPassword.js";
24
+
18
25
  import type {IJwtUser} from "./interfaces/IJwtUser";
19
26
  import type {IRole, IRoleBase} from "./interfaces/IRole";
20
27
  import type {IUser, IUserCreate, IUserUpdate} from "./interfaces/IUser";
@@ -62,9 +69,19 @@ export {
62
69
  //Permissions
63
70
  IdentityPermissions,
64
71
 
72
+ //Config
73
+ IdentityConfig,
74
+
65
75
  //Errors
66
76
  UnauthorizedError,
67
- BadCredentialsError
77
+ BadCredentialsError,
78
+
79
+ //Setup
80
+ LoadConfigFromEnv,
81
+ LoadPermissions,
82
+ CreateOrUpdateRole,
83
+ CreateUserIfNotExist,
84
+ RecoveryUserPassword
68
85
  }
69
86
 
70
87
 
@@ -1,14 +1,16 @@
1
1
  import type {IJwtUser} from "../interfaces/IJwtUser";
2
2
  import type {IRole, IRoleBase} from "../interfaces/IRole";
3
- import {DraxCache} from "@drax/common-back";
3
+ import {DraxCache, DraxConfig} from "@drax/common-back";
4
4
  import RoleServiceFactory from "../factory/RoleServiceFactory.js";
5
5
  import Rbac from "../rbac/Rbac.js";
6
+ import IdentityConfig from "../config/IdentityConfig.js";
6
7
 
7
- const cacheTTL = process.env.RBAC_CACHE_TTL ? parseInt(process.env.RBAC_CACHE_TTL) : 10000;
8
+ const cacheTTL = DraxConfig.getOrLoad(IdentityConfig.RbacCacheTTL) ? parseInt(DraxConfig.getOrLoad(IdentityConfig.RbacCacheTTL)) : 10000;
8
9
  const draxCache = new DraxCache<IRoleBase>(cacheTTL);
9
- const roleService = RoleServiceFactory
10
+
10
11
 
11
12
  async function roleLoader(k):Promise<IRoleBase | null> {
13
+ const roleService = RoleServiceFactory()
12
14
  const role: IRole = await roleService.findById(k)
13
15
  if(role){
14
16
  return {id: role.id, name: role.name, permissions: role.permissions} as IRoleBase
@@ -5,7 +5,7 @@ import {IdentityPermissions} from "../permissions/IdentityPermissions.js";
5
5
  import {PermissionService} from "../services/PermissionService.js";
6
6
  import UnauthorizedError from "../errors/UnauthorizedError.js";
7
7
 
8
- const roleService = RoleServiceFactory
8
+
9
9
 
10
10
  async function RoleRoutes(fastify, options) {
11
11
 
@@ -30,6 +30,7 @@ async function RoleRoutes(fastify, options) {
30
30
  try {
31
31
  request.rbac.assertPermission(IdentityPermissions.ViewRole)
32
32
  const id = request.params.id
33
+ const roleService = RoleServiceFactory()
33
34
  let role = await roleService.findById(id)
34
35
  return role
35
36
  } catch (e) {
@@ -51,6 +52,7 @@ async function RoleRoutes(fastify, options) {
51
52
  try {
52
53
  request.rbac.assertPermission(IdentityPermissions.ViewRole)
53
54
  const name = request.params.name
55
+ const roleService = RoleServiceFactory()
54
56
  let role = await roleService.findByName(name)
55
57
  return role
56
58
  } catch (e) {
@@ -71,6 +73,7 @@ async function RoleRoutes(fastify, options) {
71
73
  fastify.get('/api/roles/all', async (request, reply): Promise<IRole[]> => {
72
74
  try {
73
75
  request.rbac.assertPermission(IdentityPermissions.ViewRole)
76
+ const roleService = RoleServiceFactory()
74
77
  let roles = await roleService.fetchAll()
75
78
  return roles
76
79
  } catch (e) {
@@ -94,6 +97,7 @@ async function RoleRoutes(fastify, options) {
94
97
  const page = request.query.page
95
98
  const limit = request.query.limit
96
99
  const search = request.query.search
100
+ const roleService = RoleServiceFactory()
97
101
  let paginateResult = await roleService.paginate(page, limit, search)
98
102
  return paginateResult
99
103
  } catch (e) {
@@ -115,6 +119,7 @@ async function RoleRoutes(fastify, options) {
115
119
  try {
116
120
  request.rbac.assertPermission(IdentityPermissions.CreateRole)
117
121
  const payload = request.body
122
+ const roleService = RoleServiceFactory()
118
123
  let role = await roleService.create(payload)
119
124
  return role
120
125
  } catch (e) {
@@ -138,7 +143,7 @@ async function RoleRoutes(fastify, options) {
138
143
  request.rbac.assertPermission(IdentityPermissions.UpdateRole)
139
144
  const id = request.params.id
140
145
  const payload = request.body
141
-
146
+ const roleService = RoleServiceFactory()
142
147
  const currentRole = await roleService.findById(id)
143
148
  if(currentRole.readonly){
144
149
  throw new ValidationError([{field:'name', reason:"role.readonly", value:payload.name}])
@@ -166,6 +171,7 @@ async function RoleRoutes(fastify, options) {
166
171
  try {
167
172
  request.rbac.assertPermission(IdentityPermissions.DeleteRole)
168
173
  const id = request.params.id
174
+ const roleService = RoleServiceFactory()
169
175
  let r = await roleService.delete(id)
170
176
  return r
171
177
  } catch (e) {
@@ -5,13 +5,12 @@ import {IdentityPermissions} from "../permissions/IdentityPermissions.js";
5
5
  import UnauthorizedError from "../errors/UnauthorizedError.js";
6
6
  import BadCredentialsError from "../errors/BadCredentialsError.js";
7
7
 
8
- const userService = UserServiceFactory
9
-
10
8
  async function UserRoutes(fastify, options) {
11
9
  fastify.post('/api/auth', async (request, reply) => {
12
10
  try {
13
11
  const username = request.body.username
14
12
  const password = request.body.password
13
+ const userService = UserServiceFactory()
15
14
  return await userService.auth(username, password)
16
15
  } catch (e) {
17
16
  console.error('/api/auth error', e)
@@ -30,6 +29,7 @@ async function UserRoutes(fastify, options) {
30
29
  fastify.get('/api/me', async (request, reply): Promise<IUser | null> => {
31
30
  try {
32
31
  if (request.authUser) {
32
+ const userService = UserServiceFactory()
33
33
  let user = await userService.findById(request.authUser.id)
34
34
  delete user.password
35
35
  return user
@@ -60,6 +60,7 @@ async function UserRoutes(fastify, options) {
60
60
  const page = request.query.page
61
61
  const limit = request.query.limit
62
62
  const search = request.query.search
63
+ const userService = UserServiceFactory()
63
64
  let paginateResult = await userService.paginate(page, limit, search)
64
65
  return paginateResult
65
66
  } catch (e) {
@@ -80,6 +81,7 @@ async function UserRoutes(fastify, options) {
80
81
  try {
81
82
  request.rbac.assertPermission(IdentityPermissions.CreateUser)
82
83
  const payload = request.body
84
+ const userService = UserServiceFactory()
83
85
  let user = await userService.create(payload)
84
86
  return user
85
87
  } catch (e) {
@@ -102,6 +104,7 @@ async function UserRoutes(fastify, options) {
102
104
  request.rbac.assertPermission(IdentityPermissions.UpdateUser)
103
105
  const id = request.params.id
104
106
  const payload = request.body
107
+ const userService = UserServiceFactory()
105
108
  let user = await userService.update(id, payload)
106
109
  return user
107
110
  } catch (e) {
@@ -126,6 +129,7 @@ async function UserRoutes(fastify, options) {
126
129
  try {
127
130
  request.rbac.assertPermission(IdentityPermissions.DeleteUser)
128
131
  const id = request.params.id
132
+ const userService = UserServiceFactory()
129
133
  let r = await userService.delete(id)
130
134
  return r
131
135
  } catch (e) {
@@ -150,6 +154,7 @@ async function UserRoutes(fastify, options) {
150
154
  const userId = request.authUser.id
151
155
  const currentPassword = request.body.currentPassword
152
156
  const newPassword = request.body.newPassword
157
+ const userService = UserServiceFactory()
153
158
  return await userService.changeOwnPassword(userId, currentPassword, newPassword)
154
159
  } catch (e) {
155
160
  console.error('/api/password error', e)
@@ -175,7 +180,7 @@ async function UserRoutes(fastify, options) {
175
180
  throw new UnauthorizedError()
176
181
  }
177
182
  const newPassword = request.body.newPassword
178
-
183
+ const userService = UserServiceFactory()
179
184
  return await userService.changeUserPassword(userId, newPassword)
180
185
  } catch (e) {
181
186
  console.error('/api/password error', e)
@@ -0,0 +1,19 @@
1
+ import type {IRole} from "../interfaces/IRole"
2
+ import RoleServiceFactory from "../factory/RoleServiceFactory.js"
3
+
4
+ async function CreateOrUpdateRole(roleData: IRole) {
5
+ const roleService = RoleServiceFactory()
6
+ const role = await roleService.findByName(roleData.name)
7
+ if(role){
8
+ const r = await roleService.update(role.id, roleData)
9
+ console.log("Role Updated. Name: "+ roleData.name)
10
+ }else{
11
+ const r = await roleService.create(roleData)
12
+ console.log("Role Created. Name: "+ roleData.name)
13
+ }
14
+ }
15
+
16
+ export default CreateOrUpdateRole
17
+ export {
18
+ CreateOrUpdateRole
19
+ }
@@ -0,0 +1,21 @@
1
+ import RoleServiceFactory from "../factory/RoleServiceFactory.js"
2
+ import UserServiceFactory from "../factory/UserServiceFactory.js"
3
+ import {IUserCreate} from "../interfaces/IUser";
4
+
5
+ async function CreateUserIfNotExist(userData: IUserCreate) {
6
+ const userService = UserServiceFactory()
7
+ const roleService = RoleServiceFactory()
8
+ const user = await userService.findByUsername(userData.username)
9
+ if (user) {
10
+ } else {
11
+ const role = await roleService.findByName(userData.role as string)
12
+ userData.role = role.id as string
13
+ const r = await userService.create(userData)
14
+ console.log("User Created. Username: " + userData.username)
15
+ }
16
+ }
17
+
18
+ export default CreateUserIfNotExist
19
+ export {
20
+ CreateUserIfNotExist
21
+ }
@@ -0,0 +1,16 @@
1
+ import {DraxConfig} from "@drax/common-back";
2
+ import IdentityConfig from "../config/IdentityConfig.js";
3
+
4
+ function LoadConfigFromEnv() {
5
+ DraxConfig.set(IdentityConfig.DbEngine, process.env[IdentityConfig.DbEngine])
6
+ DraxConfig.set(IdentityConfig.SqliteDbFile, process.env[IdentityConfig.SqliteDbFile])
7
+ DraxConfig.set(IdentityConfig.MongoDbUri, process.env[IdentityConfig.MongoDbUri])
8
+ DraxConfig.set(IdentityConfig.JwtSecret, process.env[IdentityConfig.JwtSecret])
9
+ DraxConfig.set(IdentityConfig.JwtExpiration, process.env[IdentityConfig.JwtExpiration])
10
+ DraxConfig.set(IdentityConfig.JwtIssuer, process.env[IdentityConfig.JwtIssuer])
11
+ }
12
+
13
+ export default LoadConfigFromEnv
14
+ export {
15
+ LoadConfigFromEnv
16
+ }
@@ -0,0 +1,12 @@
1
+ import {PermissionService} from "../services/PermissionService.js";
2
+
3
+ function LoadPermissions(permissions: string[]) {
4
+ for(const permission of permissions){
5
+ PermissionService.addPermission(permission)
6
+ }
7
+ }
8
+
9
+ export default LoadPermissions
10
+ export {
11
+ LoadPermissions
12
+ }
@@ -0,0 +1,13 @@
1
+ import UserServiceFactory from "../factory/UserServiceFactory.js"
2
+
3
+ async function RecoveryUserPassword(username:string, password:string) {
4
+ const userService = UserServiceFactory()
5
+ const user = await userService.findByUsername(username)
6
+ const r = await userService.changeUserPassword(user.id as string, password)
7
+ console.log("User password recovered. Username: " + username)
8
+ }
9
+
10
+ export default RecoveryUserPassword
11
+ export {
12
+ RecoveryUserPassword
13
+ }
@@ -1,12 +1,14 @@
1
1
  import bcryptjs from "bcryptjs";
2
2
  import jsonwebtoken, {SignOptions, VerifyOptions} from "jsonwebtoken";
3
+ import {DraxConfig} from "@drax/common-back";
4
+ import IdentityConfig from "../config/IdentityConfig.js";
3
5
 
4
6
  class AuthUtils{
5
7
 
6
8
  static verifyToken(token : string) {
7
- const JWT_SECRET = process.env.JWT_SECRET
9
+ const JWT_SECRET = DraxConfig.getOrLoad(IdentityConfig.JwtSecret)
8
10
  if(!JWT_SECRET){
9
- throw new Error("JWT_SECRET ENV must be provided")
11
+ throw new Error("DraxConfig.JWT_SECRET must be provided")
10
12
  }
11
13
  const options : VerifyOptions = {
12
14
  algorithms: ['HS256'],
@@ -40,17 +42,20 @@ class AuthUtils{
40
42
  static generateToken(userId : string, username: string, roleId: string, session : string) {
41
43
  const payload = AuthUtils.tokenSignPayload(userId, username, roleId, session)
42
44
 
43
- const JWT_SECRET = process.env.JWT_SECRET
45
+ const JWT_SECRET = DraxConfig.getOrLoad(IdentityConfig.JwtSecret)
44
46
  if(!JWT_SECRET){
45
47
  throw new Error("JWT_SECRET ENV must be provided")
46
48
  }
47
49
 
50
+ const JWT_EXPIRATION = DraxConfig.getOrLoad(IdentityConfig.JwtExpiration) || '1h'
51
+ const JWT_ISSUER = DraxConfig.getOrLoad(IdentityConfig.JwtIssuer) || 'DRAX'
52
+
48
53
  const options : SignOptions = {
49
- expiresIn: process.env.JWT_EXPIRATION || '1h',
54
+ expiresIn: JWT_EXPIRATION,
50
55
  jwtid: userId,
51
56
  algorithm: 'HS256',
52
57
  audience: username,
53
- issuer: process.env.JWT_ISSUER? process.env.JWT_ISSUER : 'drax'
58
+ issuer: JWT_ISSUER
54
59
  }
55
60
 
56
61
  let token = jsonwebtoken.sign(
@@ -1,3 +1,5 @@
1
+ import IdentityConfig from "../config/IdentityConfig.js";
2
+ import {DraxConfig} from "@drax/common-back";
1
3
 
2
4
  enum DbEngine{
3
5
  Sqlite = "sqlite",
@@ -9,24 +11,24 @@ class DbSetupUtils{
9
11
 
10
12
 
11
13
  static getDbEngine() {
12
- if (!process.env.DB_ENGINE) {
13
- throw new Error("process.env.DB_ENGINE is not defined");
14
+ if (!DraxConfig.getOrLoad(IdentityConfig.DbEngine)) {
15
+ throw new Error("DraxConfig.DB_ENGINE is not defined");
14
16
  }
15
- const dbEngine = process.env.DB_ENGINE as DbEngine;
17
+ const dbEngine = DraxConfig.getOrLoad(IdentityConfig.DbEngine) as DbEngine;
16
18
  if (!Object.values(DbEngine).includes(dbEngine)) {
17
- throw new Error("process.env.DB_ENGINE must be one of " + Object.values(DbEngine).join(", "));
19
+ throw new Error("DraxConfig.DB_ENGINE must be one of " + Object.values(DbEngine).join(", "));
18
20
  }
19
21
  return dbEngine;
20
22
  }
21
23
 
22
- static getDbUri(){
24
+ static getDbConfig(){
23
25
  switch (DbSetupUtils.getDbEngine()) {
24
26
  case DbEngine.Mongo:
25
- return process.env.MONGO_URI;
27
+ return DraxConfig.getOrLoad(IdentityConfig.MongoDbUri);
26
28
  case DbEngine.Sqlite:
27
- return process.env.SQLITE_DATABASE;
29
+ return DraxConfig.getOrLoad(IdentityConfig.SqliteDbFile);
28
30
  default:
29
- throw new Error("process.env.DB_ENGINE must be one of " + Object.values(DbEngine).join(", "));
31
+ throw new Error("DraxConfig.DB_ENGINE must be one of " + Object.values(DbEngine).join(", "));
30
32
  }
31
33
  }
32
34