optimizations

This commit is contained in:
2026-03-28 19:15:39 +01:00
parent 0b25d9570a
commit cab4fbd83e
509 changed files with 1016804 additions and 1605 deletions

View File

@@ -74,6 +74,7 @@ class AppServiceProvider extends ServiceProvider
$this->configureMessagingRateLimiters();
$this->configureDownloadRateLimiter();
$this->configureArtworkRateLimiters();
$this->configureNovaCardRateLimiters();
$this->configureReactionRateLimiters();
$this->configureSocialRateLimiters();
$this->configureSettingsRateLimiters();
@@ -250,6 +251,23 @@ class AppServiceProvider extends ServiceProvider
});
}
private function configureNovaCardRateLimiters(): void
{
foreach (['drafts', 'autosave', 'publish', 'background_upload', 'render'] as $key) {
RateLimiter::for('nova-cards-' . str_replace('_', '-', $key), function (Request $request) use ($key): array {
$config = (array) config('nova_cards.rate_limits.' . $key, []);
$perUser = max(1, (int) ($config['per_user'] ?? 30));
$perIp = max(1, (int) ($config['per_ip'] ?? 60));
$scope = 'nova-cards:' . $key . ':';
return [
Limit::perMinute($perUser)->by($scope . 'user:' . ($request->user()?->id ?? 'guest')),
Limit::perMinute($perIp)->by($scope . 'ip:' . $request->ip()),
];
});
}
}
private function buildUploadLimits(Request $request, string $key): array
{
$config = (array) config('uploads.rate_limits.' . $key, []);
@@ -384,6 +402,16 @@ class AppServiceProvider extends ServiceProvider
private function configureSocialRateLimiters(): void
{
RateLimiter::for('follow-write', function (Request $request): array {
$userId = $request->user()?->id ?? 'guest';
return [
Limit::perMinute(12)->by('follow-write:minute:user:' . $userId),
Limit::perHour(120)->by('follow-write:hour:user:' . $userId),
Limit::perMinute(24)->by('follow-write:minute:ip:' . $request->ip()),
];
});
RateLimiter::for('social-write', function (Request $request): array {
$userId = $request->user()?->id ?? 'guest';

View File

@@ -6,11 +6,15 @@ use Illuminate\Support\Facades\Gate;
use App\Models\Artwork;
use App\Models\ArtworkAward;
use App\Models\ArtworkComment;
use App\Models\Collection;
use App\Models\NovaCard;
use App\Models\Post;
use App\Models\PostComment;
use App\Policies\ArtworkPolicy;
use App\Policies\ArtworkAwardPolicy;
use App\Policies\ArtworkCommentPolicy;
use App\Policies\CollectionPolicy;
use App\Policies\NovaCardPolicy;
use App\Policies\PostPolicy;
use App\Policies\PostCommentPolicy;
@@ -20,6 +24,8 @@ class AuthServiceProvider extends ServiceProvider
Artwork::class => ArtworkPolicy::class,
ArtworkAward::class => ArtworkAwardPolicy::class,
ArtworkComment::class => ArtworkCommentPolicy::class,
Collection::class => CollectionPolicy::class,
NovaCard::class => NovaCardPolicy::class,
Post::class => PostPolicy::class,
PostComment::class => PostCommentPolicy::class,
];