132 lines
3.5 KiB
TypeScript
132 lines
3.5 KiB
TypeScript
import {
|
|
Body,
|
|
Controller,
|
|
Get,
|
|
HttpCode,
|
|
HttpStatus,
|
|
Request,
|
|
Post,
|
|
UseGuards,
|
|
Patch,
|
|
UseInterceptors,
|
|
ClassSerializerInterceptor,
|
|
SerializeOptions,
|
|
} from '@nestjs/common';
|
|
import { AuthService } from './auth.service';
|
|
import { AuthEmailLoginDto } from './dto/auth-email-login.dto';
|
|
import { AuthForgotPasswordDto } from './dto/auth-forgot-password.dto';
|
|
import { AuthConfirmEmailDto } from './dto/auth-confirm-email.dto';
|
|
import { AuthResetPasswordDto } from './dto/auth-reset-password.dto';
|
|
import { AuthUpdateDto } from './dto/auth-update.dto';
|
|
import { AuthGuard } from '@nestjs/passport';
|
|
import {
|
|
ApiTags,
|
|
ApiBearerAuth,
|
|
ApiOperation,
|
|
ApiOkResponse,
|
|
} from '@nestjs/swagger';
|
|
import { CreateInviteDTO } from './dto/create-invite.dto';
|
|
import { AuthRegisterLoginDto } from './dto/auth-register-login.dto';
|
|
|
|
@ApiTags('Auth')
|
|
@Controller({
|
|
path: 'auth',
|
|
version: '1',
|
|
})
|
|
@UseInterceptors(ClassSerializerInterceptor)
|
|
export class AuthController {
|
|
constructor(public service: AuthService) {}
|
|
|
|
@Post('email/login')
|
|
@HttpCode(HttpStatus.OK)
|
|
public async login(@Body() loginDto: AuthEmailLoginDto) {
|
|
return this.service.validateLogin(loginDto);
|
|
}
|
|
|
|
@Post('admin/email/login')
|
|
@HttpCode(HttpStatus.OK)
|
|
public async adminLogin(@Body() loginDTO: AuthEmailLoginDto) {
|
|
return this.service.validateLogin(loginDTO);
|
|
}
|
|
|
|
@Post('email/register')
|
|
@HttpCode(HttpStatus.CREATED)
|
|
async register(@Body() createUserDto: AuthRegisterLoginDto) {
|
|
return this.service.register(createUserDto);
|
|
}
|
|
|
|
@Post('email/confirm')
|
|
@HttpCode(HttpStatus.OK)
|
|
async confirmEmail(@Body() confirmEmailDto: AuthConfirmEmailDto) {
|
|
return this.service.confirmEmail(confirmEmailDto.hash);
|
|
}
|
|
|
|
@Post('forgot/password')
|
|
@HttpCode(HttpStatus.OK)
|
|
async forgotPassword(@Body() forgotPasswordDto: AuthForgotPasswordDto) {
|
|
return this.service.forgotPassword(forgotPasswordDto.email);
|
|
}
|
|
|
|
@Post('reset/password')
|
|
@HttpCode(HttpStatus.OK)
|
|
async resetPassword(@Body() resetPasswordDto: AuthResetPasswordDto) {
|
|
return this.service.resetPassword(
|
|
resetPasswordDto.hash,
|
|
resetPasswordDto.password,
|
|
);
|
|
}
|
|
|
|
@ApiBearerAuth()
|
|
@SerializeOptions({
|
|
groups: ['exposeProvider'],
|
|
})
|
|
@Get('me')
|
|
@UseGuards(AuthGuard('jwt'))
|
|
@HttpCode(HttpStatus.OK)
|
|
public me(@Request() request: Request) {
|
|
return this.service.me(request.headers['authorization']);
|
|
}
|
|
|
|
@ApiBearerAuth()
|
|
@Patch('me')
|
|
@UseGuards(AuthGuard('jwt'))
|
|
@HttpCode(HttpStatus.OK)
|
|
public async update(@Request() request, @Body() userDto: AuthUpdateDto) {
|
|
return this.service.update(request.user, userDto);
|
|
}
|
|
|
|
@ApiOperation({
|
|
summary: 'Erstellt Registrierungstoken',
|
|
description:
|
|
'Encoded den JWT Token für eine Einladung für eine neue Registrierung. Team- und Rollen-Infos müssen da sein. Der Token ist dann 30 Tage gültig.',
|
|
})
|
|
@ApiOkResponse({
|
|
description: 'JWT Token',
|
|
isArray: false,
|
|
type: 'string',
|
|
})
|
|
@Post('invite')
|
|
@UseGuards(AuthGuard('jwt'))
|
|
public getInvite(
|
|
@Body()
|
|
invite: any,
|
|
) {
|
|
return this.service.createTeamInvite(invite);
|
|
}
|
|
|
|
@ApiOperation({
|
|
summary: 'Verifiziert Registrierungstoken',
|
|
description:
|
|
'Decoded und prüft den JWT Token einer Einladung für die Registrierung',
|
|
})
|
|
@ApiOkResponse({
|
|
description: 'Object mit teamName, teamId, roleName, roleId',
|
|
isArray: false,
|
|
type: CreateInviteDTO,
|
|
})
|
|
@Post('verify-invite')
|
|
public verifyInvite(@Body() body: any) {
|
|
return this.service.getTeamFromInvite(body.token);
|
|
}
|
|
}
|