1
0
mirror of git://f0xx.org/ac/ac-be-auth synced 2026-07-29 02:57:57 +03:00

feat(auth): register pending UI with countdown and resend

Signed-off-by: Anton Afanasyeu <a.afanasieff@gmail.com>
This commit is contained in:
Anton Afanasyeu
2026-07-12 13:53:37 +02:00
parent 86c33124c3
commit c97fad417a
3 changed files with 29 additions and 8 deletions

View File

@@ -1,6 +1,9 @@
<?php
$bp = Auth::basePath();
$auth = Auth::authUrl();
$registerPending = !empty($registerPending);
$registerExpiresAt = (string) ($registerExpiresAt ?? '');
$registerEmail = (string) ($registerEmail ?? '');
?>
<!DOCTYPE html>
<html lang="en" data-theme="dark">
@@ -20,9 +23,14 @@ $auth = Auth::authUrl();
<link rel="apple-touch-icon" href="<?= h($bp) ?>/assets/apple-touch-icon.ico">
<link rel="stylesheet" href="<?= h($bp) ?>/assets/css/app.css">
<script src="<?= h($bp) ?>/assets/js/i18n.js" defer></script>
<script src="<?= h($bp) ?>/assets/js/register.js" defer></script>
<?php AnalyticsHead::render('crashes_register'); ?>
</head>
<body class="login-page" data-base-path="<?= h($bp) ?>">
<body class="login-page" data-base-path="<?= h($bp) ?>"
data-auth-base="<?= h($auth) ?>"
<?= $registerPending ? ' data-register-pending="1"' : '' ?>
<?= $registerExpiresAt !== '' ? ' data-register-expires-ts="' . (int) strtotime($registerExpiresAt) . '"' : '' ?>
<?= $registerEmail !== '' ? ' data-register-email="' . h($registerEmail) . '"' : '' ?>>
<div class="login-locale">
<label class="toolbar-select locale-toolbar-select" data-i18n-title="lang.label" title="Language">
<span class="locale-flag" aria-hidden="true">🇬🇧</span>
@@ -32,17 +40,14 @@ $auth = Auth::authUrl();
</select>
</label>
</div>
<form class="login-card" method="post" action="<?= h($auth) ?>/register">
<form class="login-card" id="register-form" method="post" action="<?= h($auth) ?>/register"<?= $registerPending ? ' hidden' : '' ?>>
<h1 data-i18n="register.title">Create account</h1>
<p class="muted" data-i18n="register.hint">We will email a verification link before you can sign in.</p>
<?php if (!empty($registerError)): ?>
<div class="alert"><?= h($registerError) ?></div>
<?php endif; ?>
<?php if (!empty($registerSuccess)): ?>
<div class="alert alert--ok"><?= h($registerSuccess) ?></div>
<?php endif; ?>
<label><span data-i18n="register.email">Email</span>
<input name="email" type="email" autocomplete="email" required value="<?= h($registerEmail ?? '') ?>"></label>
<input name="email" type="email" autocomplete="email" required value="<?= h($registerEmail) ?>"></label>
<label><span data-i18n="register.username">Username</span>
<input name="username" autocomplete="username" value="<?= h($registerUsername ?? '') ?>"></label>
<label><span data-i18n="register.password">Password</span>
@@ -50,6 +55,22 @@ $auth = Auth::authUrl();
<button type="submit" data-i18n="register.submit">Register</button>
<p class="hint"><a href="<?= h($auth) ?>/login" data-i18n="register.back_login">Back to sign in</a></p>
</form>
<section class="login-card" id="register-pending"<?= $registerPending ? '' : ' hidden' ?>>
<h1 data-i18n="register.pending_title">Check your email</h1>
<p class="muted" data-i18n="register.pending_hint">We sent a verification link. Confirm your email before signing in.</p>
<?php if (!empty($registerSuccess)): ?>
<div class="alert alert--ok"><?= h($registerSuccess) ?></div>
<?php endif; ?>
<p id="register-pending-email" class="muted"><?= $registerEmail !== '' ? h($registerEmail) : '' ?></p>
<p class="register-countdown-wrap">
<span data-i18n="register.countdown_label">Link expires in</span>
<strong id="register-countdown" aria-live="polite">—</strong>
</p>
<p id="register-resend-status" class="muted" aria-live="polite"></p>
<button type="button" class="btn" id="register-resend-btn" data-i18n="register.resend">Resend verification email</button>
<p class="hint"><a href="<?= h($auth) ?>/login" data-i18n="register.back_login">Back to sign in</a></p>
</section>
<?php platform_render_footer(); ?>
</body>
</html>