add functions to login the radar scope

This commit is contained in:
Sven Czarnian
2022-11-04 21:47:34 +01:00
parent 912a8e7509
commit 822b39f4fd
3 changed files with 61 additions and 1 deletions

View File

@@ -1,18 +1,21 @@
import {
Body,
Controller,
Get,
HttpException,
HttpStatus,
Patch,
Post,
Query,
Redirect,
Req,
UseGuards,
} from '@nestjs/common';
import { ApiQuery } from '@nestjs/swagger';
import { ApiBody, ApiQuery, ApiResponse } from '@nestjs/swagger';
import { ConfigService } from '@nestjs/config';
import { AuthService } from './auth.service';
import { JwtGuard } from './guards/jwt.guard';
import { RadarScopeDto } from './dto/radarscope.dto';
import { UserDto } from './dto/user.dto';
import { Request } from 'express';
@@ -57,6 +60,36 @@ export class AuthController {
}
}
@Post('/radarScope')
@ApiBody({
description: 'The airport definition',
type: RadarScopeDto,
})
@ApiResponse({
status: 200,
description: 'The created Bearer token to use endpoints',
type: String,
})
@ApiResponse({
status: 404,
description: 'The VATSIM ID and key combination is invalid',
})
async radarScope(
@Body('scopeData') scopeData: RadarScopeDto,
): Promise<string> {
return this.authService
.loginRadarScope(scopeData.vatsimId, scopeData.key)
.then((token) => {
if (token === undefined) {
throw new HttpException(
'Unknown VATSIM ID or invalid key',
HttpStatus.NOT_FOUND,
);
}
return token;
});
}
@UseGuards(JwtGuard)
@Get('/user')
async user(@Req() request: Request): Promise<UserDto> {

View File

@@ -113,6 +113,15 @@ export class AuthService {
});
}
async loginRadarScope(vatsimId: string, key: string): Promise<string> {
return this.userModel.findOne({ vatsimId }).then((user) => {
if (!user || user.radarScopeKey !== key) return undefined;
const payload = { vatsimId: vatsimId, sub: key };
return this.jwtService.sign(payload);
});
}
async resetRadarScopeKey(token: string): Promise<void> {
const payload = this.jwtService.verify(token, {
secret: this.config.get<string>('server.jwt-secret'),

View File

@@ -0,0 +1,18 @@
import { IsNotEmpty } from 'class-validator';
import { ApiProperty } from '@nestjs/swagger';
export class RadarScopeDto {
@IsNotEmpty()
@ApiProperty({
description: 'The VATSIM ID of the controller',
example: '10000001',
})
vatsimId: string;
@IsNotEmpty()
@ApiProperty({
description: 'The unique key to logon the RADAR scope',
example: 'SECRET',
})
key: string;
}