Добавлена работа с пользователями по всем методам, добавлена авторизация пользователей

This commit is contained in:
vigdorov
2020-07-26 22:18:59 +03:00
parent baeded4a7a
commit 3711ef5f8f
10 changed files with 729 additions and 44 deletions

View File

@ -0,0 +1,80 @@
import {Controller, Req, Post, Options, Header, HttpCode} from '@nestjs/common';
import {ApiResponse, ApiTags, ApiBody} from '@nestjs/swagger';
import {ALLOW_ORIGIN_ALL, ALLOW_METHOD, ALLOW_CREDENTIALS, CONTENT_LENGTH, ALLOW_HEADERS, AUTH_CONTROLLER} from '../consts';
import {UserService} from '../users/users.service';
import {AuthRequest, TokenResponse, RefreshAuthRequest, CheckAuthTokenRequest} from '../users/users.schema';
import {Request} from 'express';
@Controller(AUTH_CONTROLLER)
@ApiTags(AUTH_CONTROLLER)
export class AuthController {
constructor(
private readonly userService: UserService
) {}
@Post()
@Header(...ALLOW_ORIGIN_ALL)
@ApiResponse({
status: 201,
description: 'Метод авторизации пользователя',
type: TokenResponse,
})
@ApiBody({
type: AuthRequest,
description: 'Ожидает логин и пароль пользователя для авторизации'
})
async authUser(@Req() request: Request<null, AuthRequest>): Promise<TokenResponse> {
const host = request.headers.host;
const agent = request.headers['user-agent'];
return await this.userService.authUser(request.body.login, request.body.password, host, agent);
}
@Post('refresh')
@Header(...ALLOW_ORIGIN_ALL)
@ApiResponse({
status: 201,
description: 'Метод обновления токенов',
type: TokenResponse,
})
@ApiBody({
type: RefreshAuthRequest,
description: 'Токен для сброса токенов'
})
async refreshAuth(@Req() request: Request<null, RefreshAuthRequest>): Promise<TokenResponse> {
const host = request.headers.host;
const agent = request.headers['user-agent'];
const refresh_token = request.body.refresh_token;
return await this.userService.refreshAuth(refresh_token, host, agent);
}
@Post('check')
@ApiResponse({
status: 200,
description: 'Проверяет токен авторизации',
type: Boolean,
})
@ApiBody({
type: CheckAuthTokenRequest,
description: 'Токен для проверки',
})
async checkAccessToken(@Req() request: Request<null, CheckAuthTokenRequest>): Promise<boolean> {
const {access_token, host, agent} = request.body;
console.log(request.headers)
return this.userService.checkAccessToken(access_token, host, agent);
}
@Options([
'', 'refresh', 'check'
])
@Header(...ALLOW_ORIGIN_ALL)
@Header(...ALLOW_METHOD)
@Header(...ALLOW_CREDENTIALS)
@Header(...CONTENT_LENGTH)
@Header(...ALLOW_HEADERS)
@HttpCode(204)
async optionsAuth(): Promise<string> {
return '';
}
}