Replace the entire Python/FastAPI backend with a Node.js/TypeScript stack: - Framework: Hono + @hono/node-server - Templates: Nunjucks (.njk) replacing Jinja2 (.html) - ORM: Drizzle ORM with mysql2 (same MariaDB schema, no migrations needed) - Sessions: hono-sessions with CookieStore - CSS: Pico CSS v2 replacing Bootstrap 5 (Bootstrap Icons CDN kept) - Dev: tsx watch; Prod: tsc + node dist/index.js Original Python app preserved in web-python/ as backup. Updated Dockerfile.web and docker-compose.yml for Node.js deployment. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
47 lines
2.1 KiB
HTML
47 lines
2.1 KiB
HTML
{% extends "base.html" %}
|
|
{% block title %}Изменить пароль — ЭВОСИНК{% endblock %}
|
|
|
|
{% block content %}
|
|
<div class="row justify-content-center">
|
|
<div class="col-sm-10 col-md-6 col-lg-5">
|
|
<div class="card shadow-sm mt-4">
|
|
<div class="card-header">
|
|
<h1 class="h5 mb-0"><i class="bi bi-key me-2"></i>Изменить пароль</h1>
|
|
</div>
|
|
<div class="card-body p-4">
|
|
{% if success %}
|
|
<div class="alert alert-success">{{ success }}</div>
|
|
{% endif %}
|
|
|
|
{% if errors %}
|
|
<div class="alert alert-danger">
|
|
{% for error in errors %}
|
|
<div>{{ error }}</div>
|
|
{% endfor %}
|
|
</div>
|
|
{% endif %}
|
|
|
|
<form method="post" action="/profile/change-password">
|
|
<div class="mb-3">
|
|
<label for="current_password" class="form-label">Текущий пароль</label>
|
|
<input type="password" id="current_password" name="current_password" class="form-control" required>
|
|
</div>
|
|
<div class="mb-3">
|
|
<label for="password" class="form-label">Новый пароль</label>
|
|
<input type="password" id="password" name="password" class="form-control" required>
|
|
</div>
|
|
<div class="mb-4">
|
|
<label for="password_confirm" class="form-label">Подтвердить пароль</label>
|
|
<input type="password" id="password_confirm" name="password_confirm" class="form-control" required>
|
|
</div>
|
|
<div class="d-flex gap-2">
|
|
<button type="submit" class="btn btn-primary">Изменить пароль</button>
|
|
<a href="/profile" class="btn btn-outline-secondary">Отмена</a>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endblock %}
|