before_middleware = $before_middleware; $this->after_middleware = $after_middleware; $this->login_handler = $login_handler; $this->error_handler = $error_handler; } /** * @param WP_Error|WP_User $user * * @return bool|JSON_Response|Redirect_Response|View_Response */ public function authenticate( $user ) { $response = $this->before_middleware->handle( $user ); if ( $this->should_be_returned( $response ) ) { return $response; } $response = $this->create_response( $user ); return $this->after_middleware->handle( $user, $response ); } /** * @param null|JSON_Response|Redirect_Response|View_Response $response * * @return bool */ private function should_be_returned( $response ) { if ( $response instanceof JSON_Response ) { return true; } if ( $response instanceof Redirect_Response ) { return true; } return false; } /** * @param WP_Error|WP_User $user * * @return bool|JSON_Response|Redirect_Response|View_Response */ private function create_response( $user ) { try { $response = $this->login_handler->authenticate( $user ); } catch ( Exception $e ) { $response = $this->error_handler->capture_exception( $e )->to_json( $e ); } return $response; } }