113 lines
2.1 KiB
PHP
113 lines
2.1 KiB
PHP
<?php
|
|
/**
|
|
* PayPal REST API Token
|
|
*
|
|
* @package easy-digital-downloads
|
|
* @subpackage Gateways\PayPal
|
|
* @copyright Copyright (c) 2021, Sandhills Development, LLC
|
|
* @license GPL2+
|
|
*/
|
|
|
|
namespace EDD\Gateways\PayPal;
|
|
|
|
class Token {
|
|
|
|
/**
|
|
* Token object
|
|
*
|
|
* @var object
|
|
*/
|
|
private $token_object;
|
|
|
|
/**
|
|
* Token constructor.
|
|
*
|
|
* @param $token_object
|
|
*
|
|
* @throws \RuntimeException
|
|
*/
|
|
public function __construct( $token_object ) {
|
|
if ( is_object( $token_object ) && ! isset( $token_object->created ) ) {
|
|
$token_object->created = time();
|
|
}
|
|
|
|
if ( ! $this->is_valid( $token_object ) ) {
|
|
throw new \RuntimeException( __( 'Invalid token.', 'easy-digital-downloads' ) );
|
|
}
|
|
|
|
$this->token_object = $token_object;
|
|
}
|
|
|
|
/**
|
|
* Creates a new token from a JSON string.
|
|
*
|
|
* @param string $json
|
|
*
|
|
* @return Token
|
|
* @throws \Exception
|
|
*/
|
|
public static function from_json( $json ) {
|
|
return new Token( json_decode( $json ) );
|
|
}
|
|
|
|
/**
|
|
* Returns the token object as a JSON string.
|
|
*
|
|
* @since 2.11
|
|
* @return string|false
|
|
*/
|
|
public function to_json() {
|
|
return json_encode( $this->token_object );
|
|
}
|
|
|
|
/**
|
|
* Determines whether or not the token has expired.
|
|
*
|
|
* @since 2.11
|
|
* @return bool
|
|
*/
|
|
public function is_expired() {
|
|
// Regenerate tokens 10 minutes early, just in case.
|
|
$expires_in = $this->token_object->expires_in - ( 10 * MINUTE_IN_SECONDS );
|
|
|
|
return time() > $this->token_object->created + $expires_in;
|
|
}
|
|
|
|
/**
|
|
* Returns the access token.
|
|
*
|
|
* @since 2.11
|
|
* @return string
|
|
*/
|
|
public function token() {
|
|
return $this->token_object->access_token;
|
|
}
|
|
|
|
/**
|
|
* Determines whether or not we have a valid token object.
|
|
* Note: This does not check the _expiration_ of the token, just validates that the expected
|
|
* data is _present_.
|
|
*
|
|
* @param object $token_object
|
|
*
|
|
* @since 2.11
|
|
* @return bool
|
|
*/
|
|
private function is_valid( $token_object ) {
|
|
$required_properties = array(
|
|
'created',
|
|
'access_token',
|
|
'expires_in'
|
|
);
|
|
|
|
foreach ( $required_properties as $property ) {
|
|
if ( ! isset( $token_object->{$property} ) ) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
}
|