July 4 - Implement TOTP 2FA
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
{% 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 %}
|
||||
Reference in New Issue
Block a user