57 lines
1.4 KiB
TypeScript
57 lines
1.4 KiB
TypeScript
import {
|
|
Body,
|
|
Controller,
|
|
HttpCode,
|
|
Post,
|
|
Req,
|
|
} from '@nestjs/common';
|
|
import { Throttle } from '@nestjs/throttler';
|
|
import type {
|
|
AuthPrincipal,
|
|
RequestWithContext,
|
|
} from '../common/http/request-context';
|
|
import { CurrentAuth } from './decorators/current-auth.decorator';
|
|
import { Public } from './decorators/public.decorator';
|
|
import { SkipCsrf } from './decorators/skip-csrf.decorator';
|
|
import { LoginDto } from './dto/login.dto';
|
|
import { MobileRefreshDto } from './dto/mobile-refresh.dto';
|
|
import { MobileAuthService } from './mobile-auth.service';
|
|
|
|
@Controller('auth/mobile')
|
|
export class MobileAuthController {
|
|
constructor(private readonly mobileAuth: MobileAuthService) {}
|
|
|
|
@Post('login')
|
|
@HttpCode(200)
|
|
@Public()
|
|
@SkipCsrf()
|
|
@Throttle({ default: { limit: 5, ttl: 60_000, blockDuration: 60_000 } })
|
|
login(
|
|
@Body() dto: LoginDto,
|
|
@Req() request: RequestWithContext,
|
|
) {
|
|
return this.mobileAuth.login(dto, request);
|
|
}
|
|
|
|
@Post('refresh')
|
|
@HttpCode(200)
|
|
@Public()
|
|
@SkipCsrf()
|
|
@Throttle({ default: { limit: 20, ttl: 60_000 } })
|
|
refresh(
|
|
@Body() dto: MobileRefreshDto,
|
|
@Req() request: RequestWithContext,
|
|
) {
|
|
return this.mobileAuth.refresh(dto.refreshToken, request);
|
|
}
|
|
|
|
@Post('logout')
|
|
@HttpCode(200)
|
|
logout(
|
|
@CurrentAuth() principal: AuthPrincipal,
|
|
@Req() request: RequestWithContext,
|
|
) {
|
|
return this.mobileAuth.logout(principal, request);
|
|
}
|
|
}
|