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