48 lines
1.7 KiB
HTML
48 lines
1.7 KiB
HTML
{% extends "base.html" %}
|
|
{% block title %}Recovery Codes{% endblock %}
|
|
{% block content %}
|
|
<div class="row justify-content-center mt-3">
|
|
<div class="col-md-8 col-lg-6">
|
|
<div class="alert alert-success">
|
|
<i class="bi bi-shield-check"></i>
|
|
<strong>Two-factor authentication is now enabled.</strong>
|
|
</div>
|
|
|
|
<div class="card shadow-sm">
|
|
<div class="card-body">
|
|
<h4 class="mb-2"><i class="bi bi-key"></i> Save your recovery codes</h4>
|
|
<p class="text-muted">
|
|
Each code works <strong>once</strong> if you lose access to your authenticator
|
|
app. Store them somewhere safe — <strong>they will not be shown again.</strong>
|
|
</p>
|
|
|
|
<div class="bg-light border rounded p-3 mb-3">
|
|
<div class="row row-cols-2 g-2 font-monospace text-center" id="codeList">
|
|
{% for code in codes %}
|
|
<div class="col"><span class="badge bg-white text-dark border fs-6 w-100 py-2">{{ code }}</span></div>
|
|
{% endfor %}
|
|
</div>
|
|
</div>
|
|
|
|
<div class="d-flex gap-2">
|
|
<button type="button" class="btn btn-outline-secondary" onclick="copyCodes()">
|
|
<i class="bi bi-clipboard"></i> Copy codes
|
|
</button>
|
|
<a href="{{ url_for('auth.profile') }}" class="btn btn-primary ms-auto">
|
|
<i class="bi bi-check-lg"></i> I've saved them — Done
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<script>
|
|
function copyCodes() {
|
|
var codes = Array.from(document.querySelectorAll('#codeList .badge'))
|
|
.map(function (b) { return b.textContent.trim(); }).join('\n');
|
|
navigator.clipboard.writeText(codes);
|
|
}
|
|
</script>
|
|
{% endblock %}
|