File: /var/www/agighana.org_backup/REST_Authentication_Controller.php
<?php
/**
* Class Google\Site_Kit\Core\Authentication\REST_Authentication_Controller
*
* @package Google\Site_Kit
* @copyright 2024 Google LLC
* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
* @link https://sitekit.withgoogle.com
*/
namespace Google\Site_Kit\Core\Authentication;
use Google\Site_Kit\Core\Permissions\Permissions;
use Google\Site_Kit\Core\REST_API\REST_Route;
use Google\Site_Kit\Core\REST_API\REST_Routes;
use WP_REST_Server;
use WP_REST_Request;
use WP_REST_Response;
/**
* REST Authentication Controller Class.
*
* @since 1.131.0
* @access private
* @ignore
*/
final class REST_Authentication_Controller {
/**
* Authentication instance.
*
* @since 1.131.0
* @var Authentication
*/
protected $authentication;
/**
* Constructor.
*
* @since 1.131.0
*
* @param Authentication $authentication Authentication instance.
*/
public function __construct( Authentication $authentication ) {
$this->authentication = $authentication;
}
/**
* Registers functionality through WordPress hooks.
*
* @since 1.131.0
*/
public function register() {
add_filter(
'googlesitekit_rest_routes',
function ( $routes ) {
return array_merge( $routes, $this->get_rest_routes() );
}
);
add_filter(
'googlesitekit_apifetch_preload_paths',
function ( $routes ) {
$authentication_routes = array(
'/' . REST_Routes::REST_ROOT . '/core/site/data/connection',
'/' . REST_Routes::REST_ROOT . '/core/user/data/authentication',
);
return array_merge( $routes, $authentication_routes );
}
);
}
/**
* Gets related REST routes.
*
* @since 1.3.0
* @since 1.131.0 Moved to REST_Authentication_Controller class.
*
* @return array List of REST_Route objects.
*/
private function get_rest_routes() {
$can_setup = function () {
return current_user_can( Permissions::SETUP );
};
$can_access_authentication = function () {
return current_user_can( Permissions::VIEW_SPLASH ) || current_user_can( Permissions::VIEW_DASHBOARD );
};
$can_disconnect = function () {
return current_user_can( Permissions::AUTHENTICATE );
};
$can_view_authenticated_dashboard = function () {
return current_user_can( Permissions::VIEW_AUTHENTICATED_DASHBOARD );
};
return array(
new REST_Route(
'core/site/data/connection',
array(
array(
'methods' => WP_REST_Server::READABLE,
'callback' => function () {
$data = array(
'connected' => $this->authentication->credentials()->has(),
'resettable' => $this->authentication->get_options_instance()->has( Credentials::OPTION ),
'setupCompleted' => $this->authentication->is_setup_completed(),
'hasConnectedAdmins' => $this->authentication->get_has_connected_admins_instance()->get(),
'hasMultipleAdmins' => $this->authentication->get_has_multiple_admins_instance()->get(),
'ownerID' => $this->authentication->get_owner_id_instance()->get(),
);
return new WP_REST_Response( $data );
},
'permission_callback' => $can_setup,
),
)
),
new REST_Route(
'core/user/data/authentication',
array(
array(
'methods' => WP_REST_Server::READABLE,
'callback' => function () {
$oauth_client = $this->authentication->get_oauth_client();
$is_authenticated = $this->authentication->is_authenticated();
$data = array(
'authenticated' => $is_authenticated,
'requiredScopes' => $oauth_client->get_required_scopes(),
'grantedScopes' => $is_authenticated ? $oauth_client->get_granted_scopes() : array(),
'unsatisfiedScopes' => $is_authenticated ? $oauth_client->get_unsatisfied_scopes() : array(),
'needsReauthentication' => $oauth_client->needs_reauthentication(),
'disconnectedReason' => $this->authentication->get_disconnected_reason_instance()->get(),
'connectedProxyURL' => $this->authentication->get_connected_proxy_url_instance()->get(),
);
return new WP_REST_Response( $data );
},
'permission_callback' => $can_access_authentication,
),
)
),
new REST_Route(
'core/user/data/disconnect',
array(
array(
'methods' => WP_REST_Server::EDITABLE,
'callback' => function () {
$this->authentication->disconnect();
return new WP_REST_Response( true );
},
'permission_callback' => $can_disconnect,
),
)
),
new REST_Route(
'core/user/data/get-token',
array(
array(
'methods' => WP_REST_Server::CREATABLE,
'callback' => function () {
$this->authentication->do_refresh_user_token();
return new WP_REST_Response(
array(
'token' => $this->authentication->get_oauth_client()->get_access_token(),
)
);
},
'permission_callback' => $can_view_authenticated_dashboard,
),
)
),
);
}
}