introduce the RADAR scope token
This commit is contained in:
		| @@ -3,6 +3,7 @@ import { | ||||
|   Get, | ||||
|   HttpException, | ||||
|   HttpStatus, | ||||
|   Patch, | ||||
|   Query, | ||||
|   Redirect, | ||||
|   Req, | ||||
| @@ -68,9 +69,17 @@ export class AuthController { | ||||
|       return { | ||||
|         vatsimId: user.vatsimId, | ||||
|         fullName: user.fullName, | ||||
|         radarScopeKey: user.radarScopeKey, | ||||
|         administrator: user.administrator, | ||||
|         airportConfigurationAccess: user.airportConfigurationAccess, | ||||
|       }; | ||||
|     }); | ||||
|   } | ||||
|  | ||||
|   @UseGuards(JwtGuard) | ||||
|   @Patch('/refreshRadarScopeKey') | ||||
|   async refreshRadarScopeKey(@Req() request: Request): Promise<void> { | ||||
|     const token = request.headers.authorization.replace('Bearer ', ''); | ||||
|     return this.authService.resetRadarScopeKey(token); | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -4,6 +4,7 @@ import { ConfigService } from '@nestjs/config'; | ||||
| import { JwtService } from '@nestjs/jwt'; | ||||
| import { InjectModel } from '@nestjs/mongoose'; | ||||
| import { Model } from 'mongoose'; | ||||
| import { v4 as uuid } from 'uuid'; | ||||
| import { catchError, lastValueFrom, map } from 'rxjs'; | ||||
|  | ||||
| import { User, UserDocument } from './models/user.model'; | ||||
| @@ -76,6 +77,7 @@ export class AuthService { | ||||
|           this.userModel.create({ | ||||
|             vatsimId: userdata.cid, | ||||
|             fullName, | ||||
|             radarScopeKey: uuid(), | ||||
|             vatsimToken: token, | ||||
|             vatsimRefreshToken: refreshToken, | ||||
|           }); | ||||
| @@ -110,4 +112,15 @@ export class AuthService { | ||||
|         return user; | ||||
|       }); | ||||
|   } | ||||
|  | ||||
|   async resetRadarScopeKey(token: string): Promise<void> { | ||||
|     const payload = this.jwtService.verify(token, { | ||||
|       secret: this.config.get<string>('server.jwt-secret'), | ||||
|     }); | ||||
|  | ||||
|     await this.userModel.findOneAndUpdate( | ||||
|       { vatsimId: payload.vatsimId }, | ||||
|       { radarScopeKey: uuid() }, | ||||
|     ); | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -16,6 +16,13 @@ export class UserDto { | ||||
|   }) | ||||
|   fullName: string; | ||||
|  | ||||
|   @IsNotEmpty() | ||||
|   @ApiProperty({ | ||||
|     description: 'The unique logon code for the radar scope plugins', | ||||
|     example: 'SECRET', | ||||
|   }) | ||||
|   radarScopeKey: string; | ||||
|  | ||||
|   @IsNotEmpty() | ||||
|   @ApiProperty({ | ||||
|     description: 'Indicates if the user has administrator access', | ||||
|   | ||||
| @@ -17,6 +17,11 @@ export class User { | ||||
|   }) | ||||
|   fullName: string; | ||||
|  | ||||
|   @Prop({ | ||||
|     type: String, | ||||
|   }) | ||||
|   radarScopeKey: string; | ||||
|  | ||||
|   @Prop({ | ||||
|     required: true, | ||||
|     type: String, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user