VANA/VANA-php/app/Srgssr/Auth.php

85 lines
2.0 KiB
PHP
Raw Normal View History

2024-10-11 08:02:45 +02:00
<?php
namespace App\Srgssr;
use Illuminate\Support\Facades\Http;
use App\Models\Endpoint;
class Auth
{
protected $key;
protected $secret;
/**
* OAuth for SRG-SSR API.
* Gets token needed for calls to protected SRG-SSR APIs.
* https://developer.srgssr.ch/getting-started/how-update-srg-ssr-oauth-security
* @param string $key ClientId
* @param string $secret CleintSecret
* @return array|null
*/
public static function accessToken($key, $secret) : ?array
{
$authKey = base64_encode("{$key}:{$secret}");
$response = Http::withHeaders([
'Authorization' => 'Basic '.$authKey,
'Cache-Control' => 'no-cache',
'Content-Length' => 0,
'Postman-Token' => 'XX264e32-2de0-f1e3-f3f8-eab014bbXX76'
])->post('https://api.srgssr.ch/oauth/v1/accesstoken?grant_type=client_credentials');
if($response->ok()){
return $response->json();
}
return null;
}
/**
* Oauth renewal.
* Retrieve new token and save to database.
* @param string $endpoint
* @return string
*/
public static function renewal(string $endpoint) : string
{
$settings = Endpoint::firstWhere('uri', $endpoint)->settings;
$token = self::accessToken($settings['key'], $settings['secret']);
Endpoint::updateOrCreate(
['uri' => $endpoint.'#oauth'],
['settings' => $token]
);
return $token['access_token'];
}
/**
* Retrive Token.
* Retrive token from database or renew if is expired.
* @return string
* @param string $endpoint
*/
public static function token($endpoint) : string
{
$oauth = Endpoint::firstWhere('uri', $endpoint.'#oauth');
$settings = $oauth->settings;
$expiryDate = strtotime($oauth->updated_at) + $settings['expires_in'];
if($expiryDate - time() <= 0){
$settings['access_token'] = self::renewal($endpoint);
}
return $settings['access_token'];
}
}