36 lines
1.2 KiB
HTML
36 lines
1.2 KiB
HTML
|
|
{{define "mfa"}}
|
|||
|
|
{{template "base" .}}
|
|||
|
|
{{end}}
|
|||
|
|
|
|||
|
|
{{define "mfa_content"}}
|
|||
|
|
<div class="max-w-md mx-auto p-6">
|
|||
|
|
<h1 class="text-2xl font-bold text-white mb-2">Multi‑Factor Authentication</h1>
|
|||
|
|
<p class="text-gray-400 mb-6">Enter the 6‑digit code from your authenticator app.</p>
|
|||
|
|
|
|||
|
|
{{if .error}}
|
|||
|
|
<div class="mb-4 p-3 rounded bg-red-700 text-white">{{.error}}</div>
|
|||
|
|
{{end}}
|
|||
|
|
|
|||
|
|
<form id="mfa-form" class="space-y-4" method="POST" action="/editor/mfa">
|
|||
|
|
<input type="hidden" name="csrf_token" value="{{.csrf_token}}" />
|
|||
|
|
<div>
|
|||
|
|
<label for="code" class="block text-sm font-medium text-gray-300 mb-2">Authentication code</label>
|
|||
|
|
<input id="code" name="code" inputmode="numeric" pattern="[0-9]{6}" maxlength="6" class="form-input" placeholder="123456" required />
|
|||
|
|
</div>
|
|||
|
|
<div class="flex justify-end">
|
|||
|
|
<button type="submit" class="btn-primary"><i class="fas fa-right-to-bracket mr-2"></i>Verify</button>
|
|||
|
|
</div>
|
|||
|
|
</form>
|
|||
|
|
</div>
|
|||
|
|
{{end}}
|
|||
|
|
|
|||
|
|
{{define "mfa_scripts"}}
|
|||
|
|
<script>
|
|||
|
|
// Optional: autofocus the code field
|
|||
|
|
document.addEventListener('DOMContentLoaded', () => {
|
|||
|
|
const code = document.getElementById('code');
|
|||
|
|
if (code) code.focus();
|
|||
|
|
});
|
|||
|
|
</script>
|
|||
|
|
{{end}}
|