import { Body, Controller, Get, Post, Req, UseGuards } from '@nestjs/common';
import { AuthService } from './auth.service';
import { CreateAuthDto } from './dto/create-auth.dto';
import { LogoutAuthDto } from './dto/logout-auth.dto';
import { CreateApiTokenDto } from './dto/create-api-token.dto';
import { RevokeApiTokenDto } from './dto/revoke-api-token.dto';
import { Public } from '../public/public.decorator';
import { AuthGuard } from './auth.guard';
import { RefreshToken } from './dto/refresh-token.dto';
import { ApiCreatedResponse, ApiOperation } from '@nestjs/swagger';
import { ApiToken, TokenPair } from './entity/token';
@Controller('auth')
export class AuthController {
constructor(
private readonly authService: AuthService,
) {}
@ApiOperation({
summary: '刷新令牌对',
description: '刷新令牌对, 返回一个新的令牌对'
})
@ApiCreatedResponse({
type: TokenPair,
})
@Public()
@Post('/token/refresh')
async refreshToken(
@Body() body: RefreshToken
){
return this.authService.refreshToken(body.token)
}
@ApiOperation({
summary: '登录'
})
@ApiCreatedResponse({
type: TokenPair,
})
@Public()
@Post('login')
@UseGuards(AuthGuard)
async login(@Body() body: CreateAuthDto) {
return this.authService.login(body);
}
@ApiOperation({
summary: '登出'
})
@Post('logout')
@UseGuards(AuthGuard)
async logout(@Body() body: LogoutAuthDto) {
return this.authService.logout(body.token);
}
@ApiOperation({
summary: '生成API Token',
description: '用于外部系统调用'
})
@ApiCreatedResponse({
type: ApiToken
})
@Public()
@Post('api-token')
async generateApiToken(@Body() body: CreateApiTokenDto) {
return this.authService.generateApiToken(body, body.tokenName);
}
@ApiOperation({
summary: '撤销API Token',
description: '用于外部系统调用'
})
@Post('revoke-api-token')
@UseGuards(AuthGuard)
async revokeApiToken(@Body() body: RevokeApiTokenDto) {
return this.authService.revokeApiToken(body.email, body.tokenId);
}
}