@neohm/nestend 2.0.4 → 3.0.0
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/README.md +77 -28
- package/dist/admin/controllers/admin.user.controller.d.ts +1 -1
- package/dist/admin/controllers/admin.user.controller.js +4 -4
- package/dist/admin/controllers/admin.user.controller.js.map +1 -1
- package/dist/admin/dtos/add.admin.user.dto.d.ts +6 -2
- package/dist/admin/dtos/add.admin.user.dto.d.ts.map +1 -1
- package/dist/admin/dtos/add.admin.user.dto.js +33 -3
- package/dist/admin/dtos/add.admin.user.dto.js.map +1 -1
- package/dist/admin/dtos/base.user.dto.d.ts +0 -1
- package/dist/admin/dtos/base.user.dto.d.ts.map +1 -1
- package/dist/admin/dtos/base.user.dto.js +0 -11
- package/dist/admin/dtos/base.user.dto.js.map +1 -1
- package/dist/admin/es6.classes.d.ts +2 -1
- package/dist/admin/es6.classes.d.ts.map +1 -1
- package/dist/admin/es6.classes.js +24 -3
- package/dist/admin/es6.classes.js.map +1 -1
- package/dist/admin/libraries/admin.user.data.processor.d.ts +11 -4
- package/dist/admin/libraries/admin.user.data.processor.d.ts.map +1 -1
- package/dist/admin/libraries/admin.user.data.processor.js +55 -17
- package/dist/admin/libraries/admin.user.data.processor.js.map +1 -1
- package/dist/admin/libraries/bulk.user.data.processor.d.ts +1 -1
- package/dist/admin/libraries/bulk.user.data.processor.d.ts.map +1 -1
- package/dist/admin/libraries/bulk.user.data.processor.js +2 -13
- package/dist/admin/libraries/bulk.user.data.processor.js.map +1 -1
- package/dist/admin/libraries/client.user.data.processor.d.ts +1 -1
- package/dist/admin/libraries/client.user.data.processor.d.ts.map +1 -1
- package/dist/admin/libraries/client.user.data.processor.js +2 -6
- package/dist/admin/libraries/client.user.data.processor.js.map +1 -1
- package/dist/admin/libraries/scheduled.task.data.processor.d.ts +3 -3
- package/dist/admin/libraries/scheduled.task.data.processor.d.ts.map +1 -1
- package/dist/admin/libraries/scheduled.task.data.processor.js.map +1 -1
- package/dist/admin/libraries/tenant.data.processor.d.ts +2 -2
- package/dist/admin/libraries/tenant.data.processor.d.ts.map +1 -1
- package/dist/admin/libraries/tenant.data.processor.js.map +1 -1
- package/dist/admin/libraries/user.data.processor.d.ts +0 -11
- package/dist/admin/libraries/user.data.processor.d.ts.map +1 -1
- package/dist/admin/libraries/user.data.processor.js +0 -44
- package/dist/admin/libraries/user.data.processor.js.map +1 -1
- package/dist/admin/services/admin.access.service.d.ts +8 -8
- package/dist/admin/services/admin.access.service.d.ts.map +1 -1
- package/dist/admin/services/admin.access.service.js +8 -8
- package/dist/admin/services/admin.access.service.js.map +1 -1
- package/dist/auth/auth.module.d.ts.map +1 -1
- package/dist/auth/auth.module.js +17 -5
- package/dist/auth/auth.module.js.map +1 -1
- package/dist/auth/controllers/admin.auth.controller.d.ts +20 -0
- package/dist/auth/controllers/admin.auth.controller.d.ts.map +1 -0
- package/dist/auth/controllers/admin.auth.controller.js +95 -0
- package/dist/auth/controllers/admin.auth.controller.js.map +1 -0
- package/dist/auth/controllers/auth.controller.d.ts.map +1 -1
- package/dist/auth/controllers/auth.controller.js +7 -4
- package/dist/auth/controllers/auth.controller.js.map +1 -1
- package/dist/auth/dtos/admin.login.dto.d.ts +5 -0
- package/dist/auth/dtos/admin.login.dto.d.ts.map +1 -0
- package/dist/auth/dtos/admin.login.dto.js +30 -0
- package/dist/auth/dtos/admin.login.dto.js.map +1 -0
- package/dist/auth/entities/admin.user.entity.d.ts +11 -0
- package/dist/auth/entities/admin.user.entity.d.ts.map +1 -0
- package/dist/auth/entities/admin.user.entity.js +47 -0
- package/dist/auth/entities/admin.user.entity.js.map +1 -0
- package/dist/auth/entities/api.key.entity.d.ts +2 -2
- package/dist/auth/entities/api.key.entity.d.ts.map +1 -1
- package/dist/auth/entities/api.key.entity.js +2 -2
- package/dist/auth/entities/api.key.entity.js.map +1 -1
- package/dist/auth/entities/api.scope.entity.d.ts +13 -0
- package/dist/auth/entities/api.scope.entity.d.ts.map +1 -0
- package/dist/auth/entities/api.scope.entity.js +51 -0
- package/dist/auth/entities/api.scope.entity.js.map +1 -0
- package/dist/auth/entities/scope.entity.d.ts +7 -0
- package/dist/auth/entities/scope.entity.d.ts.map +1 -0
- package/dist/auth/entities/scope.entity.js +34 -0
- package/dist/auth/entities/scope.entity.js.map +1 -0
- package/dist/auth/entities/system.admin.role.entity.d.ts +11 -0
- package/dist/auth/entities/system.admin.role.entity.d.ts.map +1 -0
- package/dist/auth/entities/system.admin.role.entity.js +46 -0
- package/dist/auth/entities/system.admin.role.entity.js.map +1 -0
- package/dist/auth/entities/system.admin.user.role.entity.d.ts +10 -0
- package/dist/auth/entities/system.admin.user.role.entity.d.ts.map +1 -0
- package/dist/auth/entities/system.admin.user.role.entity.js +41 -0
- package/dist/auth/entities/system.admin.user.role.entity.js.map +1 -0
- package/dist/auth/entities/system.auth.session.entity.d.ts +9 -0
- package/dist/auth/entities/system.auth.session.entity.d.ts.map +1 -0
- package/dist/auth/entities/system.auth.session.entity.js +42 -0
- package/dist/auth/entities/system.auth.session.entity.js.map +1 -0
- package/dist/auth/entities/system.refresh.token.entity.d.ts +1 -0
- package/dist/auth/entities/system.refresh.token.entity.d.ts.map +1 -1
- package/dist/auth/entities/system.refresh.token.entity.js +4 -0
- package/dist/auth/entities/system.refresh.token.entity.js.map +1 -1
- package/dist/auth/entities/system.role.entity.d.ts +3 -4
- package/dist/auth/entities/system.role.entity.d.ts.map +1 -1
- package/dist/auth/entities/system.role.entity.js +5 -8
- package/dist/auth/entities/system.role.entity.js.map +1 -1
- package/dist/auth/es6.classes.d.ts +6 -4
- package/dist/auth/es6.classes.d.ts.map +1 -1
- package/dist/auth/es6.classes.js +32 -6
- package/dist/auth/es6.classes.js.map +1 -1
- package/dist/auth/helpers/admin.auth.d.ts +6 -0
- package/dist/auth/helpers/admin.auth.d.ts.map +1 -0
- package/dist/auth/helpers/admin.auth.js +29 -0
- package/dist/auth/helpers/admin.auth.js.map +1 -0
- package/dist/auth/helpers/api.key.context.d.ts +6 -0
- package/dist/auth/helpers/api.key.context.d.ts.map +1 -0
- package/dist/auth/helpers/api.key.context.js +15 -0
- package/dist/auth/helpers/api.key.context.js.map +1 -0
- package/dist/auth/helpers/auth.d.ts +6 -0
- package/dist/auth/helpers/auth.d.ts.map +1 -0
- package/dist/auth/helpers/auth.js +27 -0
- package/dist/auth/helpers/auth.js.map +1 -0
- package/dist/auth/middlewares/admin.jwt.middleware.d.ts +10 -0
- package/dist/auth/middlewares/admin.jwt.middleware.d.ts.map +1 -0
- package/dist/auth/middlewares/admin.jwt.middleware.js +59 -0
- package/dist/auth/middlewares/admin.jwt.middleware.js.map +1 -0
- package/dist/auth/middlewares/api.key.middleware.d.ts +10 -0
- package/dist/auth/middlewares/api.key.middleware.d.ts.map +1 -0
- package/dist/auth/middlewares/api.key.middleware.js +47 -0
- package/dist/auth/middlewares/api.key.middleware.js.map +1 -0
- package/dist/auth/middlewares/jwt.middleware.d.ts +10 -0
- package/dist/auth/middlewares/jwt.middleware.d.ts.map +1 -0
- package/dist/auth/middlewares/jwt.middleware.js +59 -0
- package/dist/auth/middlewares/jwt.middleware.js.map +1 -0
- package/dist/auth/services/admin.auth.service.d.ts +19 -0
- package/dist/auth/services/admin.auth.service.d.ts.map +1 -0
- package/dist/auth/services/admin.auth.service.js +160 -0
- package/dist/auth/services/admin.auth.service.js.map +1 -0
- package/dist/auth/services/auth.service.d.ts +4 -5
- package/dist/auth/services/auth.service.d.ts.map +1 -1
- package/dist/auth/services/auth.service.js +41 -35
- package/dist/auth/services/auth.service.js.map +1 -1
- package/dist/auth/types/auth.types.d.ts +7 -4
- package/dist/auth/types/auth.types.d.ts.map +1 -1
- package/dist/common/consumers/job.consumer.d.ts +1 -0
- package/dist/common/consumers/job.consumer.d.ts.map +1 -1
- package/dist/common/consumers/job.consumer.js +7 -2
- package/dist/common/consumers/job.consumer.js.map +1 -1
- package/dist/common/controllers/common.controller.js +1 -1
- package/dist/common/controllers/common.controller.js.map +1 -1
- package/dist/common/entities/common.admin.entity.d.ts +7 -0
- package/dist/common/entities/common.admin.entity.d.ts.map +1 -0
- package/dist/common/entities/common.admin.entity.js +28 -0
- package/dist/common/entities/common.admin.entity.js.map +1 -0
- package/dist/common/entities/root.entity.d.ts.map +1 -1
- package/dist/common/entities/root.entity.js +11 -2
- package/dist/common/entities/root.entity.js.map +1 -1
- package/dist/constants/entity.constants.d.ts +6 -0
- package/dist/constants/entity.constants.d.ts.map +1 -1
- package/dist/constants/entity.constants.js +6 -0
- package/dist/constants/entity.constants.js.map +1 -1
- package/dist/constants/entity.maps.d.ts +12 -0
- package/dist/constants/entity.maps.d.ts.map +1 -1
- package/dist/constants/entity.maps.js +12 -0
- package/dist/constants/entity.maps.js.map +1 -1
- package/dist/global/filters/global.exception.filter.d.ts.map +1 -1
- package/dist/global/filters/global.exception.filter.js +6 -2
- package/dist/global/filters/global.exception.filter.js.map +1 -1
- package/dist/global/utilities/migration.utility.d.ts +4 -0
- package/dist/global/utilities/migration.utility.d.ts.map +1 -1
- package/dist/global/utilities/migration.utility.js +70 -8
- package/dist/global/utilities/migration.utility.js.map +1 -1
- package/dist/index.d.ts +26 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +55 -8
- package/dist/index.js.map +1 -1
- package/dist/migrations/1749600000003.CreateSysRolesTable.d.ts.map +1 -1
- package/dist/migrations/1749600000003.CreateSysRolesTable.js +3 -4
- package/dist/migrations/1749600000003.CreateSysRolesTable.js.map +1 -1
- package/dist/migrations/1749600000021.CreateSysAdminUsersTable.d.ts +6 -0
- package/dist/migrations/1749600000021.CreateSysAdminUsersTable.d.ts.map +1 -0
- package/dist/migrations/1749600000021.CreateSysAdminUsersTable.js +23 -0
- package/dist/migrations/1749600000021.CreateSysAdminUsersTable.js.map +1 -0
- package/dist/migrations/1749600000022.CreateSysAdminRolesTable.d.ts +6 -0
- package/dist/migrations/1749600000022.CreateSysAdminRolesTable.d.ts.map +1 -0
- package/dist/migrations/1749600000022.CreateSysAdminRolesTable.js +21 -0
- package/dist/migrations/1749600000022.CreateSysAdminRolesTable.js.map +1 -0
- package/dist/migrations/1749600000023.CreateSysAdminUserRolesJoinTable.d.ts +6 -0
- package/dist/migrations/1749600000023.CreateSysAdminUserRolesJoinTable.d.ts.map +1 -0
- package/dist/migrations/1749600000023.CreateSysAdminUserRolesJoinTable.js +34 -0
- package/dist/migrations/1749600000023.CreateSysAdminUserRolesJoinTable.js.map +1 -0
- package/dist/migrations/1749600000024.CreateSysAuthSessionsTable.d.ts +6 -0
- package/dist/migrations/1749600000024.CreateSysAuthSessionsTable.d.ts.map +1 -0
- package/dist/migrations/1749600000024.CreateSysAuthSessionsTable.js +22 -0
- package/dist/migrations/1749600000024.CreateSysAuthSessionsTable.js.map +1 -0
- package/dist/migrations/1749600000025.CreateSysScopesTable.d.ts +6 -0
- package/dist/migrations/1749600000025.CreateSysScopesTable.d.ts.map +1 -0
- package/dist/migrations/1749600000025.CreateSysScopesTable.js +25 -0
- package/dist/migrations/1749600000025.CreateSysScopesTable.js.map +1 -0
- package/dist/migrations/1749600000026.CreateSysApiScopesTable.d.ts +6 -0
- package/dist/migrations/1749600000026.CreateSysApiScopesTable.d.ts.map +1 -0
- package/dist/migrations/1749600000026.CreateSysApiScopesTable.js +39 -0
- package/dist/migrations/1749600000026.CreateSysApiScopesTable.js.map +1 -0
- package/dist/migrations/1749600000027.RetargetSysApiKeysCreatedByToAdminUsers.d.ts +8 -0
- package/dist/migrations/1749600000027.RetargetSysApiKeysCreatedByToAdminUsers.d.ts.map +1 -0
- package/dist/migrations/1749600000027.RetargetSysApiKeysCreatedByToAdminUsers.js +31 -0
- package/dist/migrations/1749600000027.RetargetSysApiKeysCreatedByToAdminUsers.js.map +1 -0
- package/dist/migrations/1749600000028.RetargetSysTenantsCreatedByToAdminUsers.d.ts +8 -0
- package/dist/migrations/1749600000028.RetargetSysTenantsCreatedByToAdminUsers.d.ts.map +1 -0
- package/dist/migrations/1749600000028.RetargetSysTenantsCreatedByToAdminUsers.js +31 -0
- package/dist/migrations/1749600000028.RetargetSysTenantsCreatedByToAdminUsers.js.map +1 -0
- package/dist/migrations/1749600000029.AddIsAdminToSysRefreshTokensTable.d.ts +7 -0
- package/dist/migrations/1749600000029.AddIsAdminToSysRefreshTokensTable.d.ts.map +1 -0
- package/dist/migrations/1749600000029.AddIsAdminToSysRefreshTokensTable.js +31 -0
- package/dist/migrations/1749600000029.AddIsAdminToSysRefreshTokensTable.js.map +1 -0
- package/dist/tenant/entities/tenant.entity.d.ts +2 -3
- package/dist/tenant/entities/tenant.entity.d.ts.map +1 -1
- package/dist/tenant/entities/tenant.entity.js +2 -6
- package/dist/tenant/entities/tenant.entity.js.map +1 -1
- package/package.json +1 -1
- package/dist/auth/middlewares/auth.context.middleware.d.ts +0 -10
- package/dist/auth/middlewares/auth.context.middleware.d.ts.map +0 -1
- package/dist/auth/middlewares/auth.context.middleware.js +0 -37
- package/dist/auth/middlewares/auth.context.middleware.js.map +0 -1
- package/dist/auth/services/auth.context.service.d.ts +0 -9
- package/dist/auth/services/auth.context.service.d.ts.map +0 -1
- package/dist/auth/services/auth.context.service.js +0 -33
- package/dist/auth/services/auth.context.service.js.map +0 -1
package/dist/auth/es6.classes.js
CHANGED
|
@@ -2,10 +2,12 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.es6Classes = void 0;
|
|
4
4
|
const auth_controller_1 = require("./controllers/auth.controller");
|
|
5
|
+
const admin_auth_controller_1 = require("./controllers/admin.auth.controller");
|
|
5
6
|
const api_key_service_1 = require("./services/api.key.service");
|
|
6
|
-
const auth_context_service_1 = require("./services/auth.context.service");
|
|
7
7
|
const auth_service_1 = require("./services/auth.service");
|
|
8
|
+
const admin_auth_service_1 = require("./services/admin.auth.service");
|
|
8
9
|
const google_auth_service_1 = require("./services/google.auth.service");
|
|
10
|
+
const admin_login_dto_1 = require("./dtos/admin.login.dto");
|
|
9
11
|
const change_password_dto_1 = require("./dtos/change.password.dto");
|
|
10
12
|
const google_login_dto_1 = require("./dtos/google.login.dto");
|
|
11
13
|
const login_dto_1 = require("./dtos/login.dto");
|
|
@@ -22,11 +24,35 @@ const user_details_subscriber_1 = require("./subscribers/user.details.subscriber
|
|
|
22
24
|
const user_role_subscriber_1 = require("./subscribers/user.role.subscriber");
|
|
23
25
|
const user_subscriber_1 = require("./subscribers/user.subscriber");
|
|
24
26
|
exports.es6Classes = {
|
|
25
|
-
controllers: [auth_controller_1.AuthController],
|
|
26
|
-
services: [
|
|
27
|
+
controllers: [auth_controller_1.AuthController, admin_auth_controller_1.AdminAuthController],
|
|
28
|
+
services: [
|
|
29
|
+
api_key_service_1.ApiKeyService,
|
|
30
|
+
auth_service_1.AuthService,
|
|
31
|
+
admin_auth_service_1.AdminAuthService,
|
|
32
|
+
google_auth_service_1.GoogleAuthService,
|
|
33
|
+
],
|
|
27
34
|
libraries: [],
|
|
28
|
-
dtos: [
|
|
29
|
-
|
|
30
|
-
|
|
35
|
+
dtos: [
|
|
36
|
+
admin_login_dto_1.AdminLoginDto,
|
|
37
|
+
change_password_dto_1.ChangePasswordDto,
|
|
38
|
+
google_login_dto_1.GoogleLoginDto,
|
|
39
|
+
login_dto_1.LoginDto,
|
|
40
|
+
refresh_token_dto_1.RefreshTokenDto,
|
|
41
|
+
register_dto_1.RegisterDto,
|
|
42
|
+
],
|
|
43
|
+
jobs: [
|
|
44
|
+
system_refresh_token_job_1.SystemRefreshTokenJob,
|
|
45
|
+
system_role_job_1.SystemRoleJob,
|
|
46
|
+
user_details_job_1.UserDetailsJob,
|
|
47
|
+
user_job_1.UserJob,
|
|
48
|
+
user_role_job_1.UserRoleJob,
|
|
49
|
+
],
|
|
50
|
+
subscribers: [
|
|
51
|
+
system_refresh_token_subscriber_1.SystemRefreshTokenSubscriber,
|
|
52
|
+
system_role_subscriber_1.SystemRoleSubscriber,
|
|
53
|
+
user_details_subscriber_1.UserDetailsSubscriber,
|
|
54
|
+
user_role_subscriber_1.UserRoleSubscriber,
|
|
55
|
+
user_subscriber_1.UserSubscriber,
|
|
56
|
+
],
|
|
31
57
|
};
|
|
32
58
|
//# sourceMappingURL=es6.classes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"es6.classes.js","sourceRoot":"","sources":["../../src/auth/es6.classes.ts"],"names":[],"mappings":";;;AAAA,mEAA+D;AAC/D,gEAA2D;AAC3D,
|
|
1
|
+
{"version":3,"file":"es6.classes.js","sourceRoot":"","sources":["../../src/auth/es6.classes.ts"],"names":[],"mappings":";;;AAAA,mEAA+D;AAC/D,+EAA0E;AAC1E,gEAA2D;AAC3D,0DAAsD;AACtD,sEAAiE;AACjE,wEAAmE;AACnE,4DAAuD;AACvD,oEAA+D;AAC/D,8DAAyD;AACzD,gDAA4C;AAC5C,gEAA2D;AAC3D,sDAAkD;AAClD,8EAAwE;AACxE,4DAAuD;AACvD,8DAAyD;AACzD,8CAA0C;AAC1C,wDAAmD;AACnD,mGAA6F;AAC7F,iFAA4E;AAC5E,mFAA8E;AAC9E,6EAAwE;AACxE,mEAA+D;AAElD,QAAA,UAAU,GAAG;IACxB,WAAW,EAAE,CAAC,gCAAc,EAAE,2CAAmB,CAAC;IAClD,QAAQ,EAAE;QACR,+BAAa;QACb,0BAAW;QACX,qCAAgB;QAChB,uCAAiB;KACT;IACV,SAAS,EAAE,EAAE;IACb,IAAI,EAAE;QACJ,+BAAa;QACb,uCAAiB;QACjB,iCAAc;QACd,oBAAQ;QACR,mCAAe;QACf,0BAAW;KACZ;IACD,IAAI,EAAE;QACJ,gDAAqB;QACrB,+BAAa;QACb,iCAAc;QACd,kBAAO;QACP,2BAAW;KACZ;IACD,WAAW,EAAE;QACX,8DAA4B;QAC5B,6CAAoB;QACpB,+CAAqB;QACrB,yCAAkB;QAClB,gCAAc;KACf;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin.auth.d.ts","sourceRoot":"","sources":["../../../src/auth/helpers/admin.auth.ts"],"names":[],"mappings":"AAgBA,qBAAa,SAAS;WACP,mBAAmB,CAC9B,WAAW,EAAE,MAAM,EACnB,iBAAiB,CAAC,EAAE,MAAM,GACzB,OAAO,CAAC,IAAI,CAAC;IAehB,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS;IAInD,MAAM,CAAC,OAAO,IAAI,MAAM,GAAG,SAAS;CAGrC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AdminAuth = void 0;
|
|
4
|
+
const async_hooks_1 = require("async_hooks");
|
|
5
|
+
const admin_user_entity_1 = require("../entities/admin.user.entity");
|
|
6
|
+
const storage = new async_hooks_1.AsyncLocalStorage();
|
|
7
|
+
class AdminAuth {
|
|
8
|
+
static async setAdminUserContext(adminUserId, sessionIdentifier) {
|
|
9
|
+
const adminUser = await admin_user_entity_1.AdminUserEntity.findOne({
|
|
10
|
+
where: { id: adminUserId },
|
|
11
|
+
});
|
|
12
|
+
if (!adminUser)
|
|
13
|
+
return;
|
|
14
|
+
const adminUserObject = { ...adminUser };
|
|
15
|
+
delete adminUserObject.password;
|
|
16
|
+
delete adminUserObject.created_at;
|
|
17
|
+
delete adminUserObject.updated_at;
|
|
18
|
+
delete adminUserObject.deleted_at;
|
|
19
|
+
storage.enterWith({ adminUser: adminUserObject, sessionIdentifier });
|
|
20
|
+
}
|
|
21
|
+
static adminUser() {
|
|
22
|
+
return storage.getStore()?.adminUser;
|
|
23
|
+
}
|
|
24
|
+
static session() {
|
|
25
|
+
return storage.getStore()?.sessionIdentifier;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
exports.AdminAuth = AdminAuth;
|
|
29
|
+
//# sourceMappingURL=admin.auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin.auth.js","sourceRoot":"","sources":["../../../src/auth/helpers/admin.auth.ts"],"names":[],"mappings":";;;AAAA,6CAAgD;AAChD,qEAAgE;AAOhE,MAAM,OAAO,GAAG,IAAI,+BAAiB,EAAyB,CAAC;AAQ/D,MAAa,SAAS;IACpB,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAC9B,WAAmB,EACnB,iBAA0B;QAE1B,MAAM,SAAS,GAAG,MAAM,mCAAe,CAAC,OAAO,CAAC;YAC9C,KAAK,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE;SAC3B,CAAC,CAAC;QACH,IAAI,CAAC,SAAS;YAAE,OAAO;QAEvB,MAAM,eAAe,GAAwB,EAAE,GAAG,SAAS,EAAE,CAAC;QAC9D,OAAO,eAAe,CAAC,QAAQ,CAAC;QAChC,OAAO,eAAe,CAAC,UAAU,CAAC;QAClC,OAAO,eAAe,CAAC,UAAU,CAAC;QAClC,OAAO,eAAe,CAAC,UAAU,CAAC;QAElC,OAAO,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,iBAAiB,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,CAAC,SAAS;QACd,OAAO,OAAO,CAAC,QAAQ,EAAE,EAAE,SAAS,CAAC;IACvC,CAAC;IAED,MAAM,CAAC,OAAO;QACZ,OAAO,OAAO,CAAC,QAAQ,EAAE,EAAE,iBAAiB,CAAC;IAC/C,CAAC;CACF;AA1BD,8BA0BC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.key.context.d.ts","sourceRoot":"","sources":["../../../src/auth/helpers/api.key.context.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAU1D,qBAAa,aAAa;IACxB,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAItC,MAAM,CAAC,MAAM,IAAI,YAAY,GAAG,SAAS;CAG1C"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ApiKeyContext = void 0;
|
|
4
|
+
const async_hooks_1 = require("async_hooks");
|
|
5
|
+
const storage = new async_hooks_1.AsyncLocalStorage();
|
|
6
|
+
class ApiKeyContext {
|
|
7
|
+
static set(apiKey) {
|
|
8
|
+
storage.enterWith(apiKey);
|
|
9
|
+
}
|
|
10
|
+
static apiKey() {
|
|
11
|
+
return storage.getStore();
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
exports.ApiKeyContext = ApiKeyContext;
|
|
15
|
+
//# sourceMappingURL=api.key.context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.key.context.js","sourceRoot":"","sources":["../../../src/auth/helpers/api.key.context.ts"],"names":[],"mappings":";;;AAAA,6CAAgD;AAGhD,MAAM,OAAO,GAAG,IAAI,+BAAiB,EAAgB,CAAC;AAQtD,MAAa,aAAa;IACxB,MAAM,CAAC,GAAG,CAAC,MAAoB;QAC7B,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,MAAM;QACX,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAC;IAC5B,CAAC;CACF;AARD,sCAQC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/auth/helpers/auth.ts"],"names":[],"mappings":"AAgBA,qBAAa,IAAI;WACF,cAAc,CACzB,MAAM,EAAE,MAAM,EACd,iBAAiB,CAAC,EAAE,MAAM,GACzB,OAAO,CAAC,IAAI,CAAC;IAahB,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS;IAI9C,MAAM,CAAC,OAAO,IAAI,MAAM,GAAG,SAAS;CAGrC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Auth = void 0;
|
|
4
|
+
const async_hooks_1 = require("async_hooks");
|
|
5
|
+
const user_entity_1 = require("../entities/user.entity");
|
|
6
|
+
const storage = new async_hooks_1.AsyncLocalStorage();
|
|
7
|
+
class Auth {
|
|
8
|
+
static async setUserContext(userId, sessionIdentifier) {
|
|
9
|
+
const user = await user_entity_1.UserEntity.findOne({ where: { id: userId } });
|
|
10
|
+
if (!user)
|
|
11
|
+
return;
|
|
12
|
+
const userObject = { ...user };
|
|
13
|
+
delete userObject.password;
|
|
14
|
+
delete userObject.created_at;
|
|
15
|
+
delete userObject.updated_at;
|
|
16
|
+
delete userObject.deleted_at;
|
|
17
|
+
storage.enterWith({ user: userObject, sessionIdentifier });
|
|
18
|
+
}
|
|
19
|
+
static user() {
|
|
20
|
+
return storage.getStore()?.user;
|
|
21
|
+
}
|
|
22
|
+
static session() {
|
|
23
|
+
return storage.getStore()?.sessionIdentifier;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.Auth = Auth;
|
|
27
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/auth/helpers/auth.ts"],"names":[],"mappings":";;;AAAA,6CAAgD;AAChD,yDAAqD;AAOrD,MAAM,OAAO,GAAG,IAAI,+BAAiB,EAAoB,CAAC;AAQ1D,MAAa,IAAI;IACf,MAAM,CAAC,KAAK,CAAC,cAAc,CACzB,MAAc,EACd,iBAA0B;QAE1B,MAAM,IAAI,GAAG,MAAM,wBAAU,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,MAAM,UAAU,GAAwB,EAAE,GAAG,IAAI,EAAE,CAAC;QACpD,OAAO,UAAU,CAAC,QAAQ,CAAC;QAC3B,OAAO,UAAU,CAAC,UAAU,CAAC;QAC7B,OAAO,UAAU,CAAC,UAAU,CAAC;QAC7B,OAAO,UAAU,CAAC,UAAU,CAAC;QAE7B,OAAO,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,CAAC,IAAI;QACT,OAAO,OAAO,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC;IAClC,CAAC;IAED,MAAM,CAAC,OAAO;QACZ,OAAO,OAAO,CAAC,QAAQ,EAAE,EAAE,iBAAiB,CAAC;IAC/C,CAAC;CACF;AAxBD,oBAwBC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { NestMiddleware } from '@nestjs/common';
|
|
2
|
+
import { JwtService } from '@nestjs/jwt';
|
|
3
|
+
import { NextFunction, Request, Response } from 'express';
|
|
4
|
+
export declare class AdminJwtMiddleware implements NestMiddleware {
|
|
5
|
+
private readonly jwtService;
|
|
6
|
+
constructor(jwtService: JwtService);
|
|
7
|
+
use(request: Request, _response: Response, next: NextFunction): Promise<void>;
|
|
8
|
+
private extractToken;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=admin.jwt.middleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin.jwt.middleware.d.ts","sourceRoot":"","sources":["../../../src/auth/middlewares/admin.jwt.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAkB1D,qBACa,kBAAmB,YAAW,cAAc;IAC3C,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,EAAE,UAAU;IAE7C,GAAG,CACP,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,QAAQ,EACnB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC;IAyBhB,OAAO,CAAC,YAAY;CAOrB"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.AdminJwtMiddleware = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const jwt_1 = require("@nestjs/jwt");
|
|
15
|
+
const system_auth_session_entity_1 = require("../entities/system.auth.session.entity");
|
|
16
|
+
const admin_auth_1 = require("../helpers/admin.auth");
|
|
17
|
+
let AdminJwtMiddleware = class AdminJwtMiddleware {
|
|
18
|
+
constructor(jwtService) {
|
|
19
|
+
this.jwtService = jwtService;
|
|
20
|
+
}
|
|
21
|
+
async use(request, _response, next) {
|
|
22
|
+
const token = this.extractToken(request);
|
|
23
|
+
if (token) {
|
|
24
|
+
try {
|
|
25
|
+
const payload = await this.jwtService.verifyAsync(token, {
|
|
26
|
+
secret: process.env.ACCESS_TOKEN_SECRET,
|
|
27
|
+
});
|
|
28
|
+
if (payload.sid) {
|
|
29
|
+
const session = await system_auth_session_entity_1.SystemAuthSessionEntity.findOne({
|
|
30
|
+
where: { session_identifier: payload.sid, is_admin: true },
|
|
31
|
+
});
|
|
32
|
+
const active = !!session &&
|
|
33
|
+
!session.invalidated_at &&
|
|
34
|
+
session.expires_at.getTime() > Date.now();
|
|
35
|
+
if (active)
|
|
36
|
+
await admin_auth_1.AdminAuth.setAdminUserContext(payload.sub, payload.sid);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
next();
|
|
43
|
+
}
|
|
44
|
+
extractToken(request) {
|
|
45
|
+
const header = request.headers['authorization'];
|
|
46
|
+
if (!header)
|
|
47
|
+
return undefined;
|
|
48
|
+
const [scheme, value] = header.split(' ');
|
|
49
|
+
if (scheme?.toLowerCase() !== 'bearer' || !value)
|
|
50
|
+
return undefined;
|
|
51
|
+
return value.trim();
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
exports.AdminJwtMiddleware = AdminJwtMiddleware;
|
|
55
|
+
exports.AdminJwtMiddleware = AdminJwtMiddleware = __decorate([
|
|
56
|
+
(0, common_1.Injectable)(),
|
|
57
|
+
__metadata("design:paramtypes", [jwt_1.JwtService])
|
|
58
|
+
], AdminJwtMiddleware);
|
|
59
|
+
//# sourceMappingURL=admin.jwt.middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin.jwt.middleware.js","sourceRoot":"","sources":["../../../src/auth/middlewares/admin.jwt.middleware.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4D;AAC5D,qCAAyC;AAEzC,uFAAiF;AAEjF,sDAAkD;AAgB3C,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAC7B,YAA6B,UAAsB;QAAtB,eAAU,GAAV,UAAU,CAAY;IAAG,CAAC;IAEvD,KAAK,CAAC,GAAG,CACP,OAAgB,EAChB,SAAmB,EACnB,IAAkB;QAElB,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAa,KAAK,EAAE;oBACnE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB;iBACxC,CAAC,CAAC;gBACH,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;oBAChB,MAAM,OAAO,GAAG,MAAM,oDAAuB,CAAC,OAAO,CAAC;wBACpD,KAAK,EAAE,EAAE,kBAAkB,EAAE,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE;qBAC3D,CAAC,CAAC;oBACH,MAAM,MAAM,GACV,CAAC,CAAC,OAAO;wBACT,CAAC,OAAO,CAAC,cAAc;wBACvB,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oBAC5C,IAAI,MAAM;wBACR,MAAM,sBAAS,CAAC,mBAAmB,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;gBAClE,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;YAET,CAAC;QACH,CAAC;QACD,IAAI,EAAE,CAAC;IACT,CAAC;IAEO,YAAY,CAAC,OAAgB;QACnC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC;QAC9B,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,MAAM,EAAE,WAAW,EAAE,KAAK,QAAQ,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QACnE,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC;CACF,CAAA;AAvCY,gDAAkB;6BAAlB,kBAAkB;IAD9B,IAAA,mBAAU,GAAE;qCAE8B,gBAAU;GADxC,kBAAkB,CAuC9B"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { NestMiddleware } from '@nestjs/common';
|
|
2
|
+
import { NextFunction, Request, Response } from 'express';
|
|
3
|
+
import { ApiKeyService } from '../services/api.key.service';
|
|
4
|
+
export declare class ApiKeyMiddleware implements NestMiddleware {
|
|
5
|
+
private readonly apiKeyService;
|
|
6
|
+
constructor(apiKeyService: ApiKeyService);
|
|
7
|
+
use(request: Request, _response: Response, next: NextFunction): Promise<void>;
|
|
8
|
+
private extractKey;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=api.key.middleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.key.middleware.d.ts","sourceRoot":"","sources":["../../../src/auth/middlewares/api.key.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE1D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAe5D,qBACa,gBAAiB,YAAW,cAAc;IACzC,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAAb,aAAa,EAAE,aAAa;IAEnD,GAAG,CACP,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,QAAQ,EACnB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC;IAShB,OAAO,CAAC,UAAU;CAYnB"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.ApiKeyMiddleware = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const api_key_default_enum_1 = require("../enums/api.key.default.enum");
|
|
15
|
+
const api_key_service_1 = require("../services/api.key.service");
|
|
16
|
+
const api_key_context_1 = require("../helpers/api.key.context");
|
|
17
|
+
let ApiKeyMiddleware = class ApiKeyMiddleware {
|
|
18
|
+
constructor(apiKeyService) {
|
|
19
|
+
this.apiKeyService = apiKeyService;
|
|
20
|
+
}
|
|
21
|
+
async use(request, _response, next) {
|
|
22
|
+
const rawKey = this.extractKey(request);
|
|
23
|
+
if (rawKey) {
|
|
24
|
+
const apiKey = await this.apiKeyService.validateApiKey(rawKey);
|
|
25
|
+
if (apiKey)
|
|
26
|
+
api_key_context_1.ApiKeyContext.set(apiKey);
|
|
27
|
+
}
|
|
28
|
+
next();
|
|
29
|
+
}
|
|
30
|
+
extractKey(request) {
|
|
31
|
+
const headerName = process.env.API_KEY_HEADER_NAME || api_key_default_enum_1.ApiKeyDefault.HEADER_NAME;
|
|
32
|
+
const headerKey = request.headers[headerName];
|
|
33
|
+
if (headerKey)
|
|
34
|
+
return Array.isArray(headerKey) ? headerKey[0] : headerKey;
|
|
35
|
+
const authorization = request.headers.authorization;
|
|
36
|
+
if (authorization?.toLowerCase().startsWith('apikey ')) {
|
|
37
|
+
return authorization.slice('apikey '.length).trim();
|
|
38
|
+
}
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
exports.ApiKeyMiddleware = ApiKeyMiddleware;
|
|
43
|
+
exports.ApiKeyMiddleware = ApiKeyMiddleware = __decorate([
|
|
44
|
+
(0, common_1.Injectable)(),
|
|
45
|
+
__metadata("design:paramtypes", [api_key_service_1.ApiKeyService])
|
|
46
|
+
], ApiKeyMiddleware);
|
|
47
|
+
//# sourceMappingURL=api.key.middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.key.middleware.js","sourceRoot":"","sources":["../../../src/auth/middlewares/api.key.middleware.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4D;AAE5D,wEAA8D;AAC9D,iEAA4D;AAC5D,gEAA2D;AAepD,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAC3B,YAA6B,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;IAAG,CAAC;IAE7D,KAAK,CAAC,GAAG,CACP,OAAgB,EAChB,SAAmB,EACnB,IAAkB;QAElB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAC/D,IAAI,MAAM;gBAAE,+BAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC;QACD,IAAI,EAAE,CAAC;IACT,CAAC;IAEO,UAAU,CAAC,OAAgB;QACjC,MAAM,UAAU,GACd,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,oCAAa,CAAC,WAAW,CAAC;QAC/D,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,SAAS;YAAE,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAE1E,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC;QACpD,IAAI,aAAa,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACvD,OAAO,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QACtD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AA5BY,4CAAgB;2BAAhB,gBAAgB;IAD5B,IAAA,mBAAU,GAAE;qCAEiC,+BAAa;GAD9C,gBAAgB,CA4B5B"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { NestMiddleware } from '@nestjs/common';
|
|
2
|
+
import { JwtService } from '@nestjs/jwt';
|
|
3
|
+
import { NextFunction, Request, Response } from 'express';
|
|
4
|
+
export declare class JwtMiddleware implements NestMiddleware {
|
|
5
|
+
private readonly jwtService;
|
|
6
|
+
constructor(jwtService: JwtService);
|
|
7
|
+
use(request: Request, _response: Response, next: NextFunction): Promise<void>;
|
|
8
|
+
private extractToken;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=jwt.middleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwt.middleware.d.ts","sourceRoot":"","sources":["../../../src/auth/middlewares/jwt.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAkB1D,qBACa,aAAc,YAAW,cAAc;IACtC,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,EAAE,UAAU;IAE7C,GAAG,CACP,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,QAAQ,EACnB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC;IAwBhB,OAAO,CAAC,YAAY;CAOrB"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.JwtMiddleware = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const jwt_1 = require("@nestjs/jwt");
|
|
15
|
+
const system_auth_session_entity_1 = require("../entities/system.auth.session.entity");
|
|
16
|
+
const auth_1 = require("../helpers/auth");
|
|
17
|
+
let JwtMiddleware = class JwtMiddleware {
|
|
18
|
+
constructor(jwtService) {
|
|
19
|
+
this.jwtService = jwtService;
|
|
20
|
+
}
|
|
21
|
+
async use(request, _response, next) {
|
|
22
|
+
const token = this.extractToken(request);
|
|
23
|
+
if (token) {
|
|
24
|
+
try {
|
|
25
|
+
const payload = await this.jwtService.verifyAsync(token, {
|
|
26
|
+
secret: process.env.ACCESS_TOKEN_SECRET,
|
|
27
|
+
});
|
|
28
|
+
if (payload.sid) {
|
|
29
|
+
const session = await system_auth_session_entity_1.SystemAuthSessionEntity.findOne({
|
|
30
|
+
where: { session_identifier: payload.sid, is_admin: false },
|
|
31
|
+
});
|
|
32
|
+
const active = !!session &&
|
|
33
|
+
!session.invalidated_at &&
|
|
34
|
+
session.expires_at.getTime() > Date.now();
|
|
35
|
+
if (active)
|
|
36
|
+
await auth_1.Auth.setUserContext(payload.sub, payload.sid);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
next();
|
|
43
|
+
}
|
|
44
|
+
extractToken(request) {
|
|
45
|
+
const header = request.headers['authorization'];
|
|
46
|
+
if (!header)
|
|
47
|
+
return undefined;
|
|
48
|
+
const [scheme, value] = header.split(' ');
|
|
49
|
+
if (scheme?.toLowerCase() !== 'bearer' || !value)
|
|
50
|
+
return undefined;
|
|
51
|
+
return value.trim();
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
exports.JwtMiddleware = JwtMiddleware;
|
|
55
|
+
exports.JwtMiddleware = JwtMiddleware = __decorate([
|
|
56
|
+
(0, common_1.Injectable)(),
|
|
57
|
+
__metadata("design:paramtypes", [jwt_1.JwtService])
|
|
58
|
+
], JwtMiddleware);
|
|
59
|
+
//# sourceMappingURL=jwt.middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwt.middleware.js","sourceRoot":"","sources":["../../../src/auth/middlewares/jwt.middleware.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4D;AAC5D,qCAAyC;AAEzC,uFAAiF;AAEjF,0CAAuC;AAgBhC,IAAM,aAAa,GAAnB,MAAM,aAAa;IACxB,YAA6B,UAAsB;QAAtB,eAAU,GAAV,UAAU,CAAY;IAAG,CAAC;IAEvD,KAAK,CAAC,GAAG,CACP,OAAgB,EAChB,SAAmB,EACnB,IAAkB;QAElB,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAa,KAAK,EAAE;oBACnE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB;iBACxC,CAAC,CAAC;gBACH,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;oBAChB,MAAM,OAAO,GAAG,MAAM,oDAAuB,CAAC,OAAO,CAAC;wBACpD,KAAK,EAAE,EAAE,kBAAkB,EAAE,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE;qBAC5D,CAAC,CAAC;oBACH,MAAM,MAAM,GACV,CAAC,CAAC,OAAO;wBACT,CAAC,OAAO,CAAC,cAAc;wBACvB,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oBAC5C,IAAI,MAAM;wBAAE,MAAM,WAAI,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;gBAClE,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;YAET,CAAC;QACH,CAAC;QACD,IAAI,EAAE,CAAC;IACT,CAAC;IAEO,YAAY,CAAC,OAAgB;QACnC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC;QAC9B,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,MAAM,EAAE,WAAW,EAAE,KAAK,QAAQ,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QACnE,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC;CACF,CAAA;AAtCY,sCAAa;wBAAb,aAAa;IADzB,IAAA,mBAAU,GAAE;qCAE8B,gBAAU;GADxC,aAAa,CAsCzB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { JwtService } from '@nestjs/jwt';
|
|
2
|
+
import { DataSource } from 'typeorm';
|
|
3
|
+
import { AdminUserEntity } from '../entities/admin.user.entity';
|
|
4
|
+
import { AdminAuthenticatedAccess, AuthTokenPair, IssueTokensUser, TokenIssueContext } from '../types/auth.types';
|
|
5
|
+
export declare class AdminAuthService {
|
|
6
|
+
private readonly jwtService;
|
|
7
|
+
private readonly dataSource;
|
|
8
|
+
constructor(jwtService: JwtService, dataSource: DataSource);
|
|
9
|
+
validateRole(roleIdentifier?: string): Promise<AdminAuthenticatedAccess>;
|
|
10
|
+
validateCredentials(emailOrUsername: string, password: string): Promise<AdminUserEntity>;
|
|
11
|
+
issueTokens(user: IssueTokensUser, context?: TokenIssueContext): Promise<AuthTokenPair>;
|
|
12
|
+
refresh(rawRefreshToken: string, context?: TokenIssueContext): Promise<AuthTokenPair>;
|
|
13
|
+
revokeOne(rawRefreshToken: string): Promise<void>;
|
|
14
|
+
logout(rawRefreshToken: string): Promise<void>;
|
|
15
|
+
private hashToken;
|
|
16
|
+
private get refreshTokenRepo();
|
|
17
|
+
private get sessionRepo();
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=admin.auth.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin.auth.service.d.ts","sourceRoot":"","sources":["../../../src/auth/services/admin.auth.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAsB,MAAM,SAAS,CAAC;AAIzD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAGhE,OAAO,EACL,wBAAwB,EACxB,aAAa,EACb,eAAe,EACf,iBAAiB,EAClB,MAAM,qBAAqB,CAAC;AAI7B,qBACa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU;gBADV,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU;IASnC,YAAY,CAChB,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,wBAAwB,CAAC;IA6B9B,mBAAmB,CACvB,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,eAAe,CAAC;IAsBrB,WAAW,CACf,IAAI,EAAE,eAAe,EACrB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,aAAa,CAAC;IAuDnB,OAAO,CACX,eAAe,EAAE,MAAM,EACvB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,aAAa,CAAC;IAiCnB,SAAS,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAajD,MAAM,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYpD,OAAO,CAAC,SAAS;IAIjB,OAAO,KAAK,gBAAgB,GAE3B;IAED,OAAO,KAAK,WAAW,GAEtB;CACF"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.AdminAuthService = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const jwt_1 = require("@nestjs/jwt");
|
|
15
|
+
const typeorm_1 = require("typeorm");
|
|
16
|
+
const crypto_1 = require("crypto");
|
|
17
|
+
const system_refresh_token_entity_1 = require("../entities/system.refresh.token.entity");
|
|
18
|
+
const system_auth_session_entity_1 = require("../entities/system.auth.session.entity");
|
|
19
|
+
const admin_user_entity_1 = require("../entities/admin.user.entity");
|
|
20
|
+
const system_admin_user_role_entity_1 = require("../entities/system.admin.user.role.entity");
|
|
21
|
+
const access_exception_1 = require("../../global/exceptions/access.exception");
|
|
22
|
+
const admin_auth_1 = require("../helpers/admin.auth");
|
|
23
|
+
const auth_utilities_1 = require("../utilities/auth.utilities");
|
|
24
|
+
let AdminAuthService = class AdminAuthService {
|
|
25
|
+
constructor(jwtService, dataSource) {
|
|
26
|
+
this.jwtService = jwtService;
|
|
27
|
+
this.dataSource = dataSource;
|
|
28
|
+
}
|
|
29
|
+
async validateRole(roleIdentifier) {
|
|
30
|
+
const user = admin_auth_1.AdminAuth.adminUser();
|
|
31
|
+
if (!user)
|
|
32
|
+
throw new access_exception_1.AccessException('Authentication required: no active session.');
|
|
33
|
+
const adminUserRoles = await system_admin_user_role_entity_1.SystemAdminUserRoleEntity.find({
|
|
34
|
+
where: { admin_user_id: user.id },
|
|
35
|
+
relations: { role: true },
|
|
36
|
+
});
|
|
37
|
+
const roles = adminUserRoles
|
|
38
|
+
.map((adminUserRole) => adminUserRole.role)
|
|
39
|
+
.filter((role) => !!role);
|
|
40
|
+
if (roleIdentifier &&
|
|
41
|
+
!roles.some((role) => role.identifier === roleIdentifier)) {
|
|
42
|
+
throw new access_exception_1.AccessException(`This action requires the "${roleIdentifier}" role.`);
|
|
43
|
+
}
|
|
44
|
+
return { user, roles };
|
|
45
|
+
}
|
|
46
|
+
async validateCredentials(emailOrUsername, password) {
|
|
47
|
+
const user = await this.dataSource
|
|
48
|
+
.getRepository(admin_user_entity_1.AdminUserEntity)
|
|
49
|
+
.createQueryBuilder('admin_user')
|
|
50
|
+
.addSelect('admin_user.password')
|
|
51
|
+
.where('admin_user.email = :value OR admin_user.username = :value', {
|
|
52
|
+
value: emailOrUsername,
|
|
53
|
+
})
|
|
54
|
+
.getOne();
|
|
55
|
+
if (!user || !user.password) {
|
|
56
|
+
throw new common_1.UnauthorizedException('Invalid credentials');
|
|
57
|
+
}
|
|
58
|
+
const matches = await auth_utilities_1.AuthUtility.comparePassword(password, user.password);
|
|
59
|
+
if (!matches) {
|
|
60
|
+
throw new common_1.UnauthorizedException('Invalid credentials');
|
|
61
|
+
}
|
|
62
|
+
delete user.password;
|
|
63
|
+
return user;
|
|
64
|
+
}
|
|
65
|
+
async issueTokens(user, context) {
|
|
66
|
+
const jti = (0, crypto_1.randomUUID)();
|
|
67
|
+
const accessExpiry = process.env.ACCESS_TOKEN_EXPIRY;
|
|
68
|
+
const refreshExpiry = process.env.REFRESH_TOKEN_EXPIRY;
|
|
69
|
+
const sessionIdentifier = this.hashToken(`${Date.now()}:${user.id}`);
|
|
70
|
+
const sessionExpiresAt = new Date(Date.now() + auth_utilities_1.AuthUtility.parseExpiryMs(accessExpiry));
|
|
71
|
+
await this.sessionRepo.save(this.sessionRepo.create({
|
|
72
|
+
user_id: user.id,
|
|
73
|
+
is_admin: true,
|
|
74
|
+
session_identifier: sessionIdentifier,
|
|
75
|
+
expires_at: sessionExpiresAt,
|
|
76
|
+
invalidated_at: null,
|
|
77
|
+
}));
|
|
78
|
+
const accessToken = await this.jwtService.signAsync({ sub: user.id, email: user.email, jti, sid: sessionIdentifier }, {
|
|
79
|
+
secret: process.env.ACCESS_TOKEN_SECRET,
|
|
80
|
+
expiresIn: accessExpiry,
|
|
81
|
+
});
|
|
82
|
+
const refreshToken = await this.jwtService.signAsync({ sub: user.id, email: user.email }, {
|
|
83
|
+
secret: process.env.REFRESH_TOKEN_SECRET,
|
|
84
|
+
expiresIn: refreshExpiry,
|
|
85
|
+
});
|
|
86
|
+
const tokenHash = this.hashToken(refreshToken);
|
|
87
|
+
const expiresAt = new Date(Date.now() + auth_utilities_1.AuthUtility.parseExpiryMs(refreshExpiry));
|
|
88
|
+
await this.refreshTokenRepo.save(this.refreshTokenRepo.create({
|
|
89
|
+
user_id: user.id,
|
|
90
|
+
is_admin: true,
|
|
91
|
+
token_hash: tokenHash,
|
|
92
|
+
expires_at: expiresAt,
|
|
93
|
+
revoked_at: null,
|
|
94
|
+
ip_address: context?.ip_address ?? null,
|
|
95
|
+
user_agent: context?.user_agent ?? null,
|
|
96
|
+
}));
|
|
97
|
+
return { access_token: accessToken, refresh_token: refreshToken };
|
|
98
|
+
}
|
|
99
|
+
async refresh(rawRefreshToken, context) {
|
|
100
|
+
let payload;
|
|
101
|
+
try {
|
|
102
|
+
payload = await this.jwtService.verifyAsync(rawRefreshToken, {
|
|
103
|
+
secret: process.env.REFRESH_TOKEN_SECRET,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
throw new common_1.UnauthorizedException('Invalid refresh token');
|
|
108
|
+
}
|
|
109
|
+
const tokenHash = this.hashToken(rawRefreshToken);
|
|
110
|
+
const stored = await this.refreshTokenRepo.findOne({
|
|
111
|
+
where: {
|
|
112
|
+
user_id: payload.sub,
|
|
113
|
+
is_admin: true,
|
|
114
|
+
token_hash: tokenHash,
|
|
115
|
+
revoked_at: (0, typeorm_1.IsNull)(),
|
|
116
|
+
},
|
|
117
|
+
});
|
|
118
|
+
if (!stored)
|
|
119
|
+
throw new common_1.UnauthorizedException('Refresh token not found or already revoked');
|
|
120
|
+
if (stored.expires_at < new Date())
|
|
121
|
+
throw new common_1.UnauthorizedException('Refresh token has expired');
|
|
122
|
+
stored.revoked_at = new Date();
|
|
123
|
+
await this.refreshTokenRepo.save(stored);
|
|
124
|
+
return this.issueTokens({ id: payload.sub, email: payload.email }, context);
|
|
125
|
+
}
|
|
126
|
+
async revokeOne(rawRefreshToken) {
|
|
127
|
+
const tokenHash = this.hashToken(rawRefreshToken);
|
|
128
|
+
await this.refreshTokenRepo
|
|
129
|
+
.createQueryBuilder()
|
|
130
|
+
.update()
|
|
131
|
+
.set({ revoked_at: new Date() })
|
|
132
|
+
.where('token_hash = :hash AND is_admin = true AND revoked_at IS NULL', {
|
|
133
|
+
hash: tokenHash,
|
|
134
|
+
})
|
|
135
|
+
.execute();
|
|
136
|
+
}
|
|
137
|
+
async logout(rawRefreshToken) {
|
|
138
|
+
await this.revokeOne(rawRefreshToken);
|
|
139
|
+
const sessionIdentifier = admin_auth_1.AdminAuth.session();
|
|
140
|
+
if (sessionIdentifier) {
|
|
141
|
+
await this.sessionRepo.update({ session_identifier: sessionIdentifier, is_admin: true }, { invalidated_at: new Date() });
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
hashToken(token) {
|
|
145
|
+
return (0, crypto_1.createHash)('sha256').update(token).digest('hex');
|
|
146
|
+
}
|
|
147
|
+
get refreshTokenRepo() {
|
|
148
|
+
return this.dataSource.getRepository(system_refresh_token_entity_1.SystemRefreshTokenEntity);
|
|
149
|
+
}
|
|
150
|
+
get sessionRepo() {
|
|
151
|
+
return this.dataSource.getRepository(system_auth_session_entity_1.SystemAuthSessionEntity);
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
exports.AdminAuthService = AdminAuthService;
|
|
155
|
+
exports.AdminAuthService = AdminAuthService = __decorate([
|
|
156
|
+
(0, common_1.Injectable)(),
|
|
157
|
+
__metadata("design:paramtypes", [jwt_1.JwtService,
|
|
158
|
+
typeorm_1.DataSource])
|
|
159
|
+
], AdminAuthService);
|
|
160
|
+
//# sourceMappingURL=admin.auth.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin.auth.service.js","sourceRoot":"","sources":["../../../src/auth/services/admin.auth.service.ts"],"names":[],"mappings":"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"}
|