on auth token for users
This commit is contained in:
@ -1,10 +1,11 @@
|
|||||||
import { Module } from '@nestjs/common';
|
import { Module, HttpModule } from '@nestjs/common';
|
||||||
import { UsersController } from './users/users.contoller';
|
import { UsersController } from './users/users.contoller';
|
||||||
import {MongooseModule} from '@nestjs/mongoose';
|
import {MongooseModule} from '@nestjs/mongoose';
|
||||||
import {MONGO_URL, DB_NAME} from './consts';
|
import {MONGO_URL, DB_NAME} from './consts';
|
||||||
import {User, UserSchema} from './users/users.schema';
|
import {User, UserSchema} from './users/users.schema';
|
||||||
import {UserService} from './users/users.service';
|
import {UserService} from './users/users.service';
|
||||||
import {AuthController} from './auth/auth.controller';
|
import {AuthController} from './auth/auth.controller';
|
||||||
|
import {AuthService} from './auth/auth.service';
|
||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
imports: [
|
imports: [
|
||||||
@ -14,6 +15,7 @@ import {AuthController} from './auth/auth.controller';
|
|||||||
MongooseModule.forFeature([
|
MongooseModule.forFeature([
|
||||||
{name: User.name, schema: UserSchema},
|
{name: User.name, schema: UserSchema},
|
||||||
], DB_NAME),
|
], DB_NAME),
|
||||||
|
HttpModule,
|
||||||
],
|
],
|
||||||
controllers: [
|
controllers: [
|
||||||
UsersController,
|
UsersController,
|
||||||
@ -21,6 +23,7 @@ import {AuthController} from './auth/auth.controller';
|
|||||||
],
|
],
|
||||||
providers: [
|
providers: [
|
||||||
UserService,
|
UserService,
|
||||||
|
AuthService,
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
export class AppModule {}
|
export class AppModule {}
|
||||||
|
|||||||
21
src/auth/auth.service.ts
Normal file
21
src/auth/auth.service.ts
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
import {Injectable, UnauthorizedException, HttpService} from '@nestjs/common';
|
||||||
|
import {Request} from 'express';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class AuthService {
|
||||||
|
constructor(
|
||||||
|
private http: HttpService
|
||||||
|
) {}
|
||||||
|
|
||||||
|
async checkRequest(request: Request): Promise<boolean> {
|
||||||
|
const {data} = await this.http.post('http://api.auth.vigdorov.ru/auth/check', {
|
||||||
|
access_token: request.headers.authorization,
|
||||||
|
agent: request.headers['user-agent']
|
||||||
|
}).toPromise();
|
||||||
|
|
||||||
|
if (!data) {
|
||||||
|
throw new UnauthorizedException('Доступ запрещен');
|
||||||
|
}
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -29,18 +29,22 @@ import {
|
|||||||
REMOVE_SUCCESS,
|
REMOVE_SUCCESS,
|
||||||
REMOVE_NOT_FOUND,
|
REMOVE_NOT_FOUND,
|
||||||
} from './users.responses';
|
} from './users.responses';
|
||||||
|
import {AuthService} from 'src/auth/auth.service';
|
||||||
|
|
||||||
@Controller(USERS_CONTROLLER)
|
@Controller(USERS_CONTROLLER)
|
||||||
@ApiTags(USERS_CONTROLLER)
|
@ApiTags(USERS_CONTROLLER)
|
||||||
export class UsersController {
|
export class UsersController {
|
||||||
constructor(
|
constructor(
|
||||||
private readonly userService: UserService
|
private readonly userService: UserService,
|
||||||
|
private readonly authService: AuthService,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
@Get()
|
@Get()
|
||||||
@Header(...ALLOW_ORIGIN_ALL)
|
@Header(...ALLOW_ORIGIN_ALL)
|
||||||
@ApiResponse(FIND_ALL_SUCCESS)
|
@ApiResponse(FIND_ALL_SUCCESS)
|
||||||
async findAll(): Promise<UserResponse[]> {
|
async findAll(@Req() request: Request): Promise<UserResponse[]> {
|
||||||
|
await this.authService.checkRequest(request);
|
||||||
|
|
||||||
return this.userService.findAll();
|
return this.userService.findAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -53,6 +57,8 @@ export class UsersController {
|
|||||||
description: 'Логин пользователя',
|
description: 'Логин пользователя',
|
||||||
})
|
})
|
||||||
async findOne(@Req() request: Request<{login: string}>): Promise<UserResponse> {
|
async findOne(@Req() request: Request<{login: string}>): Promise<UserResponse> {
|
||||||
|
await this.authService.checkRequest(request);
|
||||||
|
|
||||||
return await this.userService.findOne(request.params.login);
|
return await this.userService.findOne(request.params.login);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -66,6 +72,8 @@ export class UsersController {
|
|||||||
description: 'Объект для создания пользователя'
|
description: 'Объект для создания пользователя'
|
||||||
})
|
})
|
||||||
async createUser(@Req() request: Request<null, CreateUserRequest>): Promise<UserResponse> {
|
async createUser(@Req() request: Request<null, CreateUserRequest>): Promise<UserResponse> {
|
||||||
|
await this.authService.checkRequest(request);
|
||||||
|
|
||||||
return await this.userService.create(request.body);
|
return await this.userService.create(request.body);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -79,6 +87,8 @@ export class UsersController {
|
|||||||
description: 'Объект обновления данных пользователя'
|
description: 'Объект обновления данных пользователя'
|
||||||
})
|
})
|
||||||
async updateUser(@Req() request: Request<null, UpdateUserRequest>): Promise<UserResponse> {
|
async updateUser(@Req() request: Request<null, UpdateUserRequest>): Promise<UserResponse> {
|
||||||
|
await this.authService.checkRequest(request);
|
||||||
|
|
||||||
return await this.userService.update(request.body);
|
return await this.userService.update(request.body);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -91,6 +101,8 @@ export class UsersController {
|
|||||||
description: 'Логин пользователя',
|
description: 'Логин пользователя',
|
||||||
})
|
})
|
||||||
async removeUser(@Req() request: Request<{login: string}>): Promise<UpdateUserRequest> {
|
async removeUser(@Req() request: Request<{login: string}>): Promise<UpdateUserRequest> {
|
||||||
|
await this.authService.checkRequest(request);
|
||||||
|
|
||||||
return await this.userService.removeOne(request.params.login);
|
return await this.userService.removeOne(request.params.login);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user