diff --git a/app/Connect/Actions/BuildConnectSniffsAction.php b/app/Connect/Actions/BuildConnectSniffsAction.php index 1f490ac225..9b7ee8c50f 100644 --- a/app/Connect/Actions/BuildConnectSniffsAction.php +++ b/app/Connect/Actions/BuildConnectSniffsAction.php @@ -13,7 +13,7 @@ class BuildConnectSniffsAction { - public function execute(Carbon $date, array &$clients): array + public function execute(?Carbon $date, array &$clients, ?string $username = null): array { $sniffs = []; $usernames = []; @@ -22,8 +22,8 @@ public function execute(Carbon $date, array &$clients): array $userAgentService = new UserAgentService(); $entries = ConnectWarning::query() - ->where('created_at', '>=', $date->clone()->startOfDay()) - ->where('created_at', '<=', $date->clone()->endOfDay()) + ->when($date != null, fn ($query) => $query->whereDate('created_at', $date)) + ->when(filled($username), fn ($query) => $query->where('username', $username)) ->with('playerSession', 'playerSession.gameHash') ->orderBy('created_at') ->get(); diff --git a/resources/views/components/user/profile/moderation-tools.blade.php b/resources/views/components/user/profile/moderation-tools.blade.php index 3883e79ccc..393077abf8 100644 --- a/resources/views/components/user/profile/moderation-tools.blade.php +++ b/resources/views/components/user/profile/moderation-tools.blade.php @@ -2,6 +2,7 @@ use App\Community\Enums\CommentableType; use App\Community\Enums\UserAction; use App\Enums\Permissions; +use App\Models\ConnectWarning; ?> @props([ @@ -27,6 +28,7 @@ $hasPatreonBadge = HasPatreonBadge($targetUser); $hasCertifiedLegendBadge = HasCertifiedLegendBadge($targetUser); +$firstConnectSmell = ConnectWarning::where('username', $targetUsername)->orWhere('username', $targetUser->display_name)->first(); ?> {{-- TODO port to Filament and delete component --}} @@ -103,6 +105,9 @@ class="bg-embed hidden border-x border-b border-text-muted py-2 px-4 w-[calc(100 {{ $isTargetUserUntracked ? 'Untracked User' : 'Tracked User' }} + @if ($firstConnectSmell) + - Connect Smells + @endif diff --git a/resources/views/pages-legacy/sentry.blade.php b/resources/views/pages-legacy/sentry.blade.php index 4fdb6c3514..ddac1b6091 100644 --- a/resources/views/pages-legacy/sentry.blade.php +++ b/resources/views/pages-legacy/sentry.blade.php @@ -52,22 +52,27 @@ function key_to_class(?string $key): string if ($selected) { $date = Carbon::parse(substr($selected, 7)); $sniffs = (new BuildConnectSniffsAction())->execute($date, $clients); +} else { + $selected = requestInputSanitized('user'); + if ($selected) { + $sniffs = (new BuildConnectSniffsAction())->execute(null, $clients, $selected); + } +} - foreach ($sniffs as $sniff) { - $user_counts[$sniff['user']] = ($user_counts[$sniff['user']] ?? 0) + 1; - $method_counts[$sniff['method']] = ($method_counts[$sniff['method']] ?? 0) + 1; +foreach ($sniffs as $sniff) { + $user_counts[$sniff['user']] = ($user_counts[$sniff['user']] ?? 0) + 1; + $method_counts[$sniff['method']] = ($method_counts[$sniff['method']] ?? 0) + 1; - foreach ($sniff['smells'] as $smell) { - $smell_counts[$smell] = ($smell_counts[$smell] ?? 0) + 1; - } + foreach ($sniff['smells'] as $smell) { + $smell_counts[$smell] = ($smell_counts[$smell] ?? 0) + 1; } - - ksort($user_counts); - ksort($method_counts); - ksort($smell_counts); - sort($clients); } +ksort($user_counts); +ksort($method_counts); +ksort($smell_counts); +sort($clients); + $colors = [ 'bad_validation' => [ // validation hash did not match expected values 'background' => 'orange', diff --git a/tests/Feature/Connect/BuildConnectSniffsTest.php b/tests/Feature/Connect/BuildConnectSniffsTest.php index 19e9ad23a6..0cb58fb342 100644 --- a/tests/Feature/Connect/BuildConnectSniffsTest.php +++ b/tests/Feature/Connect/BuildConnectSniffsTest.php @@ -243,6 +243,42 @@ public static function createAchievementWarning( $this->assertNull($sniffs[0]['userinfo']['unranked_at']); }); + test('only for user by display_name', function () { + $leaderboard1 = Leaderboard::factory()->create(); + $user1 = User::factory()->create(['username' => 'UserName', 'display_name' => 'DisplayName']); + $entry1 = BuildConnectSniffsTestHelpers::createLeaderboardWarning($user1->display_name, $leaderboard1, 1234); + $entry2 = BuildConnectSniffsTestHelpers::createLeaderboardWarning('Player1', $leaderboard1, 1234); + + $clients = []; + $sniffs = (new BuildConnectSniffsAction())->execute(null, $clients, 'DisplayName'); + $this->assertEquals(1, count($sniffs)); + $this->assertEquals($user1->display_name, $sniffs[0]['user']); + $this->assertEquals($user1->id, $sniffs[0]['userinfo']['id']); + $this->assertEquals($user1->username, $sniffs[0]['userinfo']['username']); + $this->assertEquals($user1->display_name, $sniffs[0]['userinfo']['display_name']); + $this->assertEquals($user1->Permissions, $sniffs[0]['userinfo']['Permissions']); + $this->assertNull($sniffs[0]['userinfo']['deleted_at']); + $this->assertNull($sniffs[0]['userinfo']['unranked_at']); + }); + + test('only for user by username', function () { + $leaderboard1 = Leaderboard::factory()->create(); + $user1 = User::factory()->create(['username' => 'UserName', 'display_name' => 'DisplayName']); + $entry1 = BuildConnectSniffsTestHelpers::createLeaderboardWarning($user1->username, $leaderboard1, 1234); + $entry2 = BuildConnectSniffsTestHelpers::createLeaderboardWarning('Player1', $leaderboard1, 1234); + + $clients = []; + $sniffs = (new BuildConnectSniffsAction())->execute(null, $clients, 'UserName'); + $this->assertEquals(1, count($sniffs)); + $this->assertEquals($user1->username, $sniffs[0]['user']); + $this->assertEquals($user1->id, $sniffs[0]['userinfo']['id']); + $this->assertEquals($user1->username, $sniffs[0]['userinfo']['username']); + $this->assertEquals($user1->display_name, $sniffs[0]['userinfo']['display_name']); + $this->assertEquals($user1->Permissions, $sniffs[0]['userinfo']['Permissions']); + $this->assertNull($sniffs[0]['userinfo']['deleted_at']); + $this->assertNull($sniffs[0]['userinfo']['unranked_at']); + }); + test('session data', function () { $game1 = Game::factory()->create(); $gameHash1 = GameHash::factory()->create(['game_id' => $game1->id]);