From 80797698818f456c7746523d5a4f66267fdab10d Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Wed, 20 Jan 2021 19:20:08 +0100 Subject: [PATCH] Implemented a method for getting the runner object from a jwt ref #110 --- .../RunnerSelfServiceController.ts | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/src/controllers/RunnerSelfServiceController.ts b/src/controllers/RunnerSelfServiceController.ts index 290ccfc..fa4c10e 100644 --- a/src/controllers/RunnerSelfServiceController.ts +++ b/src/controllers/RunnerSelfServiceController.ts @@ -1,13 +1,15 @@ +import * as jwt from "jsonwebtoken"; import { Get, JsonController, OnUndefined, Param } from 'routing-controllers'; import { OpenAPI, ResponseSchema } from 'routing-controllers-openapi'; import { getConnectionManager, Repository } from 'typeorm'; +import { config } from '../config'; +import { InvalidCredentialsError } from '../errors/AuthError'; import { RunnerNotFoundError } from '../errors/RunnerErrors'; import { Runner } from '../models/entities/Runner'; import { ResponseUser } from '../models/responses/ResponseUser'; @JsonController('/runners') -@OpenAPI({ security: [{ "AuthToken": [] }, { "RefreshTokenCookie": [] }] }) export class RunnerSelfServiceController { private runnerRepository: Repository; @@ -23,12 +25,27 @@ export class RunnerSelfServiceController { @ResponseSchema(RunnerNotFoundError, { statusCode: 404 }) @OnUndefined(RunnerNotFoundError) @OpenAPI({ description: 'Lists all information about yourself.
Please provide your runner jwt for auth.' }) - async get(@Param('jwt') jwt: string) { - //TODO: + async get(@Param('jwt') token: string) { + //TODO } - public async getRunner(jwt: string): Promise { - return null; + /** + * Get's a runner by a provided jwt token. + * @param token The runner jwt provided by the runner to identitfy themselves. + */ + private async getRunner(token: string): Promise { + let jwtPayload = undefined + try { + jwtPayload = jwt.verify(token, config.jwt_secret); + } catch (error) { + throw new InvalidCredentialsError(); + } + + console.log(jwtPayload); + + const runner = await this.runnerRepository.findOne({ id: jwtPayload["id"] }); + if (!runner) { throw new RunnerNotFoundError() } + return runner; } } \ No newline at end of file