canvas
This commit is contained in:
@@ -7,7 +7,6 @@ DATABASE_PORT=3306
|
|||||||
MYSQL_ROOT_PASSWORD=kjsdahflöijsdiu
|
MYSQL_ROOT_PASSWORD=kjsdahflöijsdiu
|
||||||
|
|
||||||
# security
|
# security
|
||||||
IGNORE_PASSWORDS=FALSE # hier kann man sich nur mit dem Username einloggen, nicht zu empfehlen ausser zum debuggen
|
|
||||||
JWT_SECRET=super-geheimes-secret
|
JWT_SECRET=super-geheimes-secret
|
||||||
JWT_EXPIRES_IN=10m
|
JWT_EXPIRES_IN=10m
|
||||||
JWT_REFRESH_EXPIRES_IN=1w
|
JWT_REFRESH_EXPIRES_IN=1w
|
||||||
@@ -24,4 +23,5 @@ MAILER_PASSWORD=xxxxx
|
|||||||
MAILER_FROM='"No Reply" <noreply@example.com>'
|
MAILER_FROM='"No Reply" <noreply@example.com>'
|
||||||
|
|
||||||
# Client
|
# Client
|
||||||
CLIENT_URL=http://localhost:4200
|
CLIENT_URL=http://localhost:4200
|
||||||
|
PRODUCTION=true
|
||||||
@@ -8,7 +8,8 @@ export class UserService {
|
|||||||
constructor(
|
constructor(
|
||||||
private clientRepository: ClientRepository,
|
private clientRepository: ClientRepository,
|
||||||
private logRepository: LogRepository,
|
private logRepository: LogRepository,
|
||||||
) {}
|
) {
|
||||||
|
}
|
||||||
|
|
||||||
getUserClients(user: User): Promise<Client[]> {
|
getUserClients(user: User): Promise<Client[]> {
|
||||||
return this.clientRepository.find({
|
return this.clientRepository.find({
|
||||||
|
|||||||
@@ -31,7 +31,10 @@ export class AuthController {
|
|||||||
password,
|
password,
|
||||||
clientId,
|
clientId,
|
||||||
);
|
);
|
||||||
this.logger.log(`User ${username} logged in on client ${clientId}`);
|
this.logger.log(
|
||||||
|
`User ${username} logged in on client ${clientId}`,
|
||||||
|
clientId != null ? 'login' : 'systemlogin',
|
||||||
|
);
|
||||||
return token;
|
return token;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import { LoggerService, Injectable, Logger } from '@nestjs/common';
|
import { LoggerService, Injectable, Logger } from '@nestjs/common';
|
||||||
|
import { ConfigService } from '@nestjs/config';
|
||||||
import { InjectRepository } from '@nestjs/typeorm';
|
import { InjectRepository } from '@nestjs/typeorm';
|
||||||
import { Log, LOGMESSAGETYPE } from 'src/model/log.entity';
|
import { Log, LOGMESSAGETYPE } from 'src/model/log.entity';
|
||||||
import { Repository } from 'typeorm';
|
import { Repository } from 'typeorm';
|
||||||
@@ -8,13 +9,19 @@ export class CustomLogger implements LoggerService {
|
|||||||
private readonly logger = new Logger('CustomLogger');
|
private readonly logger = new Logger('CustomLogger');
|
||||||
|
|
||||||
// constructor(private readonly connection: Connection) {}
|
// constructor(private readonly connection: Connection) {}
|
||||||
constructor(@InjectRepository(Log) private logRepository: Repository<Log>) {}
|
constructor(
|
||||||
|
@InjectRepository(Log) private logRepository: Repository<Log>,
|
||||||
|
private config: ConfigService,
|
||||||
|
) {}
|
||||||
|
|
||||||
private async logToDatabase(
|
private async logToDatabase(
|
||||||
level: string,
|
level: string,
|
||||||
message: string,
|
message: string,
|
||||||
type: LOGMESSAGETYPE = 'system',
|
type: LOGMESSAGETYPE = 'system',
|
||||||
) {
|
) {
|
||||||
|
if (this.config.get('PRODUCTION') == 'false') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
const logEntry = new Log();
|
const logEntry = new Log();
|
||||||
logEntry.level = level;
|
logEntry.level = level;
|
||||||
logEntry.message = message;
|
logEntry.message = message;
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
<div>
|
<div>
|
||||||
<canvas id="canvas">{{chart}}</canvas>
|
<h2>Logins</h2>
|
||||||
|
<canvas id="canvas" width="400px" >{{chart}}</canvas>
|
||||||
</div>
|
</div>
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
h2 {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
@@ -3,32 +3,31 @@
|
|||||||
<div> {{ userName }} </div>
|
<div> {{ userName }} </div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="create-container">
|
<div class="flex-row body_design">
|
||||||
<div class="flex-row">
|
<div>
|
||||||
<button mat-fab id="createClient" (click)="createClient()" [disabled]="clients.length == 10" >
|
<div class="create-container">
|
||||||
<mat-icon>add</mat-icon>
|
<div class="flex-row">
|
||||||
</button>
|
<button mat-fab id="createClient" (click)="createClient()" [disabled]="clients.length == 10" >
|
||||||
|
<mat-icon>add</mat-icon>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<label for="createClient">
|
||||||
|
Client erstellen
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="flex-row" style="gap: 4px;">
|
||||||
|
<div class="chip"><span class="counter">{{ clients.length }}</span> von 10</div>
|
||||||
|
<div>Clients erstellt</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="card-container">
|
||||||
|
<div class="card-container__list">
|
||||||
|
<ng-container #listSection />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<label for="createClient">
|
<app-chart-login />
|
||||||
Client erstellen
|
</div>
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
<div class="flex-row" style="gap: 4px;">
|
|
||||||
<div class="chip"><span class="counter">{{ clients.length }}</span> von 10</div>
|
|
||||||
<div>Clients erstellt</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="card-container">
|
|
||||||
<div class="card-container__list">
|
|
||||||
<ng-container #listSection>
|
|
||||||
|
|
||||||
</ng-container>
|
|
||||||
<!-- @for (client of clients; track $index) {
|
|
||||||
<app-card [client]="client" (onDelete)="openDeleteDialog($event)" ></app-card>
|
|
||||||
} -->
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<app-chart-login></app-chart-login>
|
|
||||||
@@ -53,4 +53,11 @@
|
|||||||
.title {
|
.title {
|
||||||
font-size: 1.5rem;
|
font-size: 1.5rem;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.body_design{
|
||||||
|
flex-wrap: wrap;
|
||||||
|
align-items: flex-start;
|
||||||
|
gap: 32px;
|
||||||
|
justify-content: center;
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user