105 lines
5.6 KiB
HTML
105 lines
5.6 KiB
HTML
{% extends "base.html" %}
|
|
|
|
{% block title %}Cambiar Contraseña — Edu-Space{% endblock %}
|
|
|
|
{% block content %}
|
|
<div class="container pt-5 mt-4">
|
|
<div class="row justify-content-center">
|
|
<div class="col-lg-6 col-md-8">
|
|
<!-- Header -->
|
|
<div class="d-flex align-items-center justify-content-between mb-4">
|
|
<div>
|
|
<h1 class="h3 mb-1 fw-bold">
|
|
<i class="bi bi-shield-lock text-primary me-2"></i>Cambiar Contraseña
|
|
</h1>
|
|
<p class="text-muted small mb-0">Actualización segura de credencial de acceso institucional</p>
|
|
</div>
|
|
<a href="/auth/profile" class="btn btn-outline-secondary btn-sm">
|
|
<i class="bi bi-arrow-left me-1"></i>Volver al Perfil
|
|
</a>
|
|
</div>
|
|
|
|
<!-- Feedback Alerts -->
|
|
{% if success %}
|
|
<div class="alert alert-success alert-dismissible fade show shadow-sm mb-4" role="alert">
|
|
<i class="bi bi-check-circle-fill me-2"></i>{{ success }}
|
|
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
|
</div>
|
|
{% endif %}
|
|
|
|
{% if error %}
|
|
<div class="alert alert-danger alert-dismissible fade show shadow-sm mb-4" role="alert">
|
|
<i class="bi bi-exclamation-triangle-fill me-2"></i>{{ error }}
|
|
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
|
</div>
|
|
{% endif %}
|
|
|
|
<!-- Form Card -->
|
|
<div class="card border-0 shadow-sm" style="border-radius: 12px;">
|
|
<div class="card-body p-4">
|
|
<form method="POST" action="/auth/change_password">
|
|
<div class="mb-3">
|
|
<label for="current_password" class="form-label small fw-semibold">Contraseña Actual <span class="text-danger">*</span></label>
|
|
<div class="input-group">
|
|
<span class="input-group-text bg-body-tertiary"><i class="bi bi-lock"></i></span>
|
|
<input type="password" class="form-control" id="current_password" name="current_password" required placeholder="Ingresa tu contraseña actual">
|
|
<button class="btn btn-outline-secondary" type="button" onclick="togglePass('current_password', 'currentPassIcon')" title="Ver/Ocultar">
|
|
<i class="bi bi-eye" id="currentPassIcon"></i>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="mb-3">
|
|
<label for="new_password" class="form-label small fw-semibold">Nueva Contraseña <span class="text-danger">*</span></label>
|
|
<div class="input-group">
|
|
<span class="input-group-text bg-body-tertiary"><i class="bi bi-key"></i></span>
|
|
<input type="password" class="form-control" id="new_password" name="new_password" required minlength="6" placeholder="Mínimo 6 caracteres">
|
|
<button class="btn btn-outline-secondary" type="button" onclick="togglePass('new_password', 'newPassIcon')" title="Ver/Ocultar">
|
|
<i class="bi bi-eye" id="newPassIcon"></i>
|
|
</button>
|
|
</div>
|
|
<div class="form-text small">La nueva clave debe tener al menos 6 caracteres.</div>
|
|
</div>
|
|
|
|
<div class="mb-4">
|
|
<label for="confirm_password" class="form-label small fw-semibold">Confirmar Nueva Contraseña <span class="text-danger">*</span></label>
|
|
<div class="input-group">
|
|
<span class="input-group-text bg-body-tertiary"><i class="bi bi-check2-circle"></i></span>
|
|
<input type="password" class="form-control" id="confirm_password" name="confirm_password" required minlength="6" placeholder="Repite la nueva contraseña">
|
|
<button class="btn btn-outline-secondary" type="button" onclick="togglePass('confirm_password', 'confirmPassIcon')" title="Ver/Ocultar">
|
|
<i class="bi bi-eye" id="confirmPassIcon"></i>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="d-grid gap-2">
|
|
<button type="submit" class="btn btn-primary py-2 fw-semibold shadow-sm">
|
|
<i class="bi bi-shield-check me-1"></i>Actualizar Contraseña
|
|
</button>
|
|
<a href="/auth/profile" class="btn btn-link text-muted text-decoration-none">
|
|
Cancelar y volver
|
|
</a>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endblock %}
|
|
|
|
{% block extra_js %}
|
|
<script>
|
|
function togglePass(inputId, iconId) {
|
|
var input = document.getElementById(inputId);
|
|
var icon = document.getElementById(iconId);
|
|
if (input && icon) {
|
|
var isPass = input.getAttribute('type') === 'password';
|
|
input.setAttribute('type', isPass ? 'text' : 'password');
|
|
icon.className = isPass ? 'bi bi-eye-slash' : 'bi bi-eye';
|
|
}
|
|
}
|
|
</script>
|
|
{% endblock %}
|
|
|