Merge pull request 'rc' (#7) from rc into main

pull/20/head
deployer3000 2025-03-19 16:25:41 +03:00
commit a57a906b0a
7 changed files with 104 additions and 4 deletions

8
.env
View File

@ -1 +1,9 @@
#Прометеус
#PROMETHEUS_API=http://192.168.2.34:9090/api/v1 #PROMETHEUS_API=http://192.168.2.34:9090/api/v1
#Постгресс
#DB_HOST=192.168.2.37
#DB_PORT=5432
#DB_USER=trust
#DB_PASSWORD=kaiqolzp2a4aH
#DB_NAME=trust-db

View File

@ -28,7 +28,12 @@
"axios": "^1.7.9", "axios": "^1.7.9",
"reflect-metadata": "^0.2.2", "reflect-metadata": "^0.2.2",
"dotenv": "^16.3.1", "dotenv": "^16.3.1",
"rxjs": "^7.8.1" "rxjs": "^7.8.1",
"@nestjs/typeorm": "^11.0.0",
"pg": "^8.14.1",
"typeorm": "^0.3.21",
"bcrypt": "^5.1.1",
"@types/bcrypt": "^5.0.2"
}, },
"devDependencies": { "devDependencies": {
"@eslint/eslintrc": "^3.2.0", "@eslint/eslintrc": "^3.2.0",

View File

@ -1,8 +1,10 @@
import { Module } from '@nestjs/common'; import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { HttpModule } from '@nestjs/axios'; import { HttpModule } from '@nestjs/axios';
import { PrometheusService } from './prometheus.service'; import { PrometheusService } from './prometheus.service';
import { MetricsController } from './metrics.controller'; import { MetricsController } from './metrics.controller';
import { ConfigModule } from '@nestjs/config'; import { ConfigModule } from '@nestjs/config';
import { AuthModule } from './auth/auth.module';
@Module({ @Module({
imports: [ imports: [
@ -10,7 +12,20 @@ import { ConfigModule } from '@nestjs/config';
isGlobal: true, isGlobal: true,
envFilePath: '.env', envFilePath: '.env',
}), }),
HttpModule], TypeOrmModule.forRoot({
type: 'postgres',
host: process.env.DB_HOST,
port: parseInt(process.env.DB_PORT || '5432', 10),
username: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
entities: [__dirname + '/**/*.entity{.ts,.js}'],
synchronize: false,
logging: true,
}),
HttpModule,
AuthModule,
],
controllers: [MetricsController], controllers: [MetricsController],
providers: [PrometheusService], providers: [PrometheusService],
}) })

View File

@ -0,0 +1,16 @@
import { Controller, Post, Body, UnauthorizedException } from '@nestjs/common';
import { AuthService } from './auth.service';
@Controller('auth')
export class AuthController {
constructor(private authService: AuthService) { }
@Post('login')
async login(@Body() body: { login: string; password: string }) {
const user = await this.authService.validateUser(body.login, body.password);
if (!user) {
throw new UnauthorizedException('Неверный логин или пароль');
}
return { success: true, user };
}
}

12
src/auth/auth.module.ts Normal file
View File

@ -0,0 +1,12 @@
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AuthService } from './auth.service';
import { AuthController } from './auth.controller';
import { User } from './user.entity';
@Module({
imports: [TypeOrmModule.forFeature([User])],
controllers: [AuthController],
providers: [AuthService],
})
export class AuthModule { }

31
src/auth/auth.service.ts Normal file
View File

@ -0,0 +1,31 @@
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { User } from './user.entity';
@Injectable()
export class AuthService {
constructor(
@InjectRepository(User)
private usersRepository: Repository<User>,
) { }
async validateUser(login: string, password: string): Promise<any> {
console.log(`Проверка пользователя: ${login}, пароль: ${password}`);
// Ищем пользователя по login
const user = await this.usersRepository.findOne({ where: { login } });
console.log(`Найденный пользователь:`, user);
// Проверяем, что нашли пользователя и пароль совпадает
if (user && user.password === password) {
console.log(`Авторизация успешна`);
const { password, ...result } = user;
return result;
}
console.log(`Ошибка: неверный логин или пароль`);
return null;
}
}

13
src/auth/user.entity.ts Normal file
View File

@ -0,0 +1,13 @@
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';
@Entity('users')
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
login: string;
@Column()
password: string;
}