| | |
| | | <?php |
| | | namespace JVBase\managers; |
| | | |
| | | use JVBase\base\Site; |
| | | use JVBase\forms\TaxonomySelector; |
| | | use JVBase\meta\Form; |
| | | |
| | | use JVBase\utility\Features; |
| | | use WP_Error; |
| | | use WP_User; |
| | | |
| | |
| | | |
| | | class LoginManager |
| | | { |
| | | protected Features $siteFeatures; |
| | | protected ?Form $form = null; |
| | | protected Cache $cache; |
| | | |
| | |
| | | |
| | | public function __construct() |
| | | { |
| | | $this->siteFeatures = Features::forSite(); |
| | | |
| | | |
| | | $this->cache = Cache::for('login'); |
| | | |
| | | // Initialize magic link support if enabled |
| | | if ($this->siteFeatures->has('magicLink')) { |
| | | if (Site::has('magicLink')) { |
| | | $this->initMagicLinkSupport(); |
| | | } |
| | | |
| | |
| | | 'placeholder'=> 'look@me.com' |
| | | ] |
| | | ]; |
| | | if (Features::forSite()->has('referrals')) { |
| | | if (Site::has('referrals')) { |
| | | $fields['referral_code'] = [ |
| | | 'type' => 'text', |
| | | 'required'=> false, |
| | |
| | | |
| | | protected function initMagicLinkSupport(): void |
| | | { |
| | | if (!Features::forSite()->has('magicLink')) { |
| | | if (!Site::has('magicLink')) { |
| | | return; |
| | | } |
| | | } |
| | |
| | | |
| | | protected function maybeTurnstile(): void |
| | | { |
| | | if (!Features::hasIntegration('cloudflare')) { |
| | | if (!Site::hasIntegration('cloudflare')) { |
| | | return; |
| | | } |
| | | JVB()->connect('cloudflare')->renderTurnstile(); |
| | |
| | | |
| | | protected function maybeTurnstileScripts(): void |
| | | { |
| | | if (!Features::hasIntegration('cloudflare')) { |
| | | if (!Site::hasIntegration('cloudflare')) { |
| | | return; |
| | | } |
| | | JVB()->connect('cloudflare')->enqueueTurnstileScripts(); |
| | |
| | | |
| | | protected function verifyTurnstile(): bool |
| | | { |
| | | if (!Features::hasIntegration('cloudflare')) { |
| | | if (!Site::hasIntegration('cloudflare')) { |
| | | return true; // Not enabled, pass verification |
| | | } |
| | | |
| | |
| | | { |
| | | switch ($this->action) { |
| | | case 'register': |
| | | return [ |
| | | 'title' => JVB_LOGIN['register']['title'] ?? 'Create Your Account', |
| | | 'description' => JVB_LOGIN['register']['description'] ?? [], |
| | | 'extra' => JVB_LOGIN['register']['extra'] ?? [], |
| | | 'footer' => JVB_LOGIN['register']['footer'] ?? '', |
| | | 'email' => JVB_LOGIN['register']['email']['subject'] ?? '['.get_bloginfo('name').'] Finish Creating Your Account', |
| | | 'submit' => JVB_LOGIN['register']['submit'] ?? 'Create Account', |
| | | 'successTitle' => JVB_LOGIN['register']['success']['title'] ?? 'Success!', |
| | | 'successDescription' => JVB_LOGIN['register']['success']['description'] ?? ['See your email for next steps','(Check your spam folder if you cannot find it after a couple minutes.)'], |
| | | ]; |
| | | return Site::login()->getLabels('register'); |
| | | case 'lostpassword': |
| | | return [ |
| | | 'title' => JVB_LOGIN['forgot_password']['title'] ?? 'Reset Password', |
| | | 'description' => JVB_LOGIN['forgot_password']['description'] ?? [], |
| | | 'extra' => JVB_LOGIN['forgot_password']['extra'] ?? [], |
| | | 'footer' => JVB_LOGIN['forgot_password']['footer'] ?? '', |
| | | 'submit' => JVB_LOGIN['forgot_password']['submit'] ?? 'Send Reset Link', |
| | | 'successTitle' => JVB_LOGIN['forgot_password']['success']['title'] ?? 'Success!', |
| | | 'successDescription' => JVB_LOGIN['forgot_password']['success']['description'] ?? ['Check your email for reset instructions'], |
| | | ]; |
| | | return Site::login()->getLabels('lostPassword'); |
| | | case 'resetpass': |
| | | case 'rp': |
| | | return [ |
| | | 'title' => JVB_LOGIN['reset_pass']['title'] ?? 'Reset Your Password', |
| | | 'description' => JVB_LOGIN['reset_pass']['description'] ?? [], |
| | | 'extra' => JVB_LOGIN['reset_pass']['extra'] ?? [], |
| | | 'footer' => JVB_LOGIN['reset_pass']['footer'] ?? '', |
| | | 'submit' => JVB_LOGIN['reset_pass']['submit'] ?? 'Reset Password', |
| | | ]; |
| | | return Site::login()->getLabels('resetPassword'); |
| | | case 'logout': |
| | | return [ |
| | | 'title' => JVB_LOGIN['logout']['title'] ?? 'Logged Out!', |
| | | 'description' => JVB_LOGIN['logout']['description'] ?? [], |
| | | 'extra' => JVB_LOGIN['logout']['extra'] ?? [], |
| | | 'footer' => JVB_LOGIN['logout']['footer'] ?? '', |
| | | 'submit' => JVB_LOGIN['logout']['submit'] ?? '', |
| | | ]; |
| | | return Site::login()->getLabels('logout'); |
| | | case 'magic': |
| | | return [ |
| | | 'title' => JVB_LOGIN['magic']['title'] ?? 'Log in with Magic Link', |
| | | 'description' => JVB_LOGIN['magic']['description'] ?? ['Enter your email.','You\'ll get an email with a magic link.','Click it, and you\'re logged in!'], |
| | | 'extra' => JVB_LOGIN['magic']['extra'] ?? [], |
| | | 'footer' => JVB_LOGIN['magic']['footer'] ?? '', |
| | | 'submit' => JVB_LOGIN['magic']['submit'] ?? jvbIcon('magic-wand').'Send Magic Link', |
| | | |
| | | ]; |
| | | return Site::login()->getLabels('magic'); |
| | | case 'login': |
| | | default: |
| | | return [ |
| | | 'title' => JVB_LOGIN['login']['title'] ?? 'Sign in', |
| | | 'description' => JVB_LOGIN['login']['description'] ?? [], |
| | | 'extra' => JVB_LOGIN['login']['extra'] ?? [], |
| | | 'footer' => JVB_LOGIN['login']['footer'] ?? '', |
| | | 'submit' => JVB_LOGIN['login']['submit'] ?? 'Sign In', |
| | | ]; |
| | | return Site::login()->getLabels('login'); |
| | | } |
| | | } |
| | | |
| | |
| | | $action = $this->getAction(); |
| | | |
| | | $redirect_to = isset($_GET['redirect_to']) ? esc_url_raw($_GET['redirect_to']) : ''; |
| | | $has_turnstile = Features::hasIntegration('cloudflare'); |
| | | $has_turnstile = Site::hasIntegration('cloudflare'); |
| | | |
| | | ob_start(); |
| | | |