From 3bbef923165d56b768cfaed4e15d9c79776e4a99 Mon Sep 17 00:00:00 2001 From: Enes Kaya Date: Sat, 20 Jan 2024 17:01:00 +0100 Subject: [PATCH] add reset handler --- .../pages/api/auth/request-password-reset.ts | 15 ++++++++ apps/client/pages/login.tsx | 12 +++---- apps/server/src/app/routes/public.router.ts | 34 +++++++++++++++++++ apps/server/src/app/routes/users.router.ts | 33 ------------------ 4 files changed, 55 insertions(+), 39 deletions(-) create mode 100644 apps/client/pages/api/auth/request-password-reset.ts diff --git a/apps/client/pages/api/auth/request-password-reset.ts b/apps/client/pages/api/auth/request-password-reset.ts new file mode 100644 index 00000000..a5afcf60 --- /dev/null +++ b/apps/client/pages/api/auth/request-password-reset.ts @@ -0,0 +1,15 @@ +import type { NextApiResponse } from 'next' +import type { NextRequest } from 'next/server' +import env from '../../../env' + +export default async function handler(req: NextRequest, res: NextApiResponse) { + const r = await fetch(`${env.NEXT_PUBLIC_API_URL}/v1/request-new-password`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(req.body), + }) + + return res.status(200).json(await r.json()) +} diff --git a/apps/client/pages/login.tsx b/apps/client/pages/login.tsx index 94b7b277..9f7ea133 100644 --- a/apps/client/pages/login.tsx +++ b/apps/client/pages/login.tsx @@ -58,15 +58,15 @@ export default function LoginPage() { const sendResetPasswordEmail = async () => { setSendResetPasswordEmailLoading(true) - const response = await fetch('/api/auth/reset-password', { + const response = await fetch('/api/auth/request-password-reset', { method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - email: forgotPasswordEmail, - }), + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ email: forgotPasswordEmail }), }) - if (response.ok) { + if (response.status === 200) { setShowResetPasswordSuccess(true) setSendResetPasswordEmailLoading(false) setForgotPasswordEmail('') diff --git a/apps/server/src/app/routes/public.router.ts b/apps/server/src/app/routes/public.router.ts index e5cfdc97..5aca3a35 100644 --- a/apps/server/src/app/routes/public.router.ts +++ b/apps/server/src/app/routes/public.router.ts @@ -1,4 +1,5 @@ import { Router } from 'express' +import { z } from 'zod' import env from '../../env' import endpoint from '../lib/endpoint' @@ -18,4 +19,37 @@ router.get( }) ) +router.post( + '/request-new-password', + endpoint.create({ + input: z.object({ + email: z.string().email(), + }), + resolve: async ({ ctx, input }) => { + if (ctx.user) return + await ctx.authPasswordResetService.create(input.email) + }, + }) +) + +router.post( + '/reset-password/:token/:email', + endpoint.create({ + input: z.object({ + // TODO: bring en par with required password schema + // (1 lowercase, 1 uppercase, 1 special char) + newPassword: z.string().min(8).max(64), + confirmPassword: z.string().min(8).max(64), + }), + resolve: async ({ ctx, input, req }) => { + if (ctx.user) return + await ctx.authPasswordResetService.resetPassword({ + token: req.params.token, + newPassword: input.newPassword, + email: req.params.email, + }) + }, + }) +) + export default router diff --git a/apps/server/src/app/routes/users.router.ts b/apps/server/src/app/routes/users.router.ts index a8d2b565..2e6c1f88 100644 --- a/apps/server/src/app/routes/users.router.ts +++ b/apps/server/src/app/routes/users.router.ts @@ -388,39 +388,6 @@ router.delete( }) ) -router.post( - '/request-new-password', - endpoint.create({ - input: z.object({ - email: z.string().email(), - }), - resolve: async ({ ctx, input }) => { - if (ctx.user) return - await ctx.authPasswordResetService.create(input.email) - }, - }) -) - -router.post( - '/reset-password/:token/:email', - endpoint.create({ - input: z.object({ - // TODO: bring en par with required password schema - // (1 lowercase, 1 uppercase, 1 special char) - newPassword: z.string().min(8).max(64), - confirmPassword: z.string().min(8).max(64), - }), - resolve: async ({ ctx, input, req }) => { - if (ctx.user) return - await ctx.authPasswordResetService.resetPassword({ - token: req.params.token, - newPassword: input.newPassword, - email: req.params.email, - }) - }, - }) -) - router.delete( '/:id', endpoint.create({