diff --git a/src/controllers/RunnerSelfServiceController.ts b/src/controllers/RunnerSelfServiceController.ts index 8e72c3e..b441cb0 100644 --- a/src/controllers/RunnerSelfServiceController.ts +++ b/src/controllers/RunnerSelfServiceController.ts @@ -4,7 +4,8 @@ import { OpenAPI, ResponseSchema } from 'routing-controllers-openapi'; import { getConnectionManager, Repository } from 'typeorm'; import { config } from '../config'; import { InvalidCredentialsError, JwtNotProvidedError } from '../errors/AuthError'; -import { RunnerEmailNeededError, RunnerNotFoundError } from '../errors/RunnerErrors'; +import { MailSendingError } from '../errors/MailErrors'; +import { RunnerEmailNeededError, RunnerNotFoundError, RunnerSelfserviceTimeoutError } from '../errors/RunnerErrors'; import { RunnerOrganizationNotFoundError } from '../errors/RunnerOrganizationErrors'; import { JwtCreator } from '../jwtcreator'; import { CreateSelfServiceCitizenRunner } from '../models/actions/create/CreateSelfServiceCitizenRunner'; @@ -62,13 +63,13 @@ export class RunnerSelfServiceController { const runner = await this.runnerRepository.findOne({ email: mail }); if (!runner) { throw new RunnerNotFoundError(); } - if (runner.resetRequestedTimestamp > (Math.floor(Date.now() / 1000) - 60 * 60 * 24)) { throw new Error("timeout!") } + if (runner.resetRequestedTimestamp > (Math.floor(Date.now() / 1000) - 60 * 60 * 24)) { throw new RunnerSelfserviceTimeoutError(); } const token = JwtCreator.createSelfService(runner); try { //await Mailer.sendForgottenMail(); } catch (error) { - throw new Error("Mail fucked up"); + throw new MailSendingError(); } runner.resetRequestedTimestamp = Math.floor(Date.now() / 1000); diff --git a/src/errors/RunnerErrors.ts b/src/errors/RunnerErrors.ts index 7be9048..f5eea84 100644 --- a/src/errors/RunnerErrors.ts +++ b/src/errors/RunnerErrors.ts @@ -46,6 +46,17 @@ export class RunnerEmailNeededError extends NotAcceptableError { message = "Citizenrunners have to provide an email address for verification and contacting." } +/** + * Error to throw when a runner already requested a new selfservice link in the last 24hrs. + */ +export class RunnerSelfserviceTimeoutError extends NotAcceptableError { + @IsString() + name = "RunnerSelfserviceTimeoutError" + + @IsString() + message = "You can only reqest a new token every 24hrs." +} + /** * Error to throw when a runner still has distance donations associated. */