Changeset 2818793
- Timestamp:
- 11/16/2022 07:49:22 AM (3 years ago)
- Location:
- beyondconnect/trunk
- Files:
-
- 3 edited
-
beyondConnect.php (modified) (1 diff)
-
inc/Beyond.php (modified) (13 diffs)
-
readme.txt (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
beyondconnect/trunk/beyondConnect.php
r2755877 r2818793 7 7 Plugin URI: https://support.beyond-sw.com/hc/de/categories/360002442180 8 8 Description: beyondConnect connects WordPress with the beyond software services. 9 Version: 2.2.1 59 Version: 2.2.16 10 10 Author: Felix Stadelmann, beyond software 11 11 Author URI: https://beyond-sw.com -
beyondconnect/trunk/inc/Beyond.php
r2736586 r2818793 7 7 namespace Inc; 8 8 9 10 use Cassandra\Date; 9 11 10 12 final class Beyond … … 60 62 $expandstring = self::getODataSubString($entity, $wporg_atts, 1, 9); 61 63 62 $querystring =self::getODataQueryString($entity,64 return self::getODataQueryString($entity, 63 65 empty($wporg_atts['function']) ? '' : $wporg_atts['function'], 64 66 empty($wporg_atts['select']) ? '' : $wporg_atts['select'], … … 68 70 empty($wporg_atts['skip']) ? '' : $wporg_atts['skip'], 69 71 empty($wporg_atts['orderby']) ? '' : $wporg_atts['orderby']); 70 71 return $querystring;72 72 } 73 73 … … 149 149 $wporg_atts_neu[$string . $shift . $int] = $value; 150 150 151 if ( strpos($string, 'select') === false152 && strpos($string, 'expand') === false153 && strpos($string, 'filter') === false154 && strpos($string, 'top') === false155 && strpos($string, 'skip') === false156 && 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' ) ) { 157 157 $wporg_atts_neu[$key] = $value; 158 158 } … … 164 164 public static function getValues(string $path, string $returnField, bool $onlyStatus = false) 165 165 { 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); 173 167 } 174 168 … … 209 203 $url = $option['Url']; 210 204 205 $token = self::getToken(); 206 if (empty($token)) 207 return null; 208 211 209 $header = array( 212 210 'Content-Type' => 'application/json', 213 'Authorization' => 'Bearer ' . self::getToken(),211 'Authorization' => 'Bearer ' . $token, 214 212 ); 215 213 … … 218 216 'method' => 'GET', 219 217 'headers' => $header, 218 'timeout' => 20, //increase timeout from 5 to 20 220 219 ); 221 220 222 221 $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 } 223 228 224 229 if ($onlyStatus) { … … 242 247 } 243 248 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 266 291 { 267 292 $option = get_option('beyondconnect_option'); … … 270 295 $key = $option['Key']; 271 296 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 } 276 311 277 312 $defaults = array( … … 281 316 ); 282 317 283 $response = wp_remote_get($url . 'token', $defaults);318 $response = wp_remote_get($url . $tokenUrl, $defaults); 284 319 285 320 if (is_wp_error($response)) { … … 287 322 } 288 323 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); 290 332 291 333 return $jsonRaw['access_token'] ?? null; … … 294 336 public static function setValues(string $path, string $method, array $body, string $returnField, bool $onlyStatus) 295 337 { 296 $option = get_option('beyondconnect_option'); 338 $token = self::getToken(); 339 if (empty($token)) 340 return null; 341 342 $option = get_option('beyondconnect_option'); 297 343 $url = $option['Url']; 298 344 299 345 $header = array( 300 346 'Content-Type' => 'application/json', 301 'Authorization' => 'Bearer ' . self::getToken(),347 'Authorization' => 'Bearer ' . $token, 302 348 ); 303 349 … … 317 363 if ($method === 'DELETE') { 318 364 $response = wp_remote_request($url . $path, $defaults); 319 //$body = wp_remote_retrieve_body($response);320 365 } else { 321 366 $response = wp_remote_post($url . $path, $defaults); 322 367 } 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 } 323 374 324 375 if (is_wp_error($response)) { -
beyondconnect/trunk/readme.txt
r2755877 r2818793 3 3 Tags: classes, courses, dance courses, dance classes, 4 4 Donate link: https:/beyond-sw.com 5 Requires at least: 5.06 Tested up to: 6. 0.15 Requires at least: 6.0 6 Tested up to: 6.1 7 7 Requires PHP: 8.0 8 Stable tag: 2.2.1 58 Stable tag: 2.2.16 9 9 License: GPLv2 or later 10 10 License URI: http://www.gnu.org/licenses/gpl-2.0.html … … 28 28 29 29 == Changelog == 30 = 2.2.16 = 31 * Support for Refresh Tokens 30 32 = 2.2.15 = 31 33 * Bug fixes
Note: See TracChangeset
for help on using the changeset viewer.