@drax/identity-back 0.1.2 → 0.1.6
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/middleware/apiKeyMiddleware.js +1 -1
- package/dist/repository/mongo/UserApiKeyMongoRepository.js +1 -1
- package/dist/routes/UserApiKeyRoutes.js +3 -3
- package/dist/services/RoleService.js +34 -8
- package/package.json +3 -4
- package/src/middleware/apiKeyMiddleware.ts +1 -1
- package/src/repository/mongo/UserApiKeyMongoRepository.ts +1 -1
- package/src/routes/UserApiKeyRoutes.ts +3 -3
- package/src/services/RoleService.ts +41 -16
- package/tsconfig.tsbuildinfo +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/UserApiKeyServiceFactory.d.ts +0 -4
- package/types/factory/UserApiKeyServiceFactory.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/graphql/resolvers/role.resolvers.d.ts +0 -52
- package/types/graphql/resolvers/role.resolvers.d.ts.map +0 -1
- package/types/graphql/resolvers/tenant.resolvers.d.ts +0 -49
- package/types/graphql/resolvers/tenant.resolvers.d.ts.map +0 -1
- package/types/graphql/resolvers/user-api-key.resolvers.d.ts +0 -37
- package/types/graphql/resolvers/user-api-key.resolvers.d.ts.map +0 -1
- package/types/graphql/resolvers/user.resolvers.d.ts +0 -67
- package/types/graphql/resolvers/user.resolvers.d.ts.map +0 -1
- package/types/index.d.ts +0 -35
- package/types/index.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/ITenantRepository.d.ts +0 -9
- package/types/interfaces/ITenantRepository.d.ts.map +0 -1
- package/types/interfaces/IUserApiKeyRepository.d.ts +0 -7
- package/types/interfaces/IUserApiKeyRepository.d.ts.map +0 -1
- package/types/interfaces/IUserRepository.d.ts +0 -10
- package/types/interfaces/IUserRepository.d.ts.map +0 -1
- package/types/middleware/apiKeyMiddleware.d.ts +0 -4
- package/types/middleware/apiKeyMiddleware.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/UserApiKeyModel.d.ts +0 -16
- package/types/models/UserApiKeyModel.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 -27
- package/types/permissions/IdentityPermissions.d.ts.map +0 -1
- package/types/rbac/Rbac.d.ts +0 -15
- 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/UserApiKeyMongoRepository.d.ts +0 -14
- package/types/repository/mongo/UserApiKeyMongoRepository.d.ts.map +0 -1
- package/types/repository/mongo/UserMongoRepository.d.ts +0 -17
- package/types/repository/mongo/UserMongoRepository.d.ts.map +0 -1
- package/types/repository/sqlite/RoleSqliteRepository.d.ts +0 -22
- package/types/repository/sqlite/RoleSqliteRepository.d.ts.map +0 -1
- package/types/repository/sqlite/TenantSqliteRepository.d.ts +0 -19
- package/types/repository/sqlite/TenantSqliteRepository.d.ts.map +0 -1
- package/types/repository/sqlite/UserApiKeySqliteRepository.d.ts +0 -19
- package/types/repository/sqlite/UserApiKeySqliteRepository.d.ts.map +0 -1
- package/types/repository/sqlite/UserSqliteRepository.d.ts +0 -25
- 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/UserApiKeyRoutes.d.ts +0 -4
- package/types/routes/UserApiKeyRoutes.d.ts.map +0 -1
- package/types/routes/UserAvatarRoutes.d.ts +0 -4
- 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/UserApiKeyService.d.ts +0 -15
- package/types/services/UserApiKeyService.d.ts.map +0 -1
- package/types/services/UserService.d.ts +0 -21
- package/types/services/UserService.d.ts.map +0 -1
- 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/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 -18
- package/types/utils/AuthUtils.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/UserApiKeyZod.d.ts +0 -16
- package/types/zod/UserApiKeyZod.d.ts.map +0 -1
- package/types/zod/UserZod.d.ts +0 -53
- package/types/zod/UserZod.d.ts.map +0 -1
|
@@ -16,7 +16,7 @@ async function apiKeyMiddleware(request, reply) {
|
|
|
16
16
|
if (userApiKey && userApiKey.user) {
|
|
17
17
|
request.authUser = userApiKey.user;
|
|
18
18
|
request.authUser.roleId = userApiKey.user.role.id;
|
|
19
|
-
request.authUser.tenantId = userApiKey.user
|
|
19
|
+
request.authUser.tenantId = userApiKey.user?.tenant?.id;
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
22
|
return;
|
|
@@ -44,7 +44,7 @@ class UserMongoRepository {
|
|
|
44
44
|
return userApiKey;
|
|
45
45
|
}
|
|
46
46
|
async findBySecret(secret) {
|
|
47
|
-
const userApiKey = await UserApiKeyModel.findOne({ secret: secret }).populate({ path: 'user', populate: { path: 'tenant role' } }).exec();
|
|
47
|
+
const userApiKey = await UserApiKeyModel.findOne({ secret: { $eq: secret }, deleted: { $ne: true } }).populate({ path: 'user', populate: { path: 'tenant role' } }).exec();
|
|
48
48
|
return userApiKey;
|
|
49
49
|
}
|
|
50
50
|
async paginate({ page = 1, limit = 5, orderBy = '', orderDesc = false, search = '', filters = [] }) {
|
|
@@ -41,7 +41,7 @@ async function UserApiKeyRoutes(fastify, options) {
|
|
|
41
41
|
});
|
|
42
42
|
fastify.post('/api/user-api-keys', async (request, reply) => {
|
|
43
43
|
try {
|
|
44
|
-
request.rbac.assertPermission(IdentityPermissions.
|
|
44
|
+
request.rbac.assertPermission(IdentityPermissions.CreateUserApiKey);
|
|
45
45
|
const payload = request.body;
|
|
46
46
|
payload.user = request.rbac.authUser.id;
|
|
47
47
|
const userApiKeyService = UserApiKeyServiceFactory();
|
|
@@ -65,7 +65,7 @@ async function UserApiKeyRoutes(fastify, options) {
|
|
|
65
65
|
});
|
|
66
66
|
fastify.put('/api/user-api-keys/:id', async (request, reply) => {
|
|
67
67
|
try {
|
|
68
|
-
request.rbac.assertPermission(IdentityPermissions.
|
|
68
|
+
request.rbac.assertPermission(IdentityPermissions.UpdateUserApiKey);
|
|
69
69
|
const id = request.params.id;
|
|
70
70
|
const payload = request.body;
|
|
71
71
|
const userApiKeyService = UserApiKeyServiceFactory();
|
|
@@ -93,7 +93,7 @@ async function UserApiKeyRoutes(fastify, options) {
|
|
|
93
93
|
});
|
|
94
94
|
fastify.delete('/api/user-api-keys/:id', async (request, reply) => {
|
|
95
95
|
try {
|
|
96
|
-
request.rbac.assertPermission(IdentityPermissions.
|
|
96
|
+
request.rbac.assertPermission(IdentityPermissions.DeleteUserApiKey);
|
|
97
97
|
const id = request.params.id;
|
|
98
98
|
const userApiKeyService = UserApiKeyServiceFactory();
|
|
99
99
|
let r = await userApiKeyService.delete(id);
|
|
@@ -14,6 +14,7 @@ class RoleService {
|
|
|
14
14
|
return role;
|
|
15
15
|
}
|
|
16
16
|
catch (e) {
|
|
17
|
+
console.error("Error creating role", e);
|
|
17
18
|
if (e instanceof ZodError) {
|
|
18
19
|
throw ZodErrorToValidationError(e, roleData);
|
|
19
20
|
}
|
|
@@ -28,6 +29,7 @@ class RoleService {
|
|
|
28
29
|
return role;
|
|
29
30
|
}
|
|
30
31
|
catch (e) {
|
|
32
|
+
console.error("Error updating role", e);
|
|
31
33
|
if (e instanceof ZodError) {
|
|
32
34
|
throw ZodErrorToValidationError(e, roleData);
|
|
33
35
|
}
|
|
@@ -35,24 +37,48 @@ class RoleService {
|
|
|
35
37
|
}
|
|
36
38
|
}
|
|
37
39
|
async delete(id) {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
+
try {
|
|
41
|
+
const deletedRole = await this._repository.delete(id);
|
|
42
|
+
return deletedRole;
|
|
43
|
+
}
|
|
44
|
+
catch (e) {
|
|
45
|
+
console.error("Error deleting role", e);
|
|
46
|
+
throw e;
|
|
47
|
+
}
|
|
40
48
|
}
|
|
41
49
|
async findById(id) {
|
|
42
|
-
|
|
43
|
-
|
|
50
|
+
try {
|
|
51
|
+
const role = await this._repository.findById(id);
|
|
52
|
+
return role;
|
|
53
|
+
}
|
|
54
|
+
catch (e) {
|
|
55
|
+
console.error("Error finding role by id", e);
|
|
56
|
+
throw e;
|
|
57
|
+
}
|
|
44
58
|
}
|
|
45
59
|
async findByName(name) {
|
|
46
|
-
|
|
47
|
-
|
|
60
|
+
try {
|
|
61
|
+
const role = await this._repository.findByName(name);
|
|
62
|
+
return role;
|
|
63
|
+
}
|
|
64
|
+
catch (e) {
|
|
65
|
+
console.error("Error finding role by name", e);
|
|
66
|
+
throw e;
|
|
67
|
+
}
|
|
48
68
|
}
|
|
49
69
|
async fetchAll() {
|
|
50
70
|
const roles = await this._repository.fetchAll();
|
|
51
71
|
return roles;
|
|
52
72
|
}
|
|
53
73
|
async paginate({ page = 1, limit = 5, orderBy = '', orderDesc = false, search = '', filters = [] }) {
|
|
54
|
-
|
|
55
|
-
|
|
74
|
+
try {
|
|
75
|
+
const pagination = await this._repository.paginate({ page, limit, orderBy, orderDesc, search, filters });
|
|
76
|
+
return pagination;
|
|
77
|
+
}
|
|
78
|
+
catch (e) {
|
|
79
|
+
console.error("Error paginating roles", e);
|
|
80
|
+
throw e;
|
|
81
|
+
}
|
|
56
82
|
}
|
|
57
83
|
}
|
|
58
84
|
export default RoleService;
|
package/package.json
CHANGED
|
@@ -3,13 +3,12 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "0.1.
|
|
6
|
+
"version": "0.1.6",
|
|
7
7
|
"description": "Identity module for user management, authentication and authorization.",
|
|
8
8
|
"main": "dist/index.js",
|
|
9
9
|
"types": "types/index.d.ts",
|
|
10
10
|
"type": "module",
|
|
11
11
|
"scripts": {
|
|
12
|
-
"serve": "nodemon --exec node --loader ts-node/esm src/index.ts",
|
|
13
12
|
"prepublish": "tsc && npm run copygql",
|
|
14
13
|
"clean": "rm -rf dist",
|
|
15
14
|
"copygql": "copyfiles -u 1 ./**/*.graphql dist/",
|
|
@@ -29,7 +28,7 @@
|
|
|
29
28
|
"dependencies": {
|
|
30
29
|
"@drax/common-back": "^0.1.0",
|
|
31
30
|
"@drax/common-share": "^0.1.0",
|
|
32
|
-
"@drax/identity-share": "^0.1.
|
|
31
|
+
"@drax/identity-share": "^0.1.6",
|
|
33
32
|
"bcryptjs": "^2.4.3",
|
|
34
33
|
"express-jwt": "^8.4.1",
|
|
35
34
|
"graphql": "^16.8.2",
|
|
@@ -60,5 +59,5 @@
|
|
|
60
59
|
"debug": "0"
|
|
61
60
|
}
|
|
62
61
|
},
|
|
63
|
-
"gitHead": "
|
|
62
|
+
"gitHead": "7f3a48c237eab6837d6b620ac8bfb0dc395c9fa6"
|
|
64
63
|
}
|
|
@@ -21,7 +21,7 @@ async function apiKeyMiddleware (request, reply) {
|
|
|
21
21
|
if(userApiKey && userApiKey.user){
|
|
22
22
|
request.authUser = userApiKey.user
|
|
23
23
|
request.authUser.roleId = userApiKey.user.role.id
|
|
24
|
-
request.authUser.tenantId = userApiKey.user
|
|
24
|
+
request.authUser.tenantId = userApiKey.user?.tenant?.id
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
return
|
|
@@ -61,7 +61,7 @@ class UserMongoRepository implements IUserApiKeyRepository {
|
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
async findBySecret(secret: string): Promise<IUserApiKey> {
|
|
64
|
-
const userApiKey: mongoose.HydratedDocument<IUserApiKey> = await UserApiKeyModel.findOne({secret: secret}).populate({path: 'user', populate: {path: 'tenant role'}}).exec()
|
|
64
|
+
const userApiKey: mongoose.HydratedDocument<IUserApiKey> = await UserApiKeyModel.findOne({secret: {$eq: secret}, deleted: {$ne: true} }).populate({path: 'user', populate: {path: 'tenant role'}}).exec()
|
|
65
65
|
return userApiKey
|
|
66
66
|
}
|
|
67
67
|
|
|
@@ -51,7 +51,7 @@ async function UserApiKeyRoutes(fastify, options) {
|
|
|
51
51
|
|
|
52
52
|
fastify.post('/api/user-api-keys', async (request, reply): Promise<IUserApiKey> => {
|
|
53
53
|
try {
|
|
54
|
-
request.rbac.assertPermission(IdentityPermissions.
|
|
54
|
+
request.rbac.assertPermission(IdentityPermissions.CreateUserApiKey)
|
|
55
55
|
const payload = request.body
|
|
56
56
|
payload.user = request.rbac.authUser.id
|
|
57
57
|
|
|
@@ -76,7 +76,7 @@ async function UserApiKeyRoutes(fastify, options) {
|
|
|
76
76
|
|
|
77
77
|
fastify.put('/api/user-api-keys/:id', async (request, reply): Promise<IUserApiKey> => {
|
|
78
78
|
try {
|
|
79
|
-
request.rbac.assertPermission(IdentityPermissions.
|
|
79
|
+
request.rbac.assertPermission(IdentityPermissions.UpdateUserApiKey)
|
|
80
80
|
const id = request.params.id
|
|
81
81
|
const payload = request.body
|
|
82
82
|
const userApiKeyService = UserApiKeyServiceFactory()
|
|
@@ -102,7 +102,7 @@ async function UserApiKeyRoutes(fastify, options) {
|
|
|
102
102
|
|
|
103
103
|
fastify.delete('/api/user-api-keys/:id', async (request, reply): Promise<any> => {
|
|
104
104
|
try {
|
|
105
|
-
request.rbac.assertPermission(IdentityPermissions.
|
|
105
|
+
request.rbac.assertPermission(IdentityPermissions.DeleteUserApiKey)
|
|
106
106
|
const id = request.params.id
|
|
107
107
|
const userApiKeyService = UserApiKeyServiceFactory()
|
|
108
108
|
let r = await userApiKeyService.delete(id)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import {IRoleRepository} from "../interfaces/IRoleRepository";
|
|
2
|
-
import {
|
|
2
|
+
import {ValidationError, ZodErrorToValidationError} from "@drax/common-back"
|
|
3
3
|
import {roleSchema} from "../zod/RoleZod.js";
|
|
4
4
|
import {ZodError} from "zod";
|
|
5
5
|
import UnauthorizedError from "../errors/UnauthorizedError.js";
|
|
@@ -22,6 +22,7 @@ class RoleService {
|
|
|
22
22
|
const role = await this._repository.create(roleData)
|
|
23
23
|
return role
|
|
24
24
|
} catch (e) {
|
|
25
|
+
console.error("Error creating role", e)
|
|
25
26
|
if (e instanceof ZodError) {
|
|
26
27
|
throw ZodErrorToValidationError(e, roleData)
|
|
27
28
|
}
|
|
@@ -36,6 +37,7 @@ class RoleService {
|
|
|
36
37
|
const role = await this._repository.update(id, roleData)
|
|
37
38
|
return role
|
|
38
39
|
} catch (e) {
|
|
40
|
+
console.error("Error updating role", e)
|
|
39
41
|
if (e instanceof ZodError) {
|
|
40
42
|
throw ZodErrorToValidationError(e, roleData)
|
|
41
43
|
}
|
|
@@ -44,19 +46,35 @@ class RoleService {
|
|
|
44
46
|
}
|
|
45
47
|
|
|
46
48
|
async delete(id: string): Promise<boolean> {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
49
|
+
try {
|
|
50
|
+
const deletedRole = await this._repository.delete(id);
|
|
51
|
+
return deletedRole;
|
|
52
|
+
} catch (e) {
|
|
53
|
+
console.error("Error deleting role", e)
|
|
54
|
+
throw e
|
|
55
|
+
}
|
|
50
56
|
}
|
|
51
57
|
|
|
52
58
|
async findById(id: string): Promise<IRole | null> {
|
|
53
|
-
|
|
54
|
-
|
|
59
|
+
try{
|
|
60
|
+
const role: IRole = await this._repository.findById(id);
|
|
61
|
+
return role
|
|
62
|
+
}catch (e){
|
|
63
|
+
console.error("Error finding role by id", e)
|
|
64
|
+
throw e;
|
|
65
|
+
}
|
|
66
|
+
|
|
55
67
|
}
|
|
56
68
|
|
|
57
69
|
async findByName(name: string): Promise<IRole | null> {
|
|
58
|
-
|
|
59
|
-
|
|
70
|
+
try{
|
|
71
|
+
const role: IRole = await this._repository.findByName(name);
|
|
72
|
+
return role
|
|
73
|
+
}catch (e){
|
|
74
|
+
console.error("Error finding role by name", e)
|
|
75
|
+
throw e;
|
|
76
|
+
}
|
|
77
|
+
|
|
60
78
|
}
|
|
61
79
|
|
|
62
80
|
async fetchAll(): Promise<IRole[]> {
|
|
@@ -65,14 +83,21 @@ class RoleService {
|
|
|
65
83
|
}
|
|
66
84
|
|
|
67
85
|
async paginate({
|
|
68
|
-
page= 1,
|
|
69
|
-
limit= 5,
|
|
70
|
-
orderBy= '',
|
|
71
|
-
orderDesc= false,
|
|
72
|
-
search= '',
|
|
73
|
-
filters= []
|
|
74
|
-
|
|
75
|
-
|
|
86
|
+
page = 1,
|
|
87
|
+
limit = 5,
|
|
88
|
+
orderBy = '',
|
|
89
|
+
orderDesc = false,
|
|
90
|
+
search = '',
|
|
91
|
+
filters = []
|
|
92
|
+
}: IDraxPaginateOptions): Promise<IDraxPaginateResult<IRole>> {
|
|
93
|
+
try{
|
|
94
|
+
const pagination = await this._repository.paginate({page, limit, orderBy, orderDesc, search, filters});
|
|
95
|
+
return pagination;
|
|
96
|
+
}catch (e){
|
|
97
|
+
console.error("Error paginating roles", e)
|
|
98
|
+
throw e;
|
|
99
|
+
}
|
|
100
|
+
|
|
76
101
|
}
|
|
77
102
|
|
|
78
103
|
|