- Implement anonymous access control with ALLOW_ANONYMOUS_ACCESS env var - Add complete password reset workflow with token-based validation - Add username recovery functionality for better UX - Implement full-text search API with relevance scoring and highlighting - Add Docker compatibility improvements with permission handling and fallback storage - Add quick stats API for real-time dashboard updates - Improve security with proper token expiration and input validation - Add search result pagination and navigation - Enhance error handling and logging throughout the application 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
79 lines
2.2 KiB
HTML
79 lines
2.2 KiB
HTML
{% extends "base.html" %}
|
|
|
|
{% block title %}Find Username - BalanceBoard{% endblock %}
|
|
|
|
{% block content %}
|
|
<div class="auth-container">
|
|
<div class="auth-card">
|
|
<div class="auth-logo">
|
|
<img src="{{ url_for('serve_logo') }}" alt="BalanceBoard Logo">
|
|
<h1><span class="balance">balance</span>Board</h1>
|
|
<p style="color: var(--text-secondary); margin-top: 8px;">Find your username</p>
|
|
</div>
|
|
|
|
{% with messages = get_flashed_messages(with_categories=true) %}
|
|
{% if messages %}
|
|
<div class="flash-messages">
|
|
{% for category, message in messages %}
|
|
<div class="flash-message {{ category }}">{{ message }}</div>
|
|
{% endfor %}
|
|
</div>
|
|
{% endif %}
|
|
{% endwith %}
|
|
|
|
<form method="POST" class="auth-form">
|
|
<div class="form-group">
|
|
<label for="email">Email Address</label>
|
|
<input type="email" id="email" name="email" required
|
|
placeholder="Enter your registered email address"
|
|
value="{{ request.form.email or '' }}">
|
|
<small class="form-help">
|
|
We'll send your username to this email address.
|
|
</small>
|
|
</div>
|
|
|
|
<button type="submit" class="btn btn-primary btn-block">
|
|
Find My Username
|
|
</button>
|
|
</form>
|
|
|
|
<div class="auth-footer">
|
|
<p>Remember your username? <a href="{{ url_for('login') }}">Back to login</a></p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<style>
|
|
.form-help {
|
|
display: block;
|
|
margin-top: 4px;
|
|
font-size: 0.875rem;
|
|
color: var(--text-secondary);
|
|
}
|
|
|
|
.btn {
|
|
padding: 12px 24px;
|
|
border: none;
|
|
border-radius: 8px;
|
|
font-size: 1rem;
|
|
font-weight: 500;
|
|
cursor: pointer;
|
|
transition: all 0.2s ease;
|
|
}
|
|
|
|
.btn-primary {
|
|
background: var(--primary-color, #4db6ac);
|
|
color: white;
|
|
}
|
|
|
|
.btn-primary:hover {
|
|
background: var(--primary-dark, #26a69a);
|
|
transform: translateY(-1px);
|
|
}
|
|
|
|
.btn-block {
|
|
width: 100%;
|
|
margin-top: 16px;
|
|
}
|
|
</style>
|
|
{% endblock %} |