You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
157 lines
3.2 KiB
PHP
157 lines
3.2 KiB
PHP
<?php
|
|
/**
|
|
* Google Authentication wrapper.
|
|
*
|
|
* @since 1.0.49
|
|
* @package RankMath
|
|
* @subpackage RankMath\modules
|
|
* @author Rank Math <support@rankmath.com>
|
|
*/
|
|
|
|
namespace RankMath\Google;
|
|
|
|
use RankMath\Helpers\Str;
|
|
use RankMath\Data_Encryption;
|
|
use RankMath\Helpers\Param;
|
|
use RankMath\Helpers\Security;
|
|
|
|
defined( 'ABSPATH' ) || exit;
|
|
|
|
/**
|
|
* Authentication class.
|
|
*/
|
|
class Authentication {
|
|
|
|
/**
|
|
* API version.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected static $api_version = '2.1';
|
|
|
|
/**
|
|
* Get or update token data.
|
|
*
|
|
* @param bool|array $data Data to save.
|
|
* @return bool|array
|
|
*/
|
|
public static function tokens( $data = null ) {
|
|
$key = 'rank_math_google_oauth_tokens';
|
|
$encrypt_keys = [
|
|
'access_token',
|
|
'refresh_token',
|
|
];
|
|
|
|
// Clear data.
|
|
if ( false === $data ) {
|
|
delete_option( $key );
|
|
return false;
|
|
}
|
|
|
|
$saved = get_option( $key, [] );
|
|
foreach ( $encrypt_keys as $enc_key ) {
|
|
if ( isset( $saved[ $enc_key ] ) ) {
|
|
$saved[ $enc_key ] = Data_Encryption::deep_decrypt( $saved[ $enc_key ] );
|
|
}
|
|
}
|
|
|
|
// Getter.
|
|
if ( is_null( $data ) ) {
|
|
return wp_parse_args( $saved, [] );
|
|
}
|
|
|
|
// Setter.
|
|
foreach ( $encrypt_keys as $enc_key ) {
|
|
if ( isset( $saved[ $enc_key ] ) ) {
|
|
$saved[ $enc_key ] = Data_Encryption::deep_encrypt( $saved[ $enc_key ] );
|
|
}
|
|
if ( isset( $data[ $enc_key ] ) ) {
|
|
$data[ $enc_key ] = Data_Encryption::deep_encrypt( $data[ $enc_key ] );
|
|
}
|
|
}
|
|
|
|
$data = wp_parse_args( $data, $saved );
|
|
update_option( $key, $data );
|
|
|
|
return $data;
|
|
}
|
|
|
|
/**
|
|
* Is google authorized.
|
|
*
|
|
* @return boolean
|
|
*/
|
|
public static function is_authorized() {
|
|
$tokens = self::tokens();
|
|
|
|
return isset( $tokens['access_token'] ) && isset( $tokens['refresh_token'] );
|
|
}
|
|
|
|
/**
|
|
* Check if token is expired.
|
|
*
|
|
* @return boolean
|
|
*/
|
|
public static function is_token_expired() {
|
|
$tokens = self::tokens();
|
|
|
|
return $tokens['expire'] && time() > $tokens['expire'];
|
|
}
|
|
|
|
/**
|
|
* Get oauth url.
|
|
*
|
|
* @return string
|
|
*/
|
|
public static function get_auth_url() {
|
|
$page = self::get_page_slug();
|
|
|
|
return Security::add_query_arg_raw(
|
|
[
|
|
'version' => defined( 'RANK_MATH_PRO_VERSION' ) ? 'pro' : 'free',
|
|
'api_version' => static::$api_version,
|
|
'redirect_uri' => rawurlencode( admin_url( 'admin.php?page=' . $page ) ),
|
|
'security' => wp_create_nonce( 'rank_math_oauth_token' ),
|
|
],
|
|
self::get_auth_app_url()
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Google custom app.
|
|
*
|
|
* @return string
|
|
*/
|
|
public static function get_auth_app_url() {
|
|
return apply_filters( 'rank_math/analytics/app_url', 'https://oauth.rankmath.com' );
|
|
}
|
|
|
|
/**
|
|
* Get page slug according to request.
|
|
*
|
|
* @return string
|
|
*/
|
|
public static function get_page_slug() {
|
|
$page = Param::get( 'page' );
|
|
if ( ! empty( $page ) ) {
|
|
switch ( $page ) {
|
|
case 'rank-math-wizard':
|
|
return 'rank-math-wizard&step=analytics';
|
|
|
|
case 'rank-math-analytics':
|
|
return 'rank-math-analytics';
|
|
|
|
default:
|
|
return 'rank-math-options-general#setting-panel-analytics';
|
|
}
|
|
}
|
|
|
|
$page = wp_get_referer();
|
|
if ( ! empty( $page ) && Str::contains( 'wizard', $page ) ) {
|
|
return 'rank-math-wizard&step=analytics';
|
|
}
|
|
|
|
return 'rank-math-options-general#setting-panel-analytics';
|
|
}
|
|
}
|