| | |
| | | <?php |
| | | namespace JVBase\rest\routes; |
| | | |
| | | use JVBase\managers\Cache; |
| | | use JVBase\registrar\Registrar; |
| | | use JVBase\rest\Rest; |
| | | use JVBase\rest\Route; |
| | |
| | | */ |
| | | public function handleLogin(WP_REST_Request $request): WP_REST_Response |
| | | { |
| | | error_log('Handling login...'); |
| | | $email = sanitize_email($request->get_param('user_email')); |
| | | $password = $request->get_param('user_password'); |
| | | $remember = (bool) $request->get_param('remember_me'); |
| | | $redirect_to = $request->get_param('redirect_to'); |
| | | |
| | | // Verify Turnstile |
| | | |
| | | if (!$this->verifyTurnstile($request->get_param('cf-turnstile-response') ?? '')) { |
| | | error_log('[handleLogin]Turnstile failed'); |
| | | return $this->error( |
| | | 'Security verification failed. Please try again.', |
| | | 'turnstile_failed', |
| | | 403 |
| | | ); |
| | | } else { |
| | | error_log('[handleLogin]Turnstile succeeded'); |
| | | } |
| | | |
| | | // Attempt authentication |
| | |
| | | } |
| | | |
| | | // Check if role is valid and can register |
| | | $role_config = JVB_USER[$user_select] ?? null; |
| | | $registrar = Registrar::getInstance($user_select); |
| | | |
| | | if (!$role_config) { |
| | | if (!$registrar) { |
| | | return new WP_Error('invalid_role', 'Invalid role selected.'); |
| | | } |
| | | |
| | | if (!($role_config['can_register'] ?? false)) { |
| | | if (!($registrar->hasFeature('can_register') ?? false)) { |
| | | return new WP_Error('role_not_allowed', 'This role cannot be selected during registration.'); |
| | | } |
| | | |
| | | return BASE . $user_select; |
| | | return $registrar->getBased(); |
| | | } |
| | | |
| | | /** |
| | |
| | | } |
| | | } |
| | | |
| | | public static function auth():array |
| | | { |
| | | return (new self)->buildAuth(); |
| | | } |
| | | |
| | | protected function buildAuth(?int $user = null): array |
| | | { |
| | | if (is_user_logged_in()) { |
| | | $user = ($user) ?: get_current_user_id(); |
| | | $userId = $user ?? (is_user_logged_in() ? get_current_user_id() : 0); |
| | | |
| | | if ($userId) { |
| | | return [ |
| | | 'authenticated' => true, |
| | | 'user' => $user, |
| | | 'nonces' => $this->getUserNonces($user) |
| | | 'user' => $userId, |
| | | 'nonces' => $this->getUserNonces($userId), |
| | | ]; |
| | | } |
| | | |
| | | return [ |
| | | 'authenticated' => false, |
| | | 'user' => false, |
| | | 'nonces' => [ |
| | | 'wp_rest' => wp_create_nonce('wp_rest') |
| | | ] |
| | | 'user' => false, |
| | | 'nonces' => ['wp_rest' => wp_create_nonce('wp_rest')], |
| | | ]; |
| | | } |
| | | protected function getUserNonces(int $userID):array { |
| | |
| | | if (Site::has('favourites')) { |
| | | $nonces['favourites'] = wp_create_nonce('favourites-'.$userID); |
| | | } |
| | | if (!empty(Registrar::getFeatured('karma'))) { |
| | | if (!empty(Registrar::withFeature('karma'))) { |
| | | $nonces['votes'] = wp_create_nonce('votes-'.$userID); |
| | | } |
| | | if (Site::has('notifications')) { |