88 lines
2.6 KiB
TypeScript
88 lines
2.6 KiB
TypeScript
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';
|
||
import {
|
||
AUTH_SUCCESS,
|
||
AUTH_BAD_REQUEST,
|
||
REFRESH_AUTH_SUCCESS,
|
||
REFRESH_AUTH_BAD_REQUEST,
|
||
CHECK_AUTH_TOKEN,
|
||
} from './auth.responses';
|
||
|
||
|
||
@Controller(AUTH_CONTROLLER)
|
||
@ApiTags(AUTH_CONTROLLER)
|
||
export class AuthController {
|
||
constructor(
|
||
private readonly userService: UserService
|
||
) {}
|
||
|
||
@Post()
|
||
@Header(...ALLOW_ORIGIN_ALL)
|
||
@ApiResponse(AUTH_SUCCESS)
|
||
@ApiResponse(AUTH_BAD_REQUEST)
|
||
@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(REFRESH_AUTH_SUCCESS)
|
||
@ApiResponse(REFRESH_AUTH_BAD_REQUEST)
|
||
@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(CHECK_AUTH_TOKEN)
|
||
@ApiBody({
|
||
type: CheckAuthTokenRequest,
|
||
description: 'Токен для проверки',
|
||
})
|
||
async checkAccessToken(@Req() request: Request<null, CheckAuthTokenRequest>): Promise<boolean> {
|
||
const {access_token, host, agent} = request.body;
|
||
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 '';
|
||
}
|
||
} |