From bb16c95b1feb15c17bac276429d1e1570f69668d Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Wed, 14 May 2025 01:20:50 -0600 Subject: [PATCH] Update HttpSignatures, auto generate instance actor if missing --- app/Util/ActivityPub/HttpSignature.php | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/app/Util/ActivityPub/HttpSignature.php b/app/Util/ActivityPub/HttpSignature.php index 20071932b..041773685 100644 --- a/app/Util/ActivityPub/HttpSignature.php +++ b/app/Util/ActivityPub/HttpSignature.php @@ -4,6 +4,7 @@ namespace App\Util\ActivityPub; use App\Models\InstanceActor; use App\Profile; +use Artisan; use Cache; use DateTime; @@ -71,14 +72,15 @@ class HttpSignature public static function instanceActorSign($url, $body = false, $addlHeaders = [], $method = 'post') { $keyId = config('app.url').'/i/actor#main-key'; - if(config_cache('database.default') === 'mysql') { - $privateKey = Cache::rememberForever(InstanceActor::PKI_PRIVATE, function () { - return InstanceActor::first()->private_key; - }); - } else { - $privateKey = InstanceActor::first()?->private_key; - } - abort_if(!$privateKey || empty($privateKey), 400, 'Missing instance actor key, please run php artisan instance:actor'); + $privateKey = Cache::rememberForever(InstanceActor::PKI_PRIVATE, function () { + $instance = InstanceActor::first() ?: tap(Artisan::call('instance:actor'), fn () => sleep(10)) && InstanceActor::first(); + if (! $instance) { + throw new \Exception('Failed to generate or retrieve InstanceActor.'); + } + + return $instance->private_key; + }); + abort_if(! $privateKey || empty($privateKey), 400, 'Missing instance actor key, please run php artisan instance:actor'); if ($body) { $digest = self::_digest($body); }