@boarteam/boar-pack-users-backend 8.0.0 → 8.1.1
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/audit-logs/audit-logs.controller.js +2 -0
- package/dist/audit-logs/audit-logs.controller.js.map +1 -1
- package/dist/audit-logs/entities/audit-log.entity.js +4 -0
- package/dist/audit-logs/entities/audit-log.entity.js.map +1 -1
- package/dist/auth/auth-manage.controller.js +2 -0
- package/dist/auth/auth-manage.controller.js.map +1 -1
- package/dist/auth/auth.controller.js +4 -0
- package/dist/auth/auth.controller.js.map +1 -1
- package/dist/auth/google/google-auth.controller.js +3 -0
- package/dist/auth/google/google-auth.controller.js.map +1 -1
- package/dist/auth/local-auth/local-auth.controller.js +2 -0
- package/dist/auth/local-auth/local-auth.controller.js.map +1 -1
- package/dist/auth/local-auth/local-auth.dto.js +7 -0
- package/dist/auth/local-auth/local-auth.dto.js.map +1 -1
- package/dist/auth/microsoft/ms-auth.controller.js +3 -0
- package/dist/auth/microsoft/ms-auth.controller.js.map +1 -1
- package/dist/auth/yandex/yandex-auth.controller.js +3 -0
- package/dist/auth/yandex/yandex-auth.controller.js.map +1 -1
- package/dist/event-logs/dto/event-log-create.dto.js +4 -0
- package/dist/event-logs/dto/event-log-create.dto.js.map +1 -1
- package/dist/event-logs/dto/event-log-timeline-query.dto.js +4 -0
- package/dist/event-logs/dto/event-log-timeline-query.dto.js.map +1 -1
- package/dist/event-logs/dto/event-log-timeline.dto.js +4 -0
- package/dist/event-logs/dto/event-log-timeline.dto.js.map +1 -1
- package/dist/event-logs/dto/event-log-update.dto.js +4 -0
- package/dist/event-logs/dto/event-log-update.dto.js.map +1 -1
- package/dist/event-logs/entities/event-log.entity.js +4 -0
- package/dist/event-logs/entities/event-log.entity.js.map +1 -1
- package/dist/event-logs/event-logs.controller.js +3 -0
- package/dist/event-logs/event-logs.controller.js.map +1 -1
- package/dist/event-logs/event-logs.logger.d.ts +2 -2
- package/dist/event-logs/event-logs.logger.js +2 -2
- package/dist/event-logs/event-logs.logger.js.map +1 -1
- package/dist/revoked-tokens/entities/revoked-token.entity.js +4 -0
- package/dist/revoked-tokens/entities/revoked-token.entity.js.map +1 -1
- package/dist/settings/dto/event-settings.dto.js +4 -0
- package/dist/settings/dto/event-settings.dto.js.map +1 -1
- package/dist/settings/entities/setting.entity.js +4 -0
- package/dist/settings/entities/setting.entity.js.map +1 -1
- package/dist/settings/settings.controller.js +3 -0
- package/dist/settings/settings.controller.js.map +1 -1
- package/dist/telegraf/dto/telegram-settings-update.dto.js +4 -0
- package/dist/telegraf/dto/telegram-settings-update.dto.js.map +1 -1
- package/dist/telegraf/dto/telegram-settings.dto.js +4 -0
- package/dist/telegraf/dto/telegram-settings.dto.js.map +1 -1
- package/dist/telegraf/telegraf.controller.js +4 -0
- package/dist/telegraf/telegraf.controller.js.map +1 -1
- package/dist/tokens/dto/token-create.dto.js +4 -0
- package/dist/tokens/dto/token-create.dto.js.map +1 -1
- package/dist/tokens/dto/token-update.dto.js +4 -0
- package/dist/tokens/dto/token-update.dto.js.map +1 -1
- package/dist/tokens/dto/token-with-value.dto.js +4 -0
- package/dist/tokens/dto/token-with-value.dto.js.map +1 -1
- package/dist/tokens/entities/token.entity.js +4 -0
- package/dist/tokens/entities/token.entity.js.map +1 -1
- package/dist/tokens/my-tokens.controller.js +2 -0
- package/dist/tokens/my-tokens.controller.js.map +1 -1
- package/dist/tokens/tokens.controller.js +1 -0
- package/dist/tokens/tokens.controller.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/users/dto/permission.dto.js +4 -0
- package/dist/users/dto/permission.dto.js.map +1 -1
- package/dist/users/dto/user-create.dto.js +4 -0
- package/dist/users/dto/user-create.dto.js.map +1 -1
- package/dist/users/dto/user-update.dto.js +4 -0
- package/dist/users/dto/user-update.dto.js.map +1 -1
- package/dist/users/entities/user.entity.js +4 -0
- package/dist/users/entities/user.entity.js.map +1 -1
- package/dist/users/me.controller.js +2 -0
- package/dist/users/me.controller.js.map +1 -1
- package/dist/users/users.controller.js +1 -0
- package/dist/users/users.controller.js.map +1 -1
- package/dist/ws-auth/ws-auth.guard.js +2 -2
- package/dist/ws-auth/ws-auth.guard.js.map +1 -1
- package/package.json +5 -5
- package/src/audit-logs/audit-log-base-service.ts +0 -169
- package/src/audit-logs/audit-logs.controller.ts +0 -74
- package/src/audit-logs/audit-logs.module.ts +0 -49
- package/src/audit-logs/audit-logs.permissions.ts +0 -4
- package/src/audit-logs/audit-logs.service.ts +0 -14
- package/src/audit-logs/audit-logs.types.ts +0 -9
- package/src/audit-logs/entities/audit-log.entity.ts +0 -46
- package/src/audit-logs/policies/view-audit-logs.policy.ts +0 -8
- package/src/auth/auth-manage.controller.ts +0 -35
- package/src/auth/auth-strategies.constants.ts +0 -7
- package/src/auth/auth.config.ts +0 -20
- package/src/auth/auth.constants.ts +0 -2
- package/src/auth/auth.controller.ts +0 -54
- package/src/auth/auth.exception-filter.ts +0 -15
- package/src/auth/auth.module.ts +0 -118
- package/src/auth/auth.service.ts +0 -122
- package/src/auth/google/google-auth.config.ts +0 -26
- package/src/auth/google/google-auth.controller.ts +0 -39
- package/src/auth/google/google-auth.guard.ts +0 -6
- package/src/auth/google/google-auth.strategy.ts +0 -59
- package/src/auth/index.ts +0 -15
- package/src/auth/local-auth/local-auth.controller.ts +0 -37
- package/src/auth/local-auth/local-auth.dto.ts +0 -17
- package/src/auth/local-auth/local-auth.guard.ts +0 -6
- package/src/auth/local-auth/local-auth.strategy.ts +0 -21
- package/src/auth/microsoft/ms-auth.config.ts +0 -29
- package/src/auth/microsoft/ms-auth.controller.ts +0 -40
- package/src/auth/microsoft/ms-auth.guard.ts +0 -8
- package/src/auth/microsoft/ms-auth.strategy.ts +0 -63
- package/src/auth/yandex/yandex-auth.config.ts +0 -26
- package/src/auth/yandex/yandex-auth.controller.ts +0 -39
- package/src/auth/yandex/yandex-auth.guard.ts +0 -6
- package/src/auth/yandex/yandex-auth.strategy.ts +0 -59
- package/src/bcrypt/bcrypt.config.ts +0 -27
- package/src/bcrypt/bcrypt.module.ts +0 -19
- package/src/bcrypt/bcrypt.service.ts +0 -24
- package/src/bcrypt/index.ts +0 -3
- package/src/casl/action.enum.ts +0 -7
- package/src/casl/casl-ability.factory.ts +0 -130
- package/src/casl/casl.module.ts +0 -31
- package/src/casl/fields-permission.interceptor.ts +0 -58
- package/src/casl/index.ts +0 -5
- package/src/casl/policies/manage-all.policy.ts +0 -9
- package/src/casl/policies.guard.ts +0 -80
- package/src/event-logs/dto/event-log-create.dto.ts +0 -47
- package/src/event-logs/dto/event-log-timeline-query.dto.ts +0 -13
- package/src/event-logs/dto/event-log-timeline.dto.ts +0 -9
- package/src/event-logs/dto/event-log-update.dto.ts +0 -47
- package/src/event-logs/entities/event-log.entity.ts +0 -140
- package/src/event-logs/event-logs.constants.ts +0 -2
- package/src/event-logs/event-logs.controller.ts +0 -80
- package/src/event-logs/event-logs.interceptor.ts +0 -75
- package/src/event-logs/event-logs.logger.ts +0 -48
- package/src/event-logs/event-logs.middleware.ts +0 -58
- package/src/event-logs/event-logs.module.ts +0 -131
- package/src/event-logs/event-logs.permissions.ts +0 -4
- package/src/event-logs/event-logs.service.ts +0 -236
- package/src/event-logs/event-logs.types.ts +0 -4
- package/src/event-logs/index.ts +0 -10
- package/src/event-logs/policies/manage-event-logs.policy.ts +0 -8
- package/src/event-logs/policies/view-event-logs.policy.ts +0 -8
- package/src/generateTypes.ts +0 -94
- package/src/index.ts +0 -10
- package/src/jwt-auth/index.ts +0 -5
- package/src/jwt-auth/jwt-auth.config.ts +0 -27
- package/src/jwt-auth/jwt-auth.guard.ts +0 -26
- package/src/jwt-auth/jwt-auth.module.ts +0 -64
- package/src/jwt-auth/jwt-auth.refresh.guard.ts +0 -7
- package/src/jwt-auth/jwt-auth.refresh.srtategy.ts +0 -85
- package/src/jwt-auth/jwt-auth.service.ts +0 -59
- package/src/jwt-auth/jwt-auth.srtategy.ts +0 -83
- package/src/revoked-tokens/entities/revoked-token.entity.ts +0 -50
- package/src/revoked-tokens/index.ts +0 -3
- package/src/revoked-tokens/revoked-tokens.module.ts +0 -29
- package/src/revoked-tokens/revoked-tokens.service.ts +0 -88
- package/src/settings/dto/event-settings.dto.ts +0 -3
- package/src/settings/entities/setting.entity.ts +0 -19
- package/src/settings/index.ts +0 -5
- package/src/settings/policies/manage-settings.policy.ts +0 -8
- package/src/settings/settings.constants.ts +0 -9
- package/src/settings/settings.controller.ts +0 -32
- package/src/settings/settings.module.ts +0 -46
- package/src/settings/settings.permissions.ts +0 -3
- package/src/settings/settings.service.ts +0 -51
- package/src/telegraf/dto/telegram-settings-update.dto.ts +0 -13
- package/src/telegraf/dto/telegram-settings.dto.ts +0 -5
- package/src/telegraf/index.ts +0 -3
- package/src/telegraf/telegraf.constants.ts +0 -5
- package/src/telegraf/telegraf.controller.ts +0 -40
- package/src/telegraf/telegraf.module.ts +0 -28
- package/src/telegraf/telegraf.service.ts +0 -110
- package/src/tokens/dto/token-create.dto.ts +0 -7
- package/src/tokens/dto/token-update.dto.ts +0 -7
- package/src/tokens/dto/token-with-value.dto.ts +0 -8
- package/src/tokens/entities/token.entity.ts +0 -26
- package/src/tokens/index.ts +0 -2
- package/src/tokens/my-tokens.controller.ts +0 -82
- package/src/tokens/policies/manage-my-tokens.policy.ts +0 -9
- package/src/tokens/policies/manage-tokens.policy.ts +0 -8
- package/src/tokens/policies/view-tokens.policy.ts +0 -8
- package/src/tokens/tokens-auth.guard.ts +0 -7
- package/src/tokens/tokens-auth.strategy.ts +0 -48
- package/src/tokens/tokens.constants.ts +0 -1
- package/src/tokens/tokens.controller.ts +0 -45
- package/src/tokens/tokens.module.ts +0 -86
- package/src/tokens/tokens.permissions.ts +0 -5
- package/src/tokens/tokens.service.ts +0 -14
- package/src/users/dto/permission.dto.ts +0 -5
- package/src/users/dto/user-create.dto.ts +0 -37
- package/src/users/dto/user-update.dto.ts +0 -37
- package/src/users/entities/permissions.ts +0 -23
- package/src/users/entities/user.entity.ts +0 -67
- package/src/users/hash-password.interceptor.ts +0 -22
- package/src/users/index.ts +0 -13
- package/src/users/me.controller.ts +0 -63
- package/src/users/policies/manage-users.policy.ts +0 -10
- package/src/users/policies/view-users.policy.ts +0 -10
- package/src/users/users-editing.guard.ts +0 -85
- package/src/users/users.config.ts +0 -27
- package/src/users/users.constants.ts +0 -1
- package/src/users/users.controller.ts +0 -85
- package/src/users/users.module.ts +0 -81
- package/src/users/users.service.ts +0 -23
- package/src/ws-auth/index.ts +0 -3
- package/src/ws-auth/ws-auth.constants.ts +0 -2
- package/src/ws-auth/ws-auth.d2 +0 -14
- package/src/ws-auth/ws-auth.gateway.ts +0 -25
- package/src/ws-auth/ws-auth.guard.ts +0 -28
- package/src/ws-auth/ws-auth.module.ts +0 -36
- package/src/ws-auth/ws-auth.service.ts +0 -108
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.PermissionDto = void 0;
|
|
4
|
+
const openapi = require("@nestjs/swagger");
|
|
4
5
|
class PermissionDto {
|
|
6
|
+
static _OPENAPI_METADATA_FACTORY() {
|
|
7
|
+
return { permissions: { required: true, type: () => [String] } };
|
|
8
|
+
}
|
|
5
9
|
}
|
|
6
10
|
exports.PermissionDto = PermissionDto;
|
|
7
11
|
//# sourceMappingURL=permission.dto.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permission.dto.js","sourceRoot":"","sources":["../../../src/users/dto/permission.dto.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"permission.dto.js","sourceRoot":"","sources":["../../../src/users/dto/permission.dto.ts"],"names":[],"mappings":";;;;AAEA,MAAa,aAAa;;;;CAEzB;AAFD,sCAEC"}
|
|
@@ -13,11 +13,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.UserCreateDto = void 0;
|
|
16
|
+
const openapi = require("@nestjs/swagger");
|
|
16
17
|
const joi_1 = __importDefault(require("joi"));
|
|
17
18
|
const nestjs_joi_1 = require("nestjs-joi");
|
|
18
19
|
const user_entity_1 = require("../entities/user.entity");
|
|
19
20
|
const permissions_1 = require("../entities/permissions");
|
|
20
21
|
class UserCreateDto {
|
|
22
|
+
static _OPENAPI_METADATA_FACTORY() {
|
|
23
|
+
return { name: { required: true, type: () => String }, email: { required: true, type: () => String }, role: { required: false, enum: require("../entities/user.entity").Roles }, pass: { required: false, type: () => String, nullable: true }, permissions: { required: false, type: () => [String] } };
|
|
24
|
+
}
|
|
21
25
|
}
|
|
22
26
|
exports.UserCreateDto = UserCreateDto;
|
|
23
27
|
__decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-create.dto.js","sourceRoot":"","sources":["../../../src/users/dto/user-create.dto.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"user-create.dto.js","sourceRoot":"","sources":["../../../src/users/dto/user-create.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAAsB;AACtB,2CAAuC;AACvC,yDAAgD;AAChD,yDAAkE;AAElE,MAAa,aAAa;;;;CA+BzB;AA/BD,sCA+BC;AA7BC;IADC,IAAA,sBAAS,EAAC,aAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC;;2CACtB;AAGb;IADC,IAAA,sBAAS,EAAC,aAAG,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,CAAC;;4CAChD;AAOd;IALC,IAAA,sBAAS,EACR,aAAG,CAAC,MAAM,EAAE;SACT,QAAQ,EAAE;SACV,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,mBAAK,CAAC,CAAC,CAClC;;2CACY;AAGb;IADC,IAAA,sBAAS,EAAC,aAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;;2CAC1B;AAerB;IAbC,IAAA,sBAAS,EACR,aAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CACf,aAAG,CAAC,MAAM,EAAE,CACb,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAe,EAAE,OAAO,EAAE,EAAE;QAC3D,KAAK,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;YAC3B,IAAI,CAAC,yBAAW,CAAC,iBAAiB,CAAC,UAAwB,CAAC,EAAE,CAAC;gBAC7D,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CACH;;kDAC0B"}
|
|
@@ -13,11 +13,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.UserUpdateDto = void 0;
|
|
16
|
+
const openapi = require("@nestjs/swagger");
|
|
16
17
|
const joi_1 = __importDefault(require("joi"));
|
|
17
18
|
const nestjs_joi_1 = require("nestjs-joi");
|
|
18
19
|
const user_entity_1 = require("../entities/user.entity");
|
|
19
20
|
const permissions_1 = require("../entities/permissions");
|
|
20
21
|
class UserUpdateDto {
|
|
22
|
+
static _OPENAPI_METADATA_FACTORY() {
|
|
23
|
+
return { name: { required: false, type: () => String }, email: { required: false, type: () => String }, role: { required: false, enum: require("../entities/user.entity").Roles }, pass: { required: false, type: () => String, nullable: true }, permissions: { required: false, type: () => [String] } };
|
|
24
|
+
}
|
|
21
25
|
}
|
|
22
26
|
exports.UserUpdateDto = UserUpdateDto;
|
|
23
27
|
__decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-update.dto.js","sourceRoot":"","sources":["../../../src/users/dto/user-update.dto.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"user-update.dto.js","sourceRoot":"","sources":["../../../src/users/dto/user-update.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAAsB;AACtB,2CAAuC;AACvC,yDAAgD;AAChD,yDAAkE;AAElE,MAAa,aAAa;;;;CA+BzB;AA/BD,sCA+BC;AA7BC;IADC,IAAA,sBAAS,EAAC,aAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC;;2CACrB;AAGd;IADC,IAAA,sBAAS,EAAC,aAAG,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,CAAC;;4CAC/C;AAOf;IALC,IAAA,sBAAS,EACR,aAAG,CAAC,MAAM,EAAE;SACT,QAAQ,EAAE;SACV,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,mBAAK,CAAC,CAAC,CAClC;;2CACY;AAGb;IADC,IAAA,sBAAS,EAAC,aAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;;2CAC1B;AAerB;IAbC,IAAA,sBAAS,EACR,aAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CACf,aAAG,CAAC,MAAM,EAAE,CACb,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,KAAe,EAAE,OAAO,EAAE,EAAE;QAC/C,KAAK,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;YAC3B,IAAI,CAAC,yBAAW,CAAC,iBAAiB,CAAC,UAAwB,CAAC,EAAE,CAAC;gBAC7D,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CACH;;kDAC0B"}
|
|
@@ -10,6 +10,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.User = exports.EMAIL_UNIQUE_CONSTRAINT = exports.Roles = void 0;
|
|
13
|
+
const openapi = require("@nestjs/swagger");
|
|
13
14
|
const typeorm_1 = require("typeorm");
|
|
14
15
|
var Roles;
|
|
15
16
|
(function (Roles) {
|
|
@@ -18,6 +19,9 @@ var Roles;
|
|
|
18
19
|
})(Roles || (exports.Roles = Roles = {}));
|
|
19
20
|
exports.EMAIL_UNIQUE_CONSTRAINT = 'UQ_users_email';
|
|
20
21
|
let User = class User {
|
|
22
|
+
static _OPENAPI_METADATA_FACTORY() {
|
|
23
|
+
return { id: { required: true, type: () => String }, name: { required: true, type: () => String }, email: { required: true, type: () => String }, role: { required: true, enum: require("./user.entity").Roles }, pass: { required: true, type: () => String, nullable: true }, permissions: { required: true, type: () => [String] }, createdAt: { required: true, type: () => Date }, updatedAt: { required: true, type: () => Date }, deletedAt: { required: true, type: () => Date, nullable: true }, policies: { required: true, type: () => [Object] }, experimentalFeatures: { required: true, type: () => [String] } };
|
|
24
|
+
}
|
|
21
25
|
};
|
|
22
26
|
exports.User = User;
|
|
23
27
|
__decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user.entity.js","sourceRoot":"","sources":["../../../src/users/entities/user.entity.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"user.entity.js","sourceRoot":"","sources":["../../../src/users/entities/user.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,qCAQiB;AAMjB,IAAY,KAGX;AAHD,WAAY,KAAK;IACf,wBAAe,CAAA;IACf,sBAAa,CAAA;AACf,CAAC,EAHW,KAAK,qBAAL,KAAK,QAGhB;AAEY,QAAA,uBAAuB,GAAG,gBAAgB,CAAC;AASjD,IAAM,IAAI,GAAV,MAAM,IAAI;;;;CAsChB,CAAA;AAtCY,oBAAI;AAEf;IADC,IAAA,gCAAsB,EAAC,MAAM,CAAC;;gCACpB;AAGX;IADC,IAAA,gBAAM,GAAE;;kCACI;AAGb;IADC,IAAA,gBAAM,GAAE;;mCACK;AAMd;IAJC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,KAAK,CAAC,IAAI;KACpB,CAAC;;kCACU;AAGZ;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;kCACxB;AAOpB;IALC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,EAAE;KACZ,CAAC;;yCACwB;AAG1B;IADC,IAAA,0BAAgB,EAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;8BACnD,IAAI;uCAAC;AAGhB;IADC,IAAA,0BAAgB,EAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;8BACnD,IAAI;uCAAC;AAGhB;IADC,IAAA,0BAAgB,EAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;uCACvD;eAjCZ,IAAI;IAFhB,IAAA,gBAAM,EAAC,OAAO,CAAC;IACf,IAAA,gBAAM,EAAC,+BAAuB,EAAE,CAAC,OAAO,CAAC,CAAC;GAC9B,IAAI,CAsChB"}
|
|
@@ -13,6 +13,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.MeController = void 0;
|
|
16
|
+
const openapi = require("@nestjs/swagger");
|
|
16
17
|
const crud_1 = require("@dataui/crud");
|
|
17
18
|
const user_entity_1 = require("./entities/user.entity");
|
|
18
19
|
const common_1 = require("@nestjs/common");
|
|
@@ -42,6 +43,7 @@ let MeController = class MeController {
|
|
|
42
43
|
exports.MeController = MeController;
|
|
43
44
|
__decorate([
|
|
44
45
|
(0, crud_1.Override)(),
|
|
46
|
+
openapi.ApiResponse({ status: 200, type: require("./entities/user.entity").User }),
|
|
45
47
|
__param(0, (0, crud_1.ParsedRequest)()),
|
|
46
48
|
__param(1, (0, common_1.Req)()),
|
|
47
49
|
__metadata("design:type", Function),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"me.controller.js","sourceRoot":"","sources":["../../src/users/me.controller.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"me.controller.js","sourceRoot":"","sources":["../../src/users/me.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uCAA0G;AAC1G,wDAAqD;AACrD,2CAAiD;AAEjD,mDAA+C;AAC/C,kCAA6C;AAC7C,kCAA4C;AAC5C,6CAA0C;AAC1C,iDAAkE;AA4B3D,IAAM,YAAY,GAAlB,MAAM,YAAY;IAEvB,YACS,OAAqB,EACpB,kBAAsC,EACtC,WAA+B;QAFhC,YAAO,GAAP,OAAO,CAAc;QACpB,uBAAkB,GAAlB,kBAAkB,CAAoB;QACtC,gBAAW,GAAX,WAAW,CAAoB;QAEvC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;IACxC,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC;IACd,CAAC;IAGK,AAAN,KAAK,CAAC,MAAM,CACO,GAAgB,EAC1B,SAAkB;QAEzB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,UAAW,CAAC,GAAG,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAClE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC7D,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC;QAE7D,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AA1BY,oCAAY;AAejB;IADL,IAAA,eAAQ,GAAE;;IAER,WAAA,IAAA,oBAAa,GAAE,CAAA;IACf,WAAA,IAAA,YAAG,GAAE,CAAA;;;;0CAQP;uBAzBU,YAAY;IA1BxB,IAAA,WAAI,EAAC;QACJ,KAAK,EAAE;YACL,IAAI,EAAE,kBAAI;SACX;QACD,MAAM,EAAE;YACN,IAAI,EAAE,CAAC,YAAY,CAAC;SACrB;QACD,MAAM,EAAE;YACN,EAAE,EAAE;gBACF,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,IAAI;aACf;SACF;QACD,KAAK,EAAE;YACL,OAAO,EAAE,CAAC,MAAM,CAAC;SAClB;KACF,CAAC;IACD,IAAA,eAAQ,EAAC;QACR,QAAQ,EAAE,MAAM;QAChB,MAAM,EAAE,CAAC,IAAW,EAAE,EAAE,CAAC,CAAC;YACxB,EAAE,EAAE,IAAI,CAAC,EAAE;SACZ,CAAC;KACH,CAAC;IACD,IAAA,wBAAiB,GAAE;IACnB,IAAA,iBAAO,EAAC,OAAO,CAAC;IAChB,IAAA,mBAAU,EAAC,IAAI,CAAC;qCAIG,4BAAY;QACA,yBAAkB;QACzB,iCAAkB;GAL9B,YAAY,CA0BxB"}
|
|
@@ -10,6 +10,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.UsersController = void 0;
|
|
13
|
+
const openapi = require("@nestjs/swagger");
|
|
13
14
|
const common_1 = require("@nestjs/common");
|
|
14
15
|
const users_service_1 = require("./users.service");
|
|
15
16
|
const crud_1 = require("@dataui/crud");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"users.controller.js","sourceRoot":"","sources":["../../src/users/users.controller.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"users.controller.js","sourceRoot":"","sources":["../../src/users/users.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAAmE;AACnE,mDAA+C;AAC/C,uCAAoC;AACpC,wDAA8C;AAC9C,kCAAgD;AAChD,2DAAsD;AACtD,6CAA0D;AAC1D,2DAAsD;AACtD,2EAAsE;AACtE,yDAAqD;AACrD,+DAA0D;AAC1D,oEAA+D;AAC/D,iFAA2D;AAC3D,wEAAmE;AACnE,yFAAoF;AAoE7E,IAAM,eAAe,GAArB,MAAM,eAAe;IAC1B,YAA6B,OAAqB;QAArB,YAAO,GAAP,OAAO,CAAc;IAAG,CAAC;CACvD,CAAA;AAFY,0CAAe;0BAAf,eAAe;IAlE3B,IAAA,WAAI,EAAC;QACJ,KAAK,EAAE;YACL,IAAI,EAAE,kBAAI;SACX;QACD,MAAM,EAAE;YACN,EAAE,EAAE;gBACF,KAAK,EAAE,IAAI;gBACX,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,IAAI;aACd;SACF;QACD,KAAK,EAAE;YACL,cAAc,EAAE,IAAI;YACpB,OAAO,EAAE,CAAC,MAAM,CAAC;YACjB,UAAU,EAAE,IAAI;SACjB;QACD,MAAM,EAAE;YACN,IAAI,EAAE,CAAC,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,CAAC;YACtF,WAAW,EAAE;gBACX,UAAU,EAAE;oBACV,IAAA,oBAAa,EAAC,IAAI,mCAAe,EAAE,CAAC;iBACrC;gBACD,YAAY,EAAE;oBACZ,IAAI,2DAA2B,CAAC,kBAAI,EAAE,aAAM,CAAC,IAAI,CAAC;iBACnD;aACF;YACD,UAAU,EAAE;gBACV,UAAU,EAAE;oBACV,IAAA,oBAAa,EAAC,IAAI,mCAAe,EAAE,CAAC;iBACrC;gBACD,YAAY,EAAE;oBACZ,IAAI,2DAA2B,CAAC,kBAAI,EAAE,aAAM,CAAC,IAAI,CAAC;iBACnD;aACF;YACD,aAAa,EAAE;gBACb,YAAY,EAAE;oBACZ,mDAAuB;iBACxB;gBACD,UAAU,EAAE;oBACV,IAAA,kBAAS,EAAC,uCAAiB,CAAC;iBAC7B;aACF;YACD,aAAa,EAAE;gBACb,YAAY,EAAE;oBACZ,mDAAuB;iBACxB;gBACD,UAAU,EAAE;oBACV,IAAA,kBAAS,EAAC,uCAAiB,CAAC;iBAC7B;aACF;YACD,aAAa,EAAE;gBACb,UAAU,EAAE;oBACV,IAAA,kBAAS,EAAC,uCAAiB,CAAC;iBAC7B;aACF;SACF;QACD,GAAG,EAAE;YACH,MAAM,EAAE,+BAAa;YACrB,MAAM,EAAE,+BAAa;SACtB;KACF,CAAC;IACD,IAAA,oBAAa,EAAC,IAAI,uCAAiB,EAAE,CAAC;IACtC,IAAA,mBAAU,EAAC,gCAAK,CAAC,sBAAsB,CAAC;IACxC,IAAA,iBAAO,EAAC,OAAO,CAAC;IAChB,IAAA,wBAAc,EAAC,8BAAa,CAAC;IAC7B,IAAA,mBAAU,EAAC,OAAO,CAAC;qCAEoB,4BAAY;GADvC,eAAe,CAE3B"}
|
|
@@ -13,7 +13,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
13
13
|
exports.WsAuthGuard = void 0;
|
|
14
14
|
const common_1 = require("@nestjs/common");
|
|
15
15
|
const ws_auth_service_1 = require("./ws-auth.service");
|
|
16
|
-
const
|
|
16
|
+
const boar_pack_common_backend_1 = require("@boarteam/boar-pack-common-backend");
|
|
17
17
|
let WsAuthGuard = WsAuthGuard_1 = class WsAuthGuard {
|
|
18
18
|
constructor(wsAuthService) {
|
|
19
19
|
this.wsAuthService = wsAuthService;
|
|
@@ -24,7 +24,7 @@ let WsAuthGuard = WsAuthGuard_1 = class WsAuthGuard {
|
|
|
24
24
|
const user = await this.wsAuthService.finishInitialization(client);
|
|
25
25
|
if (!user) {
|
|
26
26
|
this.logger.warn(`Unauthorized connection by websocket`);
|
|
27
|
-
client.close(
|
|
27
|
+
client.close(boar_pack_common_backend_1.WsErrorCodes.Unauthorized, 'You have been logged out, please login again');
|
|
28
28
|
return false;
|
|
29
29
|
}
|
|
30
30
|
return !!user;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws-auth.guard.js","sourceRoot":"","sources":["../../src/ws-auth/ws-auth.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAAwG;AAExG,uDAAkD;AAClD,
|
|
1
|
+
{"version":3,"file":"ws-auth.guard.js","sourceRoot":"","sources":["../../src/ws-auth/ws-auth.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAAwG;AAExG,uDAAkD;AAClD,iFAAkE;AAG3D,IAAM,WAAW,mBAAjB,MAAM,WAAW;IAGtB,YACmB,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;QAH9B,WAAM,GAAG,IAAI,eAAM,CAAC,aAAW,CAAC,IAAI,CAAC,CAAC;IAIpD,CAAC;IAEJ,KAAK,CAAC,WAAW,CAAC,OAAyB;QACzC,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,SAAS,EAAa,CAAC;QAC3D,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAEnE,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;YACzD,MAAM,CAAC,KAAK,CAAC,uCAAY,CAAC,YAAY,EAAE,8CAA8C,CAAC,CAAC;YACxF,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,CAAC,CAAC,IAAI,CAAC;IAChB,CAAC;CACF,CAAA;AAnBY,kCAAW;sBAAX,WAAW;IADvB,IAAA,mBAAU,GAAE;qCAKuB,+BAAa;GAJpC,WAAW,CAmBvB"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@boarteam/boar-pack-users-backend",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.1.1",
|
|
4
4
|
"description": "NestJS Users module including permissions system, authentication strategies etc",
|
|
5
5
|
"main": "dist/index",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"files": [
|
|
8
|
-
"src",
|
|
9
8
|
"dist"
|
|
10
9
|
],
|
|
11
10
|
"repository": "git@github.com:boarteam/boar-pack.git",
|
|
@@ -16,7 +15,7 @@
|
|
|
16
15
|
"access": "public"
|
|
17
16
|
},
|
|
18
17
|
"dependencies": {
|
|
19
|
-
"@boarteam/boar-pack-common-backend": "^5.
|
|
18
|
+
"@boarteam/boar-pack-common-backend": "^5.1.0",
|
|
20
19
|
"@casl/ability": "^6.7.3",
|
|
21
20
|
"@dataui/crud": "^5.3.4",
|
|
22
21
|
"@dataui/crud-typeorm": "^5.3.4",
|
|
@@ -51,6 +50,7 @@
|
|
|
51
50
|
"ws": "^8.18.3"
|
|
52
51
|
},
|
|
53
52
|
"devDependencies": {
|
|
53
|
+
"@nestjs/cli": "^11.0.0",
|
|
54
54
|
"@types/bcrypt": "^6.0.0",
|
|
55
55
|
"@types/ms": "^2.1.0",
|
|
56
56
|
"@types/passport-google-oauth20": "^2.0.17",
|
|
@@ -63,9 +63,9 @@
|
|
|
63
63
|
"pg": "^8.16.3"
|
|
64
64
|
},
|
|
65
65
|
"scripts": {
|
|
66
|
-
"build": "rm -rf dist &&
|
|
66
|
+
"build": "rm -rf dist && nest build -p tsconfig.build.json",
|
|
67
67
|
"yalc:push": "yalc push",
|
|
68
68
|
"gen-types": "SWAGGER=true JWT_SECRET=swagger nest start"
|
|
69
69
|
},
|
|
70
|
-
"gitHead": "
|
|
70
|
+
"gitHead": "60bd81a1b4ed3d40a0594cf7a952dadac7d7baf4"
|
|
71
71
|
}
|
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
import { CreateManyDto, CrudRequest, } from '@dataui/crud';
|
|
2
|
-
import { DeepPartial, EntityManager, ObjectLiteral, Repository, } from 'typeorm';
|
|
3
|
-
import { TypeOrmCrudService } from "@dataui/crud-typeorm";
|
|
4
|
-
import { Injectable } from "@nestjs/common";
|
|
5
|
-
import { AuditAction, AuditLog } from "./entities/audit-log.entity";
|
|
6
|
-
import { TUser } from "../users";
|
|
7
|
-
import { plainToClass } from 'class-transformer';
|
|
8
|
-
|
|
9
|
-
@Injectable()
|
|
10
|
-
export class AuditLogBaseService<T extends ObjectLiteral> extends TypeOrmCrudService<T> {
|
|
11
|
-
|
|
12
|
-
public async createOne(req: CrudRequest<TUser>, dto: DeepPartial<T>): Promise<T> {
|
|
13
|
-
const result = await super.createOne(req, dto);
|
|
14
|
-
await this.createAuditLog({
|
|
15
|
-
action: AuditAction.CREATE,
|
|
16
|
-
userId: req.auth?.id,
|
|
17
|
-
tableName: this.repo.metadata.tableName,
|
|
18
|
-
newValues: result,
|
|
19
|
-
});
|
|
20
|
-
return result;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
public async createMany(
|
|
24
|
-
req: CrudRequest<TUser>,
|
|
25
|
-
dto: CreateManyDto<DeepPartial<T>>,
|
|
26
|
-
): Promise<T[]> {
|
|
27
|
-
const result = await super.createMany(req, dto);
|
|
28
|
-
|
|
29
|
-
await this.createAuditLog(
|
|
30
|
-
result.map(r => ({
|
|
31
|
-
userId: req.auth?.id,
|
|
32
|
-
tableName: this.repo.metadata.tableName,
|
|
33
|
-
newValues: r,
|
|
34
|
-
}))
|
|
35
|
-
);
|
|
36
|
-
|
|
37
|
-
return result;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
public async updateOne(req: CrudRequest<TUser>, dto: DeepPartial<T>): Promise<T> {
|
|
41
|
-
const { allowParamsOverride, returnShallow } = req.options.routes?.updateOneBase || {};
|
|
42
|
-
const paramsFilters = this.getParamFilters(req.parsed);
|
|
43
|
-
|
|
44
|
-
const found = await this.getOneOrFail(req, returnShallow);
|
|
45
|
-
|
|
46
|
-
const toSave = !allowParamsOverride
|
|
47
|
-
? { ...found, ...dto, ...paramsFilters, ...req.parsed.authPersist }
|
|
48
|
-
: { ...found, ...dto, ...req.parsed.authPersist };
|
|
49
|
-
const updated = await this.repo.save(
|
|
50
|
-
plainToClass(
|
|
51
|
-
this.entityType,
|
|
52
|
-
toSave,
|
|
53
|
-
req.parsed.classTransformOptions,
|
|
54
|
-
) as unknown as DeepPartial<T>,
|
|
55
|
-
);
|
|
56
|
-
|
|
57
|
-
let result: Partial<T> | null = null;
|
|
58
|
-
if (returnShallow) {
|
|
59
|
-
result = updated;
|
|
60
|
-
} else {
|
|
61
|
-
req.parsed.paramsFilter.forEach((filter) => {
|
|
62
|
-
filter.value = updated[filter.field];
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
result = await this.getOneOrFail(req);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
await this.createAuditLog({
|
|
69
|
-
action: AuditAction.UPDATE,
|
|
70
|
-
userId: req.auth?.id,
|
|
71
|
-
tableName: this.repo.metadata.tableName,
|
|
72
|
-
oldValues: found,
|
|
73
|
-
newValues: result,
|
|
74
|
-
});
|
|
75
|
-
|
|
76
|
-
return result as T;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
// TODO: implement
|
|
80
|
-
|
|
81
|
-
// /**
|
|
82
|
-
// * Recover one
|
|
83
|
-
// * @param req
|
|
84
|
-
// * @param dto
|
|
85
|
-
// */
|
|
86
|
-
// public async recoverOne(req: CrudRequest): Promise<T> {
|
|
87
|
-
// // disable cache while recovering
|
|
88
|
-
// req.options.query.cache = false;
|
|
89
|
-
// const found = await this.getOneOrFail(req, false, true);
|
|
90
|
-
// return this.repo.recover(found as DeepPartial<T>);
|
|
91
|
-
// }
|
|
92
|
-
//
|
|
93
|
-
// /**
|
|
94
|
-
// * Replace one
|
|
95
|
-
// * @param req
|
|
96
|
-
// * @param dto
|
|
97
|
-
// */
|
|
98
|
-
// public async replaceOne(req: CrudRequest, dto: DeepPartial<T>): Promise<T> {
|
|
99
|
-
// const { allowParamsOverride, returnShallow } = req.options.routes.replaceOneBase;
|
|
100
|
-
// const paramsFilters = this.getParamFilters(req.parsed);
|
|
101
|
-
// // disable cache while replacing
|
|
102
|
-
// req.options.query.cache = false;
|
|
103
|
-
// const [_, found] = await oO(this.getOneOrFail(req, returnShallow));
|
|
104
|
-
// const toSave = !allowParamsOverride
|
|
105
|
-
// ? { ...(found || {}), ...dto, ...paramsFilters, ...req.parsed.authPersist }
|
|
106
|
-
// : {
|
|
107
|
-
// ...(found || /* istanbul ignore next */ {}),
|
|
108
|
-
// ...paramsFilters,
|
|
109
|
-
// ...dto,
|
|
110
|
-
// ...req.parsed.authPersist,
|
|
111
|
-
// };
|
|
112
|
-
// const replaced = await this.repo.save(
|
|
113
|
-
// plainToClass(
|
|
114
|
-
// this.entityType,
|
|
115
|
-
// toSave,
|
|
116
|
-
// req.parsed.classTransformOptions,
|
|
117
|
-
// ) as unknown as DeepPartial<T>,
|
|
118
|
-
// );
|
|
119
|
-
//
|
|
120
|
-
// if (returnShallow) {
|
|
121
|
-
// return replaced;
|
|
122
|
-
// } else {
|
|
123
|
-
// const primaryParams = this.getPrimaryParams(req.options);
|
|
124
|
-
//
|
|
125
|
-
// /* istanbul ignore if */
|
|
126
|
-
// if (!primaryParams.length) {
|
|
127
|
-
// return replaced;
|
|
128
|
-
// }
|
|
129
|
-
//
|
|
130
|
-
// req.parsed.search = primaryParams.reduce(
|
|
131
|
-
// (acc, p) => ({ ...acc, [p]: replaced[p] }),
|
|
132
|
-
// {},
|
|
133
|
-
// );
|
|
134
|
-
// return this.getOneOrFail(req);
|
|
135
|
-
// }
|
|
136
|
-
// }
|
|
137
|
-
//
|
|
138
|
-
/**
|
|
139
|
-
* Delete one
|
|
140
|
-
* @param req
|
|
141
|
-
*/
|
|
142
|
-
public async deleteOne(req: CrudRequest<TUser>): Promise<void | T> {
|
|
143
|
-
const { returnDeleted } = req.options.routes?.deleteOneBase || {};
|
|
144
|
-
// disable cache while deleting
|
|
145
|
-
req.options.query!.cache = false;
|
|
146
|
-
const found = await this.getOneOrFail(req, returnDeleted);
|
|
147
|
-
const toReturn = returnDeleted
|
|
148
|
-
? plainToClass(this.entityType, { ...found }, req.parsed.classTransformOptions)
|
|
149
|
-
: undefined;
|
|
150
|
-
const deleted =
|
|
151
|
-
req.options.query!.softDelete === true
|
|
152
|
-
? await this.repo.softRemove(found as DeepPartial<T>)
|
|
153
|
-
: await this.repo.remove(found);
|
|
154
|
-
|
|
155
|
-
await this.createAuditLog({
|
|
156
|
-
action: AuditAction.DELETE,
|
|
157
|
-
userId: req.auth?.id,
|
|
158
|
-
tableName: this.repo.metadata.tableName,
|
|
159
|
-
oldValues: found,
|
|
160
|
-
});
|
|
161
|
-
|
|
162
|
-
return toReturn;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
public createAuditLog(log: Partial<AuditLog> | Partial<AuditLog>[], manager?: EntityManager): Promise<AuditLog | AuditLog[]> {
|
|
166
|
-
return (manager || this.repo.manager).getRepository(AuditLog).save(log as Partial<AuditLog>);
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { Controller, Req, UnauthorizedException } from '@nestjs/common';
|
|
2
|
-
import { ApiTags } from '@nestjs/swagger';
|
|
3
|
-
import { Crud, CrudController, CrudRequest, Override, ParsedRequest } from '@dataui/crud';
|
|
4
|
-
import { CheckPolicies } from "../casl";
|
|
5
|
-
import { AuditLogsService } from './audit-logs.service';
|
|
6
|
-
import { AuditLog } from './entities/audit-log.entity';
|
|
7
|
-
import { ViewAuditLogsPolicy } from "./policies/view-audit-logs.policy";
|
|
8
|
-
import { Action, CaslAbilityFactory, Subjects } from "../casl";
|
|
9
|
-
import { Request } from "express";
|
|
10
|
-
import { TUser } from "../users";
|
|
11
|
-
|
|
12
|
-
@Crud({
|
|
13
|
-
model: {
|
|
14
|
-
type: AuditLog,
|
|
15
|
-
},
|
|
16
|
-
params: {
|
|
17
|
-
id: {
|
|
18
|
-
field: 'id',
|
|
19
|
-
type: 'uuid',
|
|
20
|
-
primary: true,
|
|
21
|
-
},
|
|
22
|
-
},
|
|
23
|
-
query: {
|
|
24
|
-
alwaysPaginate: true,
|
|
25
|
-
join: {
|
|
26
|
-
user: {
|
|
27
|
-
allow: ['id', 'name'],
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
},
|
|
31
|
-
routes: {
|
|
32
|
-
only: ['getManyBase'],
|
|
33
|
-
},
|
|
34
|
-
})
|
|
35
|
-
@CheckPolicies(new ViewAuditLogsPolicy())
|
|
36
|
-
@ApiTags('AuditLogs')
|
|
37
|
-
@Controller('audit-logs')
|
|
38
|
-
export class AuditLogsController implements CrudController<AuditLog>{
|
|
39
|
-
constructor(
|
|
40
|
-
readonly service: AuditLogsService,
|
|
41
|
-
private readonly caslAbilityFactory: CaslAbilityFactory,
|
|
42
|
-
) {}
|
|
43
|
-
|
|
44
|
-
get base(): CrudController<AuditLog> {
|
|
45
|
-
return this;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
@Override('getManyBase')
|
|
49
|
-
async getMany(
|
|
50
|
-
@Req() request: Request,
|
|
51
|
-
@ParsedRequest() req: CrudRequest<TUser>,
|
|
52
|
-
) {
|
|
53
|
-
const user = request.user;
|
|
54
|
-
if (!user) {
|
|
55
|
-
throw new UnauthorizedException();
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
const ability = await this.caslAbilityFactory.createForUser(user);
|
|
59
|
-
if (ability.cannot(Action.Manage, 'all')) {
|
|
60
|
-
const tablesNames = this.service.repo.manager.connection.entityMetadatas
|
|
61
|
-
.filter(meta => meta.target instanceof Function && ability.can(Action.Manage, meta.target as Subjects))
|
|
62
|
-
.map(meta => meta.tableName);
|
|
63
|
-
|
|
64
|
-
req.parsed.search = {
|
|
65
|
-
$and: [
|
|
66
|
-
req.parsed.search,
|
|
67
|
-
{ tableName: { $in: tablesNames } },
|
|
68
|
-
],
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
return this.base.getManyBase!(req);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { Module } from '@nestjs/common';
|
|
2
|
-
import { getDataSourceToken, TypeOrmModule } from '@nestjs/typeorm';
|
|
3
|
-
import { AuditLogsService } from './audit-logs.service';
|
|
4
|
-
import { AuditLogsController } from './audit-logs.controller';
|
|
5
|
-
import { AuditLog } from './entities/audit-log.entity';
|
|
6
|
-
import { CaslModule, CaslAbilityFactory, Action } from "../casl";
|
|
7
|
-
import { AuditLogsPermissions } from "./audit-logs.permissions";
|
|
8
|
-
import { DataSource } from "typeorm";
|
|
9
|
-
|
|
10
|
-
@Module({})
|
|
11
|
-
export class AuditLogsModule {
|
|
12
|
-
static forRoot(config: { dataSourceName: string }) {
|
|
13
|
-
return {
|
|
14
|
-
module: AuditLogsModule,
|
|
15
|
-
imports: [
|
|
16
|
-
CaslModule.forFeature(),
|
|
17
|
-
TypeOrmModule.forFeature([AuditLog], config.dataSourceName),
|
|
18
|
-
],
|
|
19
|
-
providers: [
|
|
20
|
-
{
|
|
21
|
-
provide: AuditLogsService,
|
|
22
|
-
inject: [getDataSourceToken(config.dataSourceName)],
|
|
23
|
-
useFactory: (dataSource: DataSource) => {
|
|
24
|
-
return new AuditLogsService(dataSource.getRepository(AuditLog));
|
|
25
|
-
}
|
|
26
|
-
},
|
|
27
|
-
],
|
|
28
|
-
exports: [
|
|
29
|
-
AuditLogsService,
|
|
30
|
-
],
|
|
31
|
-
controllers: [
|
|
32
|
-
AuditLogsController,
|
|
33
|
-
]
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
constructor() {
|
|
38
|
-
CaslAbilityFactory.addPermissionToAction({
|
|
39
|
-
permission: AuditLogsPermissions.VIEW,
|
|
40
|
-
action: Action.Read,
|
|
41
|
-
subject: AuditLog,
|
|
42
|
-
});
|
|
43
|
-
CaslAbilityFactory.addPermissionToAction({
|
|
44
|
-
permission: AuditLogsPermissions.MANAGE,
|
|
45
|
-
action: Action.Manage,
|
|
46
|
-
subject: AuditLog,
|
|
47
|
-
})
|
|
48
|
-
}
|
|
49
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@nestjs/common';
|
|
2
|
-
import { TypeOrmCrudService } from '@dataui/crud-typeorm';
|
|
3
|
-
import { AuditLog } from './entities/audit-log.entity';
|
|
4
|
-
import { Repository } from 'typeorm';
|
|
5
|
-
|
|
6
|
-
@Injectable()
|
|
7
|
-
export class AuditLogsService extends TypeOrmCrudService<AuditLog> {
|
|
8
|
-
|
|
9
|
-
constructor(
|
|
10
|
-
readonly repo: Repository<AuditLog>,
|
|
11
|
-
) {
|
|
12
|
-
super(repo);
|
|
13
|
-
}
|
|
14
|
-
}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { Column, CreateDateColumn, Entity, ManyToOne, PrimaryGeneratedColumn, UpdateDateColumn, } from 'typeorm';
|
|
2
|
-
import { User } from "../../users";
|
|
3
|
-
|
|
4
|
-
export enum AuditAction {
|
|
5
|
-
CREATE = 'CREATE',
|
|
6
|
-
UPDATE = 'UPDATE',
|
|
7
|
-
DELETE = 'DELETE',
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
@Entity('audit_logs')
|
|
11
|
-
export class AuditLog {
|
|
12
|
-
@PrimaryGeneratedColumn('uuid')
|
|
13
|
-
id: string;
|
|
14
|
-
|
|
15
|
-
@Column({
|
|
16
|
-
type: 'enum',
|
|
17
|
-
enum: AuditAction,
|
|
18
|
-
})
|
|
19
|
-
action: AuditAction;
|
|
20
|
-
|
|
21
|
-
@Column({
|
|
22
|
-
type: 'uuid',
|
|
23
|
-
nullable: true,
|
|
24
|
-
})
|
|
25
|
-
userId: string | null;
|
|
26
|
-
|
|
27
|
-
@ManyToOne(() => User, {
|
|
28
|
-
createForeignKeyConstraints: false,
|
|
29
|
-
})
|
|
30
|
-
user: User | null;
|
|
31
|
-
|
|
32
|
-
@Column()
|
|
33
|
-
tableName: string;
|
|
34
|
-
|
|
35
|
-
@Column({ type: 'jsonb', nullable: true })
|
|
36
|
-
oldValues: Record<string, any> | null;
|
|
37
|
-
|
|
38
|
-
@Column({ type: 'jsonb', nullable: true })
|
|
39
|
-
newValues: Record<string, any> | null;
|
|
40
|
-
|
|
41
|
-
@CreateDateColumn({ name: 'created_at' })
|
|
42
|
-
createdAt: Date;
|
|
43
|
-
|
|
44
|
-
@UpdateDateColumn({ name: 'updated_at' })
|
|
45
|
-
updatedAt: Date;
|
|
46
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { IPolicyHandler, AppAbility, Action } from "../../casl";
|
|
2
|
-
import { AuditLog } from "../entities/audit-log.entity";
|
|
3
|
-
|
|
4
|
-
export class ViewAuditLogsPolicy implements IPolicyHandler {
|
|
5
|
-
handle(ability: AppAbility) {
|
|
6
|
-
return ability.can(Action.Read, AuditLog);
|
|
7
|
-
}
|
|
8
|
-
}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { Controller, NotFoundException, Param, Post, Req, Res, } from '@nestjs/common';
|
|
2
|
-
import { AuthService } from './auth.service';
|
|
3
|
-
import { ApiTags } from '@nestjs/swagger';
|
|
4
|
-
import type { Request, Response } from 'express';
|
|
5
|
-
import { LocalAuthTokenDto } from "./local-auth/local-auth.dto";
|
|
6
|
-
import { CheckPolicies, ManageAllPolicy } from "../casl";
|
|
7
|
-
import { UsersService } from "../users";
|
|
8
|
-
|
|
9
|
-
@ApiTags('Authentication')
|
|
10
|
-
@CheckPolicies(new ManageAllPolicy())
|
|
11
|
-
@Controller('auth-manage')
|
|
12
|
-
export default class AuthManageController {
|
|
13
|
-
constructor(
|
|
14
|
-
private readonly authService: AuthService,
|
|
15
|
-
private readonly usersService: UsersService,
|
|
16
|
-
) {}
|
|
17
|
-
|
|
18
|
-
@Post('login-as-user/:userId')
|
|
19
|
-
async loginAsUser(
|
|
20
|
-
@Req() req: Request,
|
|
21
|
-
@Res({ passthrough: true }) res: Response,
|
|
22
|
-
@Param('userId') userId: string,
|
|
23
|
-
): Promise<LocalAuthTokenDto> {
|
|
24
|
-
const user = await this.usersService.findOne({
|
|
25
|
-
where: { id: userId },
|
|
26
|
-
});
|
|
27
|
-
if (!user) {
|
|
28
|
-
throw new NotFoundException(`User with id ${userId} is not found`);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
const tokens = await this.authService.login(user);
|
|
32
|
-
this.authService.setCookie(res, tokens);
|
|
33
|
-
return tokens;
|
|
34
|
-
}
|
|
35
|
-
}
|
package/src/auth/auth.config.ts
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@nestjs/common';
|
|
2
|
-
import { ConfigService } from '@nestjs/config';
|
|
3
|
-
|
|
4
|
-
export type TAuthConfig = {
|
|
5
|
-
refreshTokenPath: string;
|
|
6
|
-
};
|
|
7
|
-
|
|
8
|
-
@Injectable()
|
|
9
|
-
export class AuthConfigService {
|
|
10
|
-
constructor(private configService: ConfigService) {
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
get config(): TAuthConfig {
|
|
14
|
-
const refreshTokenPath = this.configService.get<string>('REFRESH_TOKEN_PATH', '/api/auth/refresh');
|
|
15
|
-
|
|
16
|
-
return {
|
|
17
|
-
refreshTokenPath,
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
}
|