diff --git a/app/Notifications/ApiTokenExpiringNotification.php b/app/Notifications/ApiTokenExpiringNotification.php index 451dd312a..40bd3ead0 100644 --- a/app/Notifications/ApiTokenExpiringNotification.php +++ b/app/Notifications/ApiTokenExpiringNotification.php @@ -21,7 +21,7 @@ public function __construct(public PersonalAccessToken $token) $this->onQueue('high'); $this->tokenName = $token->name; $this->expiresAt = $token->expires_at?->format('Y-m-d H:i:s') ?? ''; - $this->manageUrl = route('security.api-tokens'); + $this->manageUrl = base_url().'/security/api-tokens'; } public function via(object $notifiable): array diff --git a/tests/Feature/ApiTokenExpirationWarningTest.php b/tests/Feature/ApiTokenExpirationWarningTest.php index 92c207607..a6bbffbbc 100644 --- a/tests/Feature/ApiTokenExpirationWarningTest.php +++ b/tests/Feature/ApiTokenExpirationWarningTest.php @@ -1,6 +1,7 @@ 0]); $this->team = Team::factory()->create(); $this->user = User::factory()->create(); $this->team->members()->attach($this->user->id, ['role' => 'owner']); @@ -137,4 +139,15 @@ function createTokenExpiring(User $user, Team $team, ?Carbon $expiresAt, ?Carbon Notification::assertNothingSent(); expect($token->fresh()->api_token_expiration_warning_sent_at)->toBeNull(); }); + + test('manage url uses the instance fqdn when configured', function () { + InstanceSettings::query()->update(['fqdn' => 'https://coolify.example.com']); + $token = createTokenExpiring($this->user, $this->team, Carbon::now()->addHours(12)); + + $notification = new ApiTokenExpiringNotification($token); + + expect($notification->toSlack()->description) + ->toContain('https://coolify.example.com/security/api-tokens') + ->not->toContain('localhost'); + }); });