request = $request; $this->user_storage = $user_storage; $this->login_token_manager = $login_token_manager; } /** * This method reproduces the URL generation logic of Jetpack_SSO::build_sso_button_url(). * @see Jetpack_SSO::build_sso_button_url() * * @inheritDoc */ public function handle( $user, $response = null ) { if ( ! $this->user_storage->is_wp_user_set() ) { return $this->run_next( $user, $response ); } $login_token = $this->login_token_manager->get(); if ( is_null( $login_token ) || $login_token->get_context() !== Login_Context::JETPACK || ! $login_token->is_fully_authenticated() ) { return $this->run_next( $user, $response ); } $args = [ 'action' => 'jetpack-sso', ]; $redirect_to = $this->request->post( 'redirect_to' ); if ( ! empty( $redirect_to ) ) { $args['redirect_to'] = urlencode( esc_url_raw( $redirect_to ) ); } return $this->safe_redirect( add_query_arg( $args, wp_login_url() ) ); } }