Files
auth-service/src/auth/auth.controller.ts

88 lines
2.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 '';
}
}