diff --git a/src/controllers/AuthController.ts b/src/controllers/AuthController.ts index 507ac38..3545422 100644 --- a/src/controllers/AuthController.ts +++ b/src/controllers/AuthController.ts @@ -2,17 +2,23 @@ import { Body, CookieParam, JsonController, Param, Post, Req, Res } from 'routin import { OpenAPI, ResponseSchema } from 'routing-controllers-openapi'; import { IllegalJWTError, InvalidCredentialsError, JwtNotProvidedError, PasswordNeededError, RefreshTokenCountInvalidError, UsernameOrEmailNeededError } from '../errors/AuthError'; import { UserNotFoundError } from '../errors/UserErrors'; +import { Mailer } from '../mailer'; import { CreateAuth } from '../models/actions/create/CreateAuth'; import { CreateResetToken } from '../models/actions/create/CreateResetToken'; import { HandleLogout } from '../models/actions/HandleLogout'; import { RefreshAuth } from '../models/actions/RefreshAuth'; import { ResetPassword } from '../models/actions/ResetPassword'; import { ResponseAuth } from '../models/responses/ResponseAuth'; +import { ResponseEmpty } from '../models/responses/ResponseEmpty'; import { Logout } from '../models/responses/ResponseLogout'; @JsonController('/auth') export class AuthController { + + private mailer: Mailer; + constructor() { + this.mailer = new Mailer(); } @Post("/login") @@ -82,13 +88,14 @@ export class AuthController { } @Post("/reset") - @ResponseSchema(ResponseAuth) - @ResponseSchema(UserNotFoundError) - @ResponseSchema(UsernameOrEmailNeededError) + @ResponseSchema(ResponseEmpty, { statusCode: 200 }) + @ResponseSchema(UserNotFoundError, { statusCode: 404 }) + @ResponseSchema(UsernameOrEmailNeededError, { statusCode: 406 }) @OpenAPI({ description: "Request a password reset token.
This will provide you with a reset token that you can use by posting to /api/auth/reset/{token}." }) async getResetToken(@Body({ validate: true }) passwordReset: CreateResetToken) { - //This really shouldn't just get returned, but sent via mail or sth like that. But for dev only this is fine. - return { "resetToken": await passwordReset.toResetToken() }; + const reset_token: String = await passwordReset.toResetToken(); + await this.mailer.sendResetMail(passwordReset.email, reset_token); + return new ResponseEmpty(); } @Post("/reset/:token") diff --git a/src/mailer.ts b/src/mailer.ts index f834697..a7d8e6e 100644 --- a/src/mailer.ts +++ b/src/mailer.ts @@ -3,7 +3,6 @@ import { MailOptions } from 'nodemailer/lib/json-transport'; import Mail from 'nodemailer/lib/mailer'; import { config } from './config'; import { MailServerConfigError } from './errors/MailErrors'; -import { User } from './models/entities/User'; /** * This class is responsible for all things mail sending. */ @@ -27,10 +26,10 @@ export class Mailer { }); } - public async sendResetMail(user: User, token: String) { + public async sendResetMail(to_address: string, token: String) { const reset_link = `${config.app_url}/reset/${token}` const mail: MailOptions = { - to: user.email, + to: to_address, subject: "LfK! Password Reset", html: `${reset_link}` };