. * * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU Affero General Public License version 3. * * In accordance with Section 7(b) of the GNU Affero General Public License version 3, * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. ************************************************************************/ namespace Espo\Tools\OAuthServer\Utils; use Espo\Core\Utils\Json; use Exception; use InvalidArgumentException; use JsonException; use SensitiveParameter; class RefreshTokenDataExtractor { public function __construct( private Crypt $crypt, ) {} public function extractIdentifier(#[SensitiveParameter] string $token): string { try { $decrypted = $this->crypt->decrypt($token); } catch (Exception) { throw new InvalidArgumentException("Could not decrypt."); } try { $tokenData = Json::decode($decrypted, true); } catch (JsonException) { throw new InvalidArgumentException("Could not JSON decode."); } $identifier = $tokenData['refresh_token_id'] ?? null; if (!is_string($identifier)) { throw new InvalidArgumentException("No identifier."); } return $identifier; } }