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 + + + + + {#if cargando} + + {:else} + Resetear Contraseña + {/if} + + + + 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}
+ 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. +