From 68cd746a9f3360b3630a9ba570213d2aa62497b4 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Thu, 2 Feb 2023 11:08:36 +0100 Subject: [PATCH] Added selfservice runner create check to prevent duplicate email ref #197 --- .../RunnerSelfServiceController.ts | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/controllers/RunnerSelfServiceController.ts b/src/controllers/RunnerSelfServiceController.ts index 3d2750f..41655ca 100644 --- a/src/controllers/RunnerSelfServiceController.ts +++ b/src/controllers/RunnerSelfServiceController.ts @@ -1,6 +1,6 @@ import { Request } from "express"; import * as jwt from "jsonwebtoken"; -import { Body, Delete, Get, JsonController, OnUndefined, Param, Post, QueryParam, Req, UseBefore } from 'routing-controllers'; +import { BadRequestError, Body, Delete, Get, JsonController, OnUndefined, Param, Post, QueryParam, Req, UseBefore } from 'routing-controllers'; import { OpenAPI, ResponseSchema } from 'routing-controllers-openapi'; import { getConnectionManager, Repository } from 'typeorm'; import { config } from '../config'; @@ -148,8 +148,11 @@ export class RunnerSelfServiceController { @OpenAPI({ description: 'Create a new selfservice runner in the citizen org.
This endpoint shoud be used to allow "everyday citizen" to register themselves.
You have to provide a mail address, b/c the future we\'ll implement email verification.' }) async registerRunner(@Body({ validate: true }) createRunner: CreateSelfServiceCitizenRunner, @QueryParam("locale") locale: string = "en") { let runner = await createRunner.toEntity(); - + if (await this.getRunnerExistsByMail(runner.email)) { + throw new BadRequestError("E-Mail already registered") + } runner = await this.runnerRepository.save(runner); + let response = new ResponseSelfServiceRunner(await this.runnerRepository.findOne(runner, { relations: ['scans', 'group', 'group.parentGroup', 'scans.track', 'cards', 'distanceDonations', 'distanceDonations.donor', 'distanceDonations.runner', 'distanceDonations.runner.scans', 'distanceDonations.runner.scans.track'] })); response.token = JwtCreator.createSelfService(runner); @@ -170,6 +173,9 @@ export class RunnerSelfServiceController { const org = await this.getOrgansisation(token); let runner = await createRunner.toEntity(org); + if (await this.getRunnerExistsByMail(runner.email)) { + throw new BadRequestError("E-Mail already registered") + } runner = await this.runnerRepository.save(runner); let response = new ResponseSelfServiceRunner(await this.runnerRepository.findOne(runner, { relations: ['scans', 'group', 'group.parentGroup', 'scans.track', 'cards', 'distanceDonations', 'distanceDonations.donor', 'distanceDonations.runner', 'distanceDonations.runner.scans', 'distanceDonations.runner.scans.track'] })); @@ -225,4 +231,14 @@ export class RunnerSelfServiceController { return organization; } + + /** + * Checks if a runner already exists + * @param email The runner's email address + * @returns Boolean (true if exists, false if not) + */ + private async getRunnerExistsByMail(email: string): Promise { + const runner = await this.runnerRepository.findOne({ email }); + return runner != undefined + } } \ No newline at end of file