fedi-feed-router/app/Services/Auth/LemmyAuthService.php
2025-07-05 01:55:53 +02:00

41 lines
1.2 KiB
PHP

<?php
namespace App\Services\Auth;
use App\Enums\PlatformEnum;
use App\Exceptions\PlatformAuthException;
use App\Models\PlatformAccount;
use App\Modules\Lemmy\Services\LemmyApiService;
use Illuminate\Support\Facades\Cache;
class LemmyAuthService
{
/**
* @throws PlatformAuthException
*/
public static function getToken(PlatformAccount $account): string
{
$cacheKey = "lemmy_jwt_token_$account->id";
$cachedToken = Cache::get($cacheKey);
if ($cachedToken) {
return $cachedToken;
}
if (! $account->username || ! $account->password || ! $account->instance_url) {
throw new PlatformAuthException(PlatformEnum::LEMMY, 'Missing credentials for account: ' . $account->username);
}
$api = new LemmyApiService($account->instance_url);
$token = $api->login($account->username, $account->password);
if (!$token) {
throw new PlatformAuthException(PlatformEnum::LEMMY, 'Login failed for account: ' . $account->username);
}
// Cache for 50 minutes (3000 seconds) to allow buffer before token expires
Cache::put($cacheKey, $token, 3000);
return $token;
}
}