Automattic\WooCommerce\Internal\AddressProvider
AbstractAutomatticAddressProvider::load_jwt
Loads up a JWT from cache or from the implementor side.
Method of the class: AbstractAutomatticAddressProvider{}
No Hooks.
Returns
``null
phpcs:ignore``. Squiz.Commenting.FunctionCommentThrowTag.Missing -- As we wrap the throw in a try/catch.
Usage
$AbstractAutomatticAddressProvider = new AbstractAutomatticAddressProvider(); $AbstractAutomatticAddressProvider->load_jwt();
AbstractAutomatticAddressProvider::load_jwt() AbstractAutomatticAddressProvider::load jwt code WC 10.3.3
public function load_jwt() {
// If we already have a loaded, valid token, we return early.
if ( $this->jwt && is_string( $this->jwt ) && JsonWebToken::shallow_validate( $this->jwt ) ) {
return;
}
$cached_jwt = $this->get_cached_option( 'address_autocomplete_jwt' );
// If we have a cached, valid token, we load it to class and return early.
if ( $cached_jwt && is_string( $cached_jwt ) && JsonWebToken::shallow_validate( $cached_jwt ) ) {
$this->jwt = $cached_jwt;
return;
}
$retry_data = $this->get_cached_option( 'jwt_retry_data' );
if ( $retry_data && isset( $retry_data['try_after'] ) && $retry_data['try_after'] > time() ) {
return;
}
try {
$fresh_jwt = $this->get_address_service_jwt();
if ( $fresh_jwt && is_string( $fresh_jwt ) && JsonWebToken::shallow_validate( $fresh_jwt ) ) {
$this->set_jwt( $fresh_jwt );
// Clear retry data on success.
$this->delete_cached_option( 'jwt_retry_data' );
return;
} else {
throw new \Exception( 'Invalid JWT received from address service.' );
}
} catch ( \Exception $e ) {
$retry_data['attempts'] = isset( $retry_data['attempts'] ) ? $retry_data['attempts'] + 1 : 1;
wc_get_logger()->error(
sprintf(
'Failed loading JWT for %1$s address autocomplete service (attempt %2$d) with error %3$s.',
$this->name,
$retry_data['attempts'],
$e->getMessage()
),
'address-autocomplete'
);
$backoff_hours = pow( 2, $retry_data['attempts'] - 1 ); // 1, 2, 4, 8 hours.
$retry_data['try_after'] = time() + ( $backoff_hours * HOUR_IN_SECONDS );
$this->update_cached_option( 'jwt_retry_data', $retry_data, DAY_IN_SECONDS );
}
}