@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,47 +0,0 @@
|
|
|
1
|
-
import Joi from "joi";
|
|
2
|
-
import { JoiSchema } from 'nestjs-joi';
|
|
3
|
-
import { LogType, UserRole, LogLevel } from '../entities/event-log.entity';
|
|
4
|
-
|
|
5
|
-
export class EventLogUpdateDto {
|
|
6
|
-
@JoiSchema(Joi.string().valid(...Object.values(LogType)).optional())
|
|
7
|
-
logType?: LogType;
|
|
8
|
-
|
|
9
|
-
@JoiSchema(Joi.string().valid(...Object.values(LogLevel)).optional())
|
|
10
|
-
logLevel?: LogLevel;
|
|
11
|
-
|
|
12
|
-
@JoiSchema(Joi.string().optional())
|
|
13
|
-
action?: string;
|
|
14
|
-
|
|
15
|
-
@JoiSchema(Joi.string().optional())
|
|
16
|
-
method?: string;
|
|
17
|
-
|
|
18
|
-
@JoiSchema(Joi.string().uuid().allow(null).optional())
|
|
19
|
-
userId?: string;
|
|
20
|
-
|
|
21
|
-
@JoiSchema(Joi.string().valid(...Object.values(UserRole)).optional())
|
|
22
|
-
userRole?: string;
|
|
23
|
-
|
|
24
|
-
@JoiSchema(Joi.string().optional())
|
|
25
|
-
entity?: string;
|
|
26
|
-
|
|
27
|
-
@JoiSchema(Joi.string().uuid().allow(null).optional())
|
|
28
|
-
entityId?: string;
|
|
29
|
-
|
|
30
|
-
@JoiSchema(Joi.object().allow(null).optional())
|
|
31
|
-
payload?: Record<string, any>;
|
|
32
|
-
|
|
33
|
-
@JoiSchema(Joi.string().allow(null).optional())
|
|
34
|
-
url?: string;
|
|
35
|
-
|
|
36
|
-
@JoiSchema(Joi.string().allow(null).optional())
|
|
37
|
-
ipAddress?: string;
|
|
38
|
-
|
|
39
|
-
@JoiSchema(Joi.string().allow(null).optional())
|
|
40
|
-
userAgent?: string;
|
|
41
|
-
|
|
42
|
-
@JoiSchema(Joi.number().integer().allow(null).optional())
|
|
43
|
-
duration?: number;
|
|
44
|
-
|
|
45
|
-
@JoiSchema(Joi.number().integer().allow(null).optional())
|
|
46
|
-
statusCode?: number;
|
|
47
|
-
}
|
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
import { Column, CreateDateColumn, Entity, Index, ManyToOne, PrimaryGeneratedColumn, UpdateDateColumn, } from 'typeorm';
|
|
2
|
-
import { User } from "../../users";
|
|
3
|
-
|
|
4
|
-
export enum LogType {
|
|
5
|
-
AUDIT = 'Audit',
|
|
6
|
-
OPERATIONAL = 'Operational',
|
|
7
|
-
APPLICATION = 'Application',
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export enum UserRole {
|
|
11
|
-
ADMIN = 'Admin',
|
|
12
|
-
USER = 'User',
|
|
13
|
-
GUEST = 'Guest',
|
|
14
|
-
SYSTEM = 'System',
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export enum LogLevel {
|
|
18
|
-
INFO = 'Info',
|
|
19
|
-
WARNING = 'Warning',
|
|
20
|
-
ERROR = 'Error',
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
@Entity('event_logs')
|
|
24
|
-
export class EventLog {
|
|
25
|
-
@PrimaryGeneratedColumn('uuid')
|
|
26
|
-
id: string;
|
|
27
|
-
|
|
28
|
-
@Column({
|
|
29
|
-
type: 'enum',
|
|
30
|
-
enum: LogType,
|
|
31
|
-
})
|
|
32
|
-
logType: LogType;
|
|
33
|
-
|
|
34
|
-
@Column({
|
|
35
|
-
type: 'enum',
|
|
36
|
-
enum: LogLevel,
|
|
37
|
-
})
|
|
38
|
-
logLevel: LogLevel;
|
|
39
|
-
|
|
40
|
-
@Column()
|
|
41
|
-
action: string;
|
|
42
|
-
|
|
43
|
-
@Column({
|
|
44
|
-
type: 'varchar',
|
|
45
|
-
nullable: true,
|
|
46
|
-
})
|
|
47
|
-
method: string | null;
|
|
48
|
-
|
|
49
|
-
@Column({
|
|
50
|
-
type: 'uuid',
|
|
51
|
-
nullable: true,
|
|
52
|
-
})
|
|
53
|
-
userId: string | null;
|
|
54
|
-
|
|
55
|
-
@ManyToOne(() => User)
|
|
56
|
-
user: User | null;
|
|
57
|
-
|
|
58
|
-
@Column({
|
|
59
|
-
type: 'enum',
|
|
60
|
-
enum: UserRole,
|
|
61
|
-
})
|
|
62
|
-
userRole: UserRole;
|
|
63
|
-
|
|
64
|
-
@Column({
|
|
65
|
-
type: 'varchar',
|
|
66
|
-
nullable: true,
|
|
67
|
-
})
|
|
68
|
-
userName: string | null;
|
|
69
|
-
|
|
70
|
-
@Column({
|
|
71
|
-
type: 'varchar',
|
|
72
|
-
nullable: true,
|
|
73
|
-
})
|
|
74
|
-
externalUserId: string | null;
|
|
75
|
-
|
|
76
|
-
@Column()
|
|
77
|
-
entity: string;
|
|
78
|
-
|
|
79
|
-
@Column({
|
|
80
|
-
type: 'varchar',
|
|
81
|
-
nullable: true,
|
|
82
|
-
})
|
|
83
|
-
entityId: string | null;
|
|
84
|
-
|
|
85
|
-
@Column('jsonb', { nullable: true })
|
|
86
|
-
payload: Record<string, any> | null;
|
|
87
|
-
|
|
88
|
-
@Column({
|
|
89
|
-
type: 'varchar',
|
|
90
|
-
nullable: true,
|
|
91
|
-
})
|
|
92
|
-
url: string | null;
|
|
93
|
-
|
|
94
|
-
@Column({
|
|
95
|
-
type: 'varchar',
|
|
96
|
-
nullable: true,
|
|
97
|
-
})
|
|
98
|
-
ipAddress: string | null;
|
|
99
|
-
|
|
100
|
-
@Column({
|
|
101
|
-
type: 'varchar',
|
|
102
|
-
nullable: true
|
|
103
|
-
})
|
|
104
|
-
userAgent: string | null;
|
|
105
|
-
|
|
106
|
-
@Column('int', {
|
|
107
|
-
nullable: true,
|
|
108
|
-
})
|
|
109
|
-
duration: number | null;
|
|
110
|
-
|
|
111
|
-
@Column('int', {
|
|
112
|
-
nullable: true,
|
|
113
|
-
})
|
|
114
|
-
statusCode: number | null;
|
|
115
|
-
|
|
116
|
-
@Index('event_logs_service_index')
|
|
117
|
-
@Column({
|
|
118
|
-
default: 'main'
|
|
119
|
-
})
|
|
120
|
-
service: string;
|
|
121
|
-
|
|
122
|
-
@Column({
|
|
123
|
-
type: 'varchar',
|
|
124
|
-
nullable: true,
|
|
125
|
-
default: null,
|
|
126
|
-
})
|
|
127
|
-
serviceId: string | null;
|
|
128
|
-
|
|
129
|
-
@CreateDateColumn({
|
|
130
|
-
type: 'timestamp with time zone',
|
|
131
|
-
name: 'created_at'
|
|
132
|
-
})
|
|
133
|
-
createdAt: Date;
|
|
134
|
-
|
|
135
|
-
@UpdateDateColumn({
|
|
136
|
-
type: 'timestamp with time zone',
|
|
137
|
-
name: 'updated_at'
|
|
138
|
-
})
|
|
139
|
-
updatedAt: Date;
|
|
140
|
-
}
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import { Controller, Get, Query } from '@nestjs/common';
|
|
2
|
-
import { ApiExtraModels, ApiOkResponse, ApiTags, getSchemaPath } from '@nestjs/swagger';
|
|
3
|
-
import { Crud, CrudController } from '@dataui/crud';
|
|
4
|
-
import { EventLogsService } from './event-logs.service';
|
|
5
|
-
import { EventLog } from './entities/event-log.entity';
|
|
6
|
-
import { EventLogCreateDto } from './dto/event-log-create.dto';
|
|
7
|
-
import { EventLogUpdateDto } from "./dto/event-log-update.dto";
|
|
8
|
-
import { ManageEventLogsPolicy } from "./policies/manage-event-logs.policy";
|
|
9
|
-
import { ViewEventLogsPolicy } from "./policies/view-event-logs.policy";
|
|
10
|
-
import { CheckPolicies } from "../casl";
|
|
11
|
-
import { EventLogTimelineDto } from "./dto/event-log-timeline.dto";
|
|
12
|
-
import { EventLogTimelineQueryDto } from "./dto/event-log-timeline-query.dto";
|
|
13
|
-
|
|
14
|
-
@Crud({
|
|
15
|
-
model: {
|
|
16
|
-
type: EventLog,
|
|
17
|
-
},
|
|
18
|
-
params: {
|
|
19
|
-
id: {
|
|
20
|
-
field: 'id',
|
|
21
|
-
type: 'uuid',
|
|
22
|
-
primary: true,
|
|
23
|
-
},
|
|
24
|
-
},
|
|
25
|
-
query: {
|
|
26
|
-
alwaysPaginate: true,
|
|
27
|
-
join: {
|
|
28
|
-
user: {
|
|
29
|
-
allow: ['id', 'name'],
|
|
30
|
-
},
|
|
31
|
-
},
|
|
32
|
-
},
|
|
33
|
-
routes: {
|
|
34
|
-
only: ['getManyBase', 'createOneBase', 'updateOneBase', 'deleteOneBase'],
|
|
35
|
-
getManyBase: {
|
|
36
|
-
decorators: [
|
|
37
|
-
CheckPolicies(new ViewEventLogsPolicy()),
|
|
38
|
-
],
|
|
39
|
-
},
|
|
40
|
-
},
|
|
41
|
-
dto: {
|
|
42
|
-
create: EventLogCreateDto,
|
|
43
|
-
update: EventLogUpdateDto,
|
|
44
|
-
},
|
|
45
|
-
})
|
|
46
|
-
@CheckPolicies(new ManageEventLogsPolicy())
|
|
47
|
-
@ApiTags('EventLogs')
|
|
48
|
-
@ApiExtraModels(EventLogTimelineDto, EventLogTimelineQueryDto)
|
|
49
|
-
@Controller('event-logs')
|
|
50
|
-
export class EventLogsController implements CrudController<EventLog>{
|
|
51
|
-
constructor(
|
|
52
|
-
readonly service: EventLogsService,
|
|
53
|
-
) {}
|
|
54
|
-
|
|
55
|
-
@CheckPolicies(new ViewEventLogsPolicy())
|
|
56
|
-
@Get('timeline')
|
|
57
|
-
@ApiOkResponse({
|
|
58
|
-
type: EventLogTimelineDto,
|
|
59
|
-
isArray: true,
|
|
60
|
-
})
|
|
61
|
-
async getTimeline(
|
|
62
|
-
@Query() query: EventLogTimelineQueryDto,
|
|
63
|
-
): Promise<EventLogTimelineDto[]> {
|
|
64
|
-
const start = query.startTime ? new Date(query.startTime) : undefined;
|
|
65
|
-
const end = query.endTime ? new Date(query.endTime) : undefined;
|
|
66
|
-
return this.service.getTimeline(start, end, query.timezone);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
@CheckPolicies(new ViewEventLogsPolicy())
|
|
70
|
-
@Get('service-names')
|
|
71
|
-
@ApiOkResponse({
|
|
72
|
-
schema: {
|
|
73
|
-
type: 'array',
|
|
74
|
-
items: { type: 'string' },
|
|
75
|
-
},
|
|
76
|
-
})
|
|
77
|
-
async getServiceNames(): Promise<string[]> {
|
|
78
|
-
return this.service.getServiceNames();
|
|
79
|
-
}
|
|
80
|
-
}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
CallHandler,
|
|
3
|
-
ExecutionContext,
|
|
4
|
-
Inject,
|
|
5
|
-
Injectable,
|
|
6
|
-
Logger,
|
|
7
|
-
NestInterceptor,
|
|
8
|
-
SetMetadata
|
|
9
|
-
} from '@nestjs/common';
|
|
10
|
-
import { Observable, throwError } from 'rxjs';
|
|
11
|
-
import { catchError, tap } from 'rxjs/operators';
|
|
12
|
-
import { EventLog, LogLevel } from './entities/event-log.entity';
|
|
13
|
-
import { EventLogsService } from "./event-logs.service";
|
|
14
|
-
import { Request, Response } from 'express';
|
|
15
|
-
import { HttpException } from "@nestjs/common/exceptions/http.exception";
|
|
16
|
-
import { SERVICE_CONFIG_TOKEN } from "./event-logs.constants";
|
|
17
|
-
import type { TEventLogServiceConfig } from "./event-logs.types";
|
|
18
|
-
import { Reflector } from "@nestjs/core";
|
|
19
|
-
|
|
20
|
-
export type TSkipEventsLogOptions = true | {
|
|
21
|
-
body?: string[];
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export const SKIP_EVENTS_LOG = 'SKIP_EVENTS_LOG';
|
|
25
|
-
export const SkipEventsLog = (skipOptions: TSkipEventsLogOptions = true) => SetMetadata(SKIP_EVENTS_LOG, skipOptions);
|
|
26
|
-
|
|
27
|
-
@Injectable()
|
|
28
|
-
export class EventLogInterceptor implements NestInterceptor {
|
|
29
|
-
private readonly logger = new Logger(EventLogInterceptor.name);
|
|
30
|
-
|
|
31
|
-
constructor(
|
|
32
|
-
private readonly reflector: Reflector,
|
|
33
|
-
private readonly eventLogService: EventLogsService,
|
|
34
|
-
@Inject(SERVICE_CONFIG_TOKEN) private readonly serviceConfig?: TEventLogServiceConfig,
|
|
35
|
-
) {}
|
|
36
|
-
|
|
37
|
-
intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
|
|
38
|
-
const request = context.switchToHttp().getRequest() as Request;
|
|
39
|
-
const response = context.switchToHttp().getResponse() as Response;
|
|
40
|
-
const handler = context.getHandler();
|
|
41
|
-
const controller = context.getClass();
|
|
42
|
-
|
|
43
|
-
const skipOptions = this.reflector.getAllAndOverride<TSkipEventsLogOptions | undefined>(SKIP_EVENTS_LOG, [handler, controller]);
|
|
44
|
-
if (skipOptions === true) {
|
|
45
|
-
return next.handle();
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
const logEntry = new EventLog();
|
|
49
|
-
logEntry.action = handler.name;
|
|
50
|
-
logEntry.entity = controller.name;
|
|
51
|
-
|
|
52
|
-
if (this.serviceConfig) {
|
|
53
|
-
logEntry.service = this.serviceConfig.name;
|
|
54
|
-
logEntry.serviceId = this.serviceConfig.id || null;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
const now = Date.now();
|
|
58
|
-
|
|
59
|
-
return next.handle().pipe(
|
|
60
|
-
tap(() => {
|
|
61
|
-
logEntry.duration = Date.now() - now;
|
|
62
|
-
logEntry.statusCode = response.statusCode;
|
|
63
|
-
logEntry.logLevel = response.statusCode >= 500 ? LogLevel.ERROR : (response.statusCode >= 400 ? LogLevel.WARNING : LogLevel.INFO);
|
|
64
|
-
this.eventLogService.audit(logEntry, request, skipOptions);
|
|
65
|
-
}),
|
|
66
|
-
catchError((error: HttpException) => {
|
|
67
|
-
logEntry.duration = Date.now() - now;
|
|
68
|
-
logEntry.statusCode = error?.getStatus?.() || 500;
|
|
69
|
-
logEntry.logLevel = logEntry.statusCode >= 500 ? LogLevel.ERROR : LogLevel.WARNING;
|
|
70
|
-
this.eventLogService.audit(logEntry, request, skipOptions);
|
|
71
|
-
return throwError(() => error);
|
|
72
|
-
}),
|
|
73
|
-
);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { NamedLogger } from "@boarteam/boar-pack-common-backend/src/tools";
|
|
2
|
-
import { EventLogsService } from "./event-logs.service";
|
|
3
|
-
import { Inject } from "@nestjs/common";
|
|
4
|
-
import { SERVICE_CONFIG_TOKEN } from "./event-logs.constants";
|
|
5
|
-
import type { TEventLogServiceConfig } from "./event-logs.types";
|
|
6
|
-
import { LogLevel } from "./entities/event-log.entity";
|
|
7
|
-
|
|
8
|
-
export class EventLogsLogger extends NamedLogger {
|
|
9
|
-
constructor(
|
|
10
|
-
private readonly eventLogsService: EventLogsService,
|
|
11
|
-
@Inject(SERVICE_CONFIG_TOKEN) private readonly serviceConfig: TEventLogServiceConfig,
|
|
12
|
-
) {
|
|
13
|
-
const { id, name } = serviceConfig || {};
|
|
14
|
-
const prefix = id ? `${name} (${id})` : name;
|
|
15
|
-
super(prefix);
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
warn(message: any, ...optionalParams: any[]) {
|
|
19
|
-
super.warn(message, ...optionalParams);
|
|
20
|
-
this.eventLogsService.applicationLog({
|
|
21
|
-
action: 'log',
|
|
22
|
-
entity: 'EventLogsLogger',
|
|
23
|
-
service: this.serviceConfig.name,
|
|
24
|
-
serviceId: this.serviceConfig.id,
|
|
25
|
-
logLevel: LogLevel.WARNING,
|
|
26
|
-
payload: {
|
|
27
|
-
message: String(message),
|
|
28
|
-
...optionalParams?.length && { optionalParams },
|
|
29
|
-
},
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
error(message: any, stack: any, ...optionalParams: any[]) {
|
|
34
|
-
super.error(message, stack, ...optionalParams);
|
|
35
|
-
this.eventLogsService.applicationLog({
|
|
36
|
-
action: 'log',
|
|
37
|
-
entity: 'EventLogsLogger',
|
|
38
|
-
service: this.serviceConfig.name,
|
|
39
|
-
serviceId: this.serviceConfig.id,
|
|
40
|
-
logLevel: LogLevel.ERROR,
|
|
41
|
-
payload: {
|
|
42
|
-
message: String(message),
|
|
43
|
-
...stack && { stack },
|
|
44
|
-
...optionalParams?.length && { optionalParams },
|
|
45
|
-
},
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
}
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { Injectable, NestMiddleware, Inject, Logger, HttpException } from '@nestjs/common';
|
|
2
|
-
import { Request, Response, NextFunction } from 'express';
|
|
3
|
-
import { EventLogsService } from './event-logs.service';
|
|
4
|
-
import { EventLog, LogLevel } from './entities/event-log.entity';
|
|
5
|
-
import { SERVICE_CONFIG_TOKEN } from './event-logs.constants';
|
|
6
|
-
import type { TEventLogServiceConfig } from './event-logs.types';
|
|
7
|
-
|
|
8
|
-
@Injectable()
|
|
9
|
-
export class EventLogMiddleware implements NestMiddleware {
|
|
10
|
-
private readonly logger = new Logger(EventLogMiddleware.name);
|
|
11
|
-
|
|
12
|
-
constructor(
|
|
13
|
-
private readonly eventLogService: EventLogsService,
|
|
14
|
-
@Inject(SERVICE_CONFIG_TOKEN) private readonly serviceConfig?: TEventLogServiceConfig,
|
|
15
|
-
) {
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
use(req: Request, res: Response, next: NextFunction) {
|
|
19
|
-
const start = Date.now();
|
|
20
|
-
|
|
21
|
-
res.on('finish', () => {
|
|
22
|
-
if (this.eventLogService.requestAlreadyHandled(req)) {
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
if (res.statusCode >= 200 && res.statusCode < 300) {
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
const logEntry = new EventLog();
|
|
31
|
-
logEntry.action = req.method;
|
|
32
|
-
logEntry.entity = req.url.split('?')[0]
|
|
33
|
-
.split('/')
|
|
34
|
-
.filter((part) => part)
|
|
35
|
-
.map((part) => part[0].toUpperCase() + part.slice(1))
|
|
36
|
-
.join(' ');
|
|
37
|
-
|
|
38
|
-
if (this.serviceConfig) {
|
|
39
|
-
logEntry.service = this.serviceConfig.name;
|
|
40
|
-
logEntry.serviceId = this.serviceConfig.id || null;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
logEntry.duration = Date.now() - start;
|
|
45
|
-
logEntry.statusCode = res.statusCode;
|
|
46
|
-
logEntry.logLevel =
|
|
47
|
-
res.statusCode >= 500
|
|
48
|
-
? LogLevel.ERROR
|
|
49
|
-
: res.statusCode >= 400
|
|
50
|
-
? LogLevel.WARNING
|
|
51
|
-
: LogLevel.INFO;
|
|
52
|
-
|
|
53
|
-
this.eventLogService.audit(logEntry, req);
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
next();
|
|
57
|
-
}
|
|
58
|
-
}
|
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
import { Inject, MiddlewareConsumer, Module, NestModule, Optional } from '@nestjs/common';
|
|
2
|
-
import { getDataSourceToken, TypeOrmModule } from '@nestjs/typeorm';
|
|
3
|
-
import { EventLogsService } from './event-logs.service';
|
|
4
|
-
import { EventLogsController } from './event-logs.controller';
|
|
5
|
-
import { EventLog } from './entities/event-log.entity';
|
|
6
|
-
import { EventLogsPermissions } from "./event-logs.permissions";
|
|
7
|
-
import { Action, CaslAbilityFactory, CaslModule } from "../casl";
|
|
8
|
-
import { DataSource } from "typeorm";
|
|
9
|
-
import { APP_INTERCEPTOR } from "@nestjs/core";
|
|
10
|
-
import { EventLogInterceptor } from "./event-logs.interceptor";
|
|
11
|
-
import { CONFIGURE_EVENTS_MIDDLEWARE, SERVICE_CONFIG_TOKEN } from "./event-logs.constants";
|
|
12
|
-
import { TEventLogServiceConfig } from "./event-logs.types";
|
|
13
|
-
import { EventLogsLogger } from "./event-logs.logger";
|
|
14
|
-
import { EventLogMiddleware } from "./event-logs.middleware";
|
|
15
|
-
import { ScheduleModule } from "@boarteam/boar-pack-common-backend";
|
|
16
|
-
|
|
17
|
-
@Module({})
|
|
18
|
-
export class EventLogsModule implements NestModule {
|
|
19
|
-
static forRoot(config: { dataSourceName: string }) {
|
|
20
|
-
return {
|
|
21
|
-
module: EventLogsModule,
|
|
22
|
-
imports: [
|
|
23
|
-
CaslModule.forFeature(),
|
|
24
|
-
TypeOrmModule.forFeature([EventLog], config.dataSourceName),
|
|
25
|
-
],
|
|
26
|
-
providers: [
|
|
27
|
-
{
|
|
28
|
-
provide: EventLogsService,
|
|
29
|
-
inject: [getDataSourceToken(config.dataSourceName)],
|
|
30
|
-
useFactory: (dataSource: DataSource) => {
|
|
31
|
-
return new EventLogsService(dataSource.getRepository(EventLog), dataSource);
|
|
32
|
-
}
|
|
33
|
-
},
|
|
34
|
-
],
|
|
35
|
-
exports: [
|
|
36
|
-
EventLogsService,
|
|
37
|
-
],
|
|
38
|
-
controllers: [
|
|
39
|
-
EventLogsController,
|
|
40
|
-
]
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
static forInterceptor(config: {
|
|
45
|
-
dataSourceName: string,
|
|
46
|
-
service?: TEventLogServiceConfig,
|
|
47
|
-
eventLogsServiceClass?: new (...args: any[]) => EventLogsService,
|
|
48
|
-
}) {
|
|
49
|
-
return {
|
|
50
|
-
module: EventLogsModule,
|
|
51
|
-
imports: [
|
|
52
|
-
CaslModule.forFeature(),
|
|
53
|
-
ScheduleModule,
|
|
54
|
-
TypeOrmModule.forFeature([EventLog], config.dataSourceName),
|
|
55
|
-
],
|
|
56
|
-
providers: [
|
|
57
|
-
{
|
|
58
|
-
provide: EventLogsService,
|
|
59
|
-
inject: [getDataSourceToken(config.dataSourceName)],
|
|
60
|
-
useFactory: (dataSource: DataSource) => {
|
|
61
|
-
const serviceClass = config.eventLogsServiceClass || EventLogsService;
|
|
62
|
-
return new serviceClass(dataSource.getRepository(EventLog), dataSource);
|
|
63
|
-
}
|
|
64
|
-
},
|
|
65
|
-
{
|
|
66
|
-
provide: SERVICE_CONFIG_TOKEN,
|
|
67
|
-
useValue: config.service,
|
|
68
|
-
},
|
|
69
|
-
EventLogsLogger,
|
|
70
|
-
{
|
|
71
|
-
provide: APP_INTERCEPTOR,
|
|
72
|
-
useClass: EventLogInterceptor,
|
|
73
|
-
},
|
|
74
|
-
{
|
|
75
|
-
provide: CONFIGURE_EVENTS_MIDDLEWARE,
|
|
76
|
-
useValue: true,
|
|
77
|
-
}
|
|
78
|
-
],
|
|
79
|
-
exports: [
|
|
80
|
-
EventLogsService,
|
|
81
|
-
EventLogsLogger,
|
|
82
|
-
CONFIGURE_EVENTS_MIDDLEWARE,
|
|
83
|
-
SERVICE_CONFIG_TOKEN,
|
|
84
|
-
],
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
static forFeature(config: { dataSourceName: string }) {
|
|
89
|
-
return {
|
|
90
|
-
module: EventLogsModule,
|
|
91
|
-
imports: [
|
|
92
|
-
CaslModule,
|
|
93
|
-
TypeOrmModule.forFeature([EventLog], config.dataSourceName),
|
|
94
|
-
],
|
|
95
|
-
providers: [
|
|
96
|
-
{
|
|
97
|
-
provide: EventLogsService,
|
|
98
|
-
inject: [getDataSourceToken(config.dataSourceName)],
|
|
99
|
-
useFactory: (dataSource: DataSource) => {
|
|
100
|
-
return new EventLogsService(dataSource.getRepository(EventLog), dataSource);
|
|
101
|
-
}
|
|
102
|
-
},
|
|
103
|
-
],
|
|
104
|
-
exports: [
|
|
105
|
-
EventLogsService,
|
|
106
|
-
],
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
constructor(
|
|
111
|
-
@Optional()
|
|
112
|
-
@Inject(CONFIGURE_EVENTS_MIDDLEWARE) private readonly configureEventsMiddleware: boolean,
|
|
113
|
-
) {
|
|
114
|
-
CaslAbilityFactory.addPermissionToAction({
|
|
115
|
-
permission: EventLogsPermissions.VIEW,
|
|
116
|
-
action: Action.Read,
|
|
117
|
-
subject: EventLog,
|
|
118
|
-
});
|
|
119
|
-
CaslAbilityFactory.addPermissionToAction({
|
|
120
|
-
permission: EventLogsPermissions.MANAGE,
|
|
121
|
-
action: Action.Manage,
|
|
122
|
-
subject: EventLog,
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
configure(consumer: MiddlewareConsumer) {
|
|
127
|
-
if (this.configureEventsMiddleware) {
|
|
128
|
-
consumer.apply(EventLogMiddleware).forRoutes('*');
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
}
|