Files
breadcrumb-the-shire/pages/auth/verify-email().php

69 lines
2.9 KiB
PHP
Raw Normal View History

2026-02-04 23:31:53 +01:00
<?php
use MintyPHP\Buffer;
use MintyPHP\Http\SessionStoreInterface;
2026-02-04 23:31:53 +01:00
use MintyPHP\Router;
2026-02-23 12:58:19 +01:00
use MintyPHP\Service\Auth\AuthServicesFactory;
use MintyPHP\Session;
use MintyPHP\Support\Flash;
2026-02-04 23:31:53 +01:00
$sessionStore = app(SessionStoreInterface::class);
$session = $sessionStore->all();
2026-03-04 15:56:58 +01:00
$request = requestInput();
$errorBag = formErrors();
2026-02-04 23:31:53 +01:00
$errors = [];
$email = trim((string) $request->body('email', $session['email_verification_email'] ?? ''));
2026-03-04 15:56:58 +01:00
$code = trim((string) $request->body('code', ''));
$emailVerificationService = (app(AuthServicesFactory::class))->createEmailVerificationService();
2026-02-04 23:31:53 +01:00
2026-03-04 15:56:58 +01:00
if ($request->isMethod('POST')) {
$action = (string) $request->body('action', 'verify');
2026-02-04 23:31:53 +01:00
if (!Session::checkCsrfToken()) {
2026-03-04 15:56:58 +01:00
$errorBag->addGlobal(t('Form expired, please try again'));
2026-02-04 23:31:53 +01:00
} elseif ($action === 'resend') {
// Resend verification code
if ($email === '' || !filter_var($email, FILTER_VALIDATE_EMAIL)) {
2026-03-04 15:56:58 +01:00
$errorBag->addGlobal(t('Please enter a valid email address'));
2026-02-04 23:31:53 +01:00
} else {
2026-02-23 12:58:19 +01:00
$result = $emailVerificationService->resendVerification($email);
2026-02-04 23:31:53 +01:00
if ($result['ok'] ?? false) {
Flash::success(t('A new verification code has been sent.'), 'verify-email', 'code_resent');
Router::redirect('verify-email');
} elseif (($result['error'] ?? '') === 'already_verified') {
Flash::success(t('Email already verified. Please login.'), 'login', 'already_verified');
Router::redirect('login');
} else {
Flash::success(t('If the email exists, a new verification code has been sent.'), 'verify-email', 'code_resent');
Router::redirect('verify-email');
}
}
} elseif ($email === '' || !filter_var($email, FILTER_VALIDATE_EMAIL)) {
2026-03-04 15:56:58 +01:00
$errorBag->addGlobal(t('Please enter a valid email address'));
2026-02-04 23:31:53 +01:00
} elseif ($code === '' || !preg_match('/^\d{6}$/', $code)) {
2026-03-04 15:56:58 +01:00
$errorBag->addGlobal(t('Please enter the 6-digit code'));
2026-02-04 23:31:53 +01:00
} else {
2026-02-23 12:58:19 +01:00
$result = $emailVerificationService->verifyCode($email, $code);
2026-02-04 23:31:53 +01:00
if ($result['ok'] ?? false) {
$sessionStore->remove('email_verification_email');
2026-02-04 23:31:53 +01:00
Flash::success(t('Email verified successfully! Please login.'), 'login', 'email_verified');
Router::redirect('login');
} else {
$errorCode = $result['error'] ?? 'invalid';
if ($errorCode === 'already_verified') {
Flash::success(t('Email already verified. Please login.'), 'login', 'already_verified');
Router::redirect('login');
} elseif ($errorCode === 'too_many_attempts') {
2026-03-04 15:56:58 +01:00
$errorBag->addGlobal(t('Too many failed attempts. Please request a new code.'));
2026-02-04 23:31:53 +01:00
} else {
2026-03-04 15:56:58 +01:00
$errorBag->addGlobal(t('Invalid or expired code'));
2026-02-04 23:31:53 +01:00
}
}
}
}
2026-03-04 15:56:58 +01:00
$errors = $errorBag->toFlatList();
2026-02-04 23:31:53 +01:00
Buffer::set('title', t('Verify email'));