From 3a5994d13ae1ddfc3f932766b207d80e0e44bc4b Mon Sep 17 00:00:00 2001 From: fede Date: Thu, 15 Jan 2026 18:19:11 -0300 Subject: [PATCH] =?UTF-8?q?terminada=20funcionalidad=20de=20resetear=20con?= =?UTF-8?q?trase=C3=B1a=20en=20[perfil]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lib/components/DialogResetPassword.svelte | 115 ++++++++++++++++++ src/lib/hooks/cambiarContraseñaUsuario.ts | 28 +++++ src/routes/[perfil]/+page.svelte | 15 ++- 3 files changed, 154 insertions(+), 4 deletions(-) create mode 100644 src/lib/components/DialogResetPassword.svelte create mode 100644 src/lib/hooks/cambiarContraseñaUsuario.ts diff --git a/src/lib/components/DialogResetPassword.svelte b/src/lib/components/DialogResetPassword.svelte new file mode 100644 index 0000000..0740709 --- /dev/null +++ b/src/lib/components/DialogResetPassword.svelte @@ -0,0 +1,115 @@ + + + + + {@render children?.()} + + +
+ + +

Resetear Contraseña

+
+
+ {#if mensajeError} +
+ {mensajeError} +
+ {/if} + + + Contraseña Actual + + + + Nueva Contraseña + +

+ La contraseña debe contener al menos una mayúscula, una minúscula, un número y un + carácter especial. Además de 8 caracteres de longitud. +

+
+ + Confirmar Contraseña + + +
+ +
+
+
diff --git a/src/lib/hooks/cambiarContraseñaUsuario.ts b/src/lib/hooks/cambiarContraseñaUsuario.ts new file mode 100644 index 0000000..2d4b2ab --- /dev/null +++ b/src/lib/hooks/cambiarContraseñaUsuario.ts @@ -0,0 +1,28 @@ +import { apiBase } from '@/stores/url'; +import { get } from 'svelte/store'; +import type { UserResponseDto } from '../../types'; +import { sesionStore } from '@/stores/usuario'; + +export async function cambiarContraseñaUsuario( + oldPassword: string, + newPassword: string, + id: number +) { + try { + const req = await fetch(`${get(apiBase)}/api/users/${id}/password`, { + method: 'PUT', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${get(sesionStore)?.accessToken}` + }, + body: JSON.stringify({ currentPassword: oldPassword, newPassword }) + }); + if (req.ok) { + return ''; + } + const data = await req.json(); + return data.message; + } catch { + return 'No se pudo alcanzar el servidor'; + } +} diff --git a/src/routes/[perfil]/+page.svelte b/src/routes/[perfil]/+page.svelte index fe6f38f..24861f1 100644 --- a/src/routes/[perfil]/+page.svelte +++ b/src/routes/[perfil]/+page.svelte @@ -20,6 +20,8 @@ import DialogModificarUsuario from '@/components/DialogModificarUsuario.svelte'; import BotonSeguir from '@/components/BotonSeguir.svelte'; import UserPen from '@lucide/svelte/icons/user-pen'; + import DialogResetPassword from '@/components/DialogResetPassword.svelte'; + import Key from '@lucide/svelte/icons/key'; let { params } = $props(); @@ -132,13 +134,18 @@ {#if $sesionStore?.isAdmin || $sesionStore?.username == params.perfil} - -
+
+ -
- + + + + +
{/if}