Plugin Directory

Changeset 2818793


Ignore:
Timestamp:
11/16/2022 07:49:22 AM (3 years ago)
Author:
beyondsoftware
Message:

Version 2.2.16

Location:
beyondconnect/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • beyondconnect/trunk/beyondConnect.php

    r2755877 r2818793  
    77Plugin URI: https://support.beyond-sw.com/hc/de/categories/360002442180
    88Description: beyondConnect connects WordPress with the beyond software services.
    9 Version: 2.2.15
     9Version: 2.2.16
    1010Author: Felix Stadelmann, beyond software
    1111Author URI: https://beyond-sw.com
  • beyondconnect/trunk/inc/Beyond.php

    r2736586 r2818793  
    77namespace Inc;
    88
     9
     10use Cassandra\Date;
    911
    1012final class  Beyond
     
    6062        $expandstring = self::getODataSubString($entity, $wporg_atts, 1, 9);
    6163
    62         $querystring = self::getODataQueryString($entity,
     64        return self::getODataQueryString($entity,
    6365            empty($wporg_atts['function']) ? '' : $wporg_atts['function'],
    6466            empty($wporg_atts['select']) ? '' : $wporg_atts['select'],
     
    6870            empty($wporg_atts['skip']) ? '' : $wporg_atts['skip'],
    6971            empty($wporg_atts['orderby']) ? '' : $wporg_atts['orderby']);
    70 
    71         return $querystring;
    7272    }
    7373
     
    149149            $wporg_atts_neu[$string . $shift . $int] = $value;
    150150
    151             if (strpos($string, 'select') === false
    152                 && strpos($string, 'expand') === false
    153                 && strpos($string, 'filter') === false
    154                 && strpos($string, 'top') === false
    155                 && strpos($string, 'skip') === false
    156                 && strpos($string, 'orderby') === false) {
     151            if ( ! str_contains( $string, 'select' )
     152                 && ! str_contains( $string, 'expand' )
     153                 && ! str_contains( $string, 'filter' )
     154                 && ! str_contains( $string, 'top' )
     155                 && ! str_contains( $string, 'skip' )
     156                 && ! str_contains( $string, 'orderby' ) ) {
    157157                $wporg_atts_neu[$key] = $value;
    158158            }
     
    164164    public static function getValues(string $path, string $returnField, bool $onlyStatus = false)
    165165    {
    166         $values = self::requestValues($path, $returnField, $onlyStatus);
    167 
    168         if (empty($values)) {
    169             self::refreshToken();
    170             $values = self::requestValues($path, $returnField, $onlyStatus);
    171         }
    172         return $values;
     166        return self::requestValues($path, $returnField, $onlyStatus);
    173167    }
    174168
     
    209203        $url = $option['Url'];
    210204
     205        $token = self::getToken();
     206        if (empty($token))
     207            return null;
     208
    211209        $header = array(
    212210            'Content-Type' => 'application/json',
    213             'Authorization' => 'Bearer ' . self::getToken(),
     211            'Authorization' => 'Bearer ' . $token,
    214212        );
    215213
     
    218216            'method' => 'GET',
    219217            'headers' => $header,
     218            'timeout' => 20,  //increase timeout from 5 to 20
    220219        );
    221220
    222221        $response = wp_remote_get($url . $path, $defaults);
     222
     223        if (is_wp_error($response) && $response->get_error_code() === 401) {
     224            error_log('beyondConnect: requestValues: Error 401');
     225            delete_transient('bc_token');
     226            return self::requestValues($path, $returnField, $onlyStatus);
     227        }
    223228
    224229        if ($onlyStatus) {
     
    242247    }
    243248
    244     public static function getToken(): string
    245     {
    246         if (get_transient('bc_token') === false) {
    247             if (!self::refreshToken())
    248                 echo "Error receiving token<br />";
    249         }
    250 
    251         return get_transient('bc_token');
    252     }
    253 
    254     public static function refreshToken(): bool
    255     {
    256         $value = self::requestToken();
    257 
    258         if (empty($value))
    259             return false;
    260 
    261         set_transient('bc_token', $value, HOUR_IN_SECONDS);
    262         return true;
    263     }
    264 
    265     public static function requestToken(): ?string
     249    private static function getToken(): ?string
     250    {
     251        $savedTransient = get_transient('bc_token');
     252        $savedDecoded = json_decode($savedTransient, true);
     253        $safedTokenString = $savedDecoded != null  ? $savedDecoded["access_token"] : null;
     254        $safedExpires = $savedDecoded != null ? $savedDecoded["expires"] : null;
     255        $safedRefreshToken = $savedDecoded != null ? $savedDecoded["refresh_token"] : null;
     256        $savedRefreshTokenString = $safedRefreshToken != null ? $safedRefreshToken["token_string"] : null;
     257
     258
     259        if (!empty($safedTokenString))
     260        {
     261
     262            $expiringDate = strtotime($safedExpires);
     263            $currentDate = current_time('U', true);
     264
     265            if ($currentDate < $expiringDate)
     266            {
     267                return $safedTokenString;
     268            }
     269        }
     270
     271        if (!empty($savedRefreshTokenString) && !empty($safedTokenString))
     272        {
     273            //Request Token from Refresh Token
     274            $returnedToken = self::requestTokens($savedRefreshTokenString, $safedTokenString);
     275
     276            if (!empty ($returnedToken))
     277            {
     278                return $returnedToken;
     279            }
     280            else
     281            {
     282                error_log('beyondConnect: getToken: Request Token from Refresh Token failed');
     283            }
     284
     285        }
     286        //Request new Token
     287        return self::requestTokens(null, null);
     288    }
     289
     290    private static function requestTokens(?string $refreshtoken, ?string $accesstoken): ?string
    266291    {
    267292        $option = get_option('beyondconnect_option');
     
    270295        $key = $option['Key'];
    271296
    272         $data = array(
    273             'grant_type' => 'password',
    274             'username' => $userName,
    275             'password' => $key);
     297        if ($refreshtoken === null || $accesstoken === null) {
     298            $tokenUrl = 'token';
     299            $data = array(
     300                'grant_type' => 'password',
     301                'username' => $userName,
     302                'password' => $key);
     303        }
     304        else
     305        {
     306            $tokenUrl = 'refresh';
     307            $data = array(
     308                'refreshtoken' => $refreshtoken,
     309                'accesstoken' => $accesstoken);
     310        }
    276311
    277312        $defaults = array(
     
    281316        );
    282317
    283         $response = wp_remote_get($url . 'token', $defaults);
     318        $response = wp_remote_get($url . $tokenUrl, $defaults);
    284319
    285320        if (is_wp_error($response)) {
     
    287322        }
    288323
    289         $jsonRaw = json_decode(wp_remote_retrieve_body($response), true);
     324        $body = wp_remote_retrieve_body($response);
     325
     326        $jsonRaw = json_decode($body, true);
     327
     328
     329        //Save Tokens to Transient
     330        //Expiration for both one day, because Refresh needs Access Token
     331        set_transient('bc_token', $body ?? null, DAY_IN_SECONDS);
    290332
    291333        return $jsonRaw['access_token'] ?? null;
     
    294336    public static function setValues(string $path, string $method, array $body, string $returnField, bool $onlyStatus)
    295337    {
    296         $option = get_option('beyondconnect_option');
     338        $token = self::getToken();
     339        if (empty($token))
     340            return null;
     341
     342        $option = get_option('beyondconnect_option');
    297343        $url = $option['Url'];
    298344
    299345        $header = array(
    300346            'Content-Type' => 'application/json',
    301             'Authorization' => 'Bearer ' . self::getToken(),
     347            'Authorization' => 'Bearer ' . $token,
    302348        );
    303349
     
    317363        if ($method === 'DELETE') {
    318364            $response = wp_remote_request($url . $path, $defaults);
    319             //$body = wp_remote_retrieve_body($response);
    320365        } else {
    321366            $response = wp_remote_post($url . $path, $defaults);
    322367        }
     368
     369        if (is_wp_error($response) && $response->get_error_code() === 401) {
     370            error_log('beyondConnect: setValues: Error 401');
     371            delete_transient('bc_token');
     372            return self::requestValues($path, $returnField, $onlyStatus);
     373        }
    323374
    324375        if (is_wp_error($response)) {
  • beyondconnect/trunk/readme.txt

    r2755877 r2818793  
    33Tags: classes, courses, dance courses, dance classes,
    44Donate link: https:/beyond-sw.com
    5 Requires at least: 5.0
    6 Tested up to: 6.0.1
     5Requires at least: 6.0
     6Tested up to: 6.1
    77Requires PHP: 8.0
    8 Stable tag: 2.2.15
     8Stable tag: 2.2.16
    99License: GPLv2 or later
    1010License URI: http://www.gnu.org/licenses/gpl-2.0.html
     
    2828
    2929== Changelog ==
     30= 2.2.16 =
     31* Support for Refresh Tokens
    3032= 2.2.15 =
    3133* Bug fixes
Note: See TracChangeset for help on using the changeset viewer.