+ Submit Your Appeal +
++ Please fill-in all fields with appropriate detail. Appeals with false or insufficient detail will likely be denied. +
+From 502c0850fe9c02528f6ee75351a6188868baf67c Mon Sep 17 00:00:00 2001 From: Andy Saw <7236312+andyksaw@users.noreply.github.com> Date: Sat, 5 Apr 2025 18:06:32 +0900 Subject: [PATCH 1/3] fix: banlist search (#911) --- README.md | 1 - .../Controllers/Front/BanlistController.php | 28 ++++++++++--------- .../Accounts/AccountBadgeController.php | 2 +- .../Manage/Accounts/AccountController.php | 2 +- .../Accounts/AccountGroupController.php | 2 +- .../Accounts/AccountPlayerController.php | 2 +- .../Manage/Badges/BadgeController.php | 2 +- .../Manage/Bans/GameIPBanController.php | 2 +- .../Manage/Bans/GamePlayerBanController.php | 2 +- .../Manage/Donations/DonationController.php | 2 +- .../Manage/Groups/GroupAccountController.php | 2 +- .../Manage/Groups/GroupController.php | 2 +- .../Controllers/Manage/HomeController.php | 1 - .../Minecraft/MinecraftConfigController.php | 2 +- .../Minecraft/MinecraftWarpController.php | 2 +- .../Players/MinecraftPlayerController.php | 3 +- .../Controllers}/Manage/RendersManageApp.php | 2 +- .../Manage/Servers/ServerController.php | 2 +- .../Manage/Servers/ServerTokenController.php | 2 +- .../Warnings/PlayerWarningController.php | 2 +- .../Review/BanAppeals/BanAppealController.php | 2 +- .../BuilderRanks/BuilderRanksController.php | 2 +- .../Controllers/Review/HomeController.php | 1 - .../Controllers}/Review/RendersReviewApp.php | 2 +- app/Http/Filters/LikeFilter.php | 9 +++++- .../index.blade.php} | 0 .../{ban.blade.php => bans/show.blade.php} | 0 27 files changed, 43 insertions(+), 38 deletions(-) rename app/{Domains => Http/Controllers}/Manage/RendersManageApp.php (89%) rename app/{Domains => Http/Controllers}/Review/RendersReviewApp.php (89%) rename resources/views/front/pages/{banlist.blade.php => bans/index.blade.php} (100%) rename resources/views/front/pages/{ban.blade.php => bans/show.blade.php} (100%) diff --git a/README.md b/README.md index 462e90edf..f0ed8b58d 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,6 @@
--- diff --git a/app/Http/Controllers/Front/BanlistController.php b/app/Http/Controllers/Front/BanlistController.php index de8500383..795d5df89 100644 --- a/app/Http/Controllers/Front/BanlistController.php +++ b/app/Http/Controllers/Front/BanlistController.php @@ -3,27 +3,29 @@ namespace App\Http\Controllers\Front; use App\Http\Controllers\WebController; +use App\Http\Filters\LikeFilter; use App\Models\GamePlayerBan; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Pipeline; final class BanlistController extends WebController { public function index(Request $request) { - $bans = GamePlayerBan::active() - ->with(['bannedPlayer', 'bannerPlayer']) - ->latest(); - - if ($request->has('query') && !empty($request->input('query'))) { - $query = $request->input('query'); - $bans = GamePlayerBan::search($query)->constrain($bans); - } else { - $query = null; - } + $query = $request->input('query'); - $bans = $bans->paginate(50); + $pipes = [ + new LikeFilter('alias', $query, relationship: 'bannedPlayer'), + ]; + $bans = Pipeline::send(GamePlayerBan::query()) + ->through($pipes) + ->thenReturn() + ->with(['bannedPlayer', 'bannerPlayer']) + ->active() + ->latest() + ->paginate(50); - return view('front.pages.banlist') + return view('front.pages.bans.index') ->with([ 'bans' => $bans, 'query' => $query, @@ -32,7 +34,7 @@ public function index(Request $request) public function show(Request $request, GamePlayerBan $ban) { - return view('front.pages.ban') + return view('front.pages.bans.show') ->with(['ban' => $ban]); } } diff --git a/app/Http/Controllers/Manage/Accounts/AccountBadgeController.php b/app/Http/Controllers/Manage/Accounts/AccountBadgeController.php index 99fb16c1e..c845a4719 100644 --- a/app/Http/Controllers/Manage/Accounts/AccountBadgeController.php +++ b/app/Http/Controllers/Manage/Accounts/AccountBadgeController.php @@ -2,8 +2,8 @@ namespace App\Http\Controllers\Manage\Accounts; -use App\Domains\Manage\RendersManageApp; use App\Domains\MinecraftEventBus\Events\MinecraftPlayerUpdated; +use App\Http\Controllers\Manage\RendersManageApp; use App\Models\Account; use App\Models\Badge; use Illuminate\Http\Request; diff --git a/app/Http/Controllers/Manage/Accounts/AccountController.php b/app/Http/Controllers/Manage/Accounts/AccountController.php index 98b3202ae..add871ccc 100644 --- a/app/Http/Controllers/Manage/Accounts/AccountController.php +++ b/app/Http/Controllers/Manage/Accounts/AccountController.php @@ -3,8 +3,8 @@ namespace App\Http\Controllers\Manage\Accounts; use App\Core\Rules\DiscourseUsernameRule; -use App\Domains\Manage\RendersManageApp; use App\Domains\Registration\UseCases\CreateUnactivatedAccount; +use App\Http\Controllers\Manage\RendersManageApp; use App\Http\Controllers\WebController; use App\Http\Filters\EqualFilter; use App\Http\Filters\LikeFilter; diff --git a/app/Http/Controllers/Manage/Accounts/AccountGroupController.php b/app/Http/Controllers/Manage/Accounts/AccountGroupController.php index 7cd528346..cc6b8102f 100644 --- a/app/Http/Controllers/Manage/Accounts/AccountGroupController.php +++ b/app/Http/Controllers/Manage/Accounts/AccountGroupController.php @@ -2,7 +2,7 @@ namespace App\Http\Controllers\Manage\Accounts; -use App\Domains\Manage\RendersManageApp; +use App\Http\Controllers\Manage\RendersManageApp; use App\Http\Controllers\WebController; use App\Models\Account; use App\Models\Group; diff --git a/app/Http/Controllers/Manage/Accounts/AccountPlayerController.php b/app/Http/Controllers/Manage/Accounts/AccountPlayerController.php index 65ddb72c8..d5c3e53c5 100644 --- a/app/Http/Controllers/Manage/Accounts/AccountPlayerController.php +++ b/app/Http/Controllers/Manage/Accounts/AccountPlayerController.php @@ -4,7 +4,7 @@ use App\Core\Domains\MinecraftUUID\Data\MinecraftUUID; use App\Core\Domains\MinecraftUUID\Rules\MinecraftUUIDRule; -use App\Domains\Manage\RendersManageApp; +use App\Http\Controllers\Manage\RendersManageApp; use App\Http\Controllers\WebController; use App\Models\Account; use App\Models\MinecraftPlayer; diff --git a/app/Http/Controllers/Manage/Badges/BadgeController.php b/app/Http/Controllers/Manage/Badges/BadgeController.php index f034eedac..b0b5ddc07 100644 --- a/app/Http/Controllers/Manage/Badges/BadgeController.php +++ b/app/Http/Controllers/Manage/Badges/BadgeController.php @@ -2,7 +2,7 @@ namespace App\Http\Controllers\Manage\Badges; -use App\Domains\Manage\RendersManageApp; +use App\Http\Controllers\Manage\RendersManageApp; use App\Http\Controllers\WebController; use App\Models\Badge; use Illuminate\Http\Request; diff --git a/app/Http/Controllers/Manage/Bans/GameIPBanController.php b/app/Http/Controllers/Manage/Bans/GameIPBanController.php index 260c3b693..0aace4ad7 100644 --- a/app/Http/Controllers/Manage/Bans/GameIPBanController.php +++ b/app/Http/Controllers/Manage/Bans/GameIPBanController.php @@ -4,8 +4,8 @@ use App\Core\Domains\MinecraftUUID\Data\MinecraftUUID; use App\Core\Domains\MinecraftUUID\Rules\MinecraftUUIDRule; -use App\Domains\Manage\RendersManageApp; use App\Domains\MinecraftEventBus\Events\IpAddressBanned; +use App\Http\Controllers\Manage\RendersManageApp; use App\Http\Controllers\WebController; use App\Models\GameIPBan; use App\Models\MinecraftPlayer; diff --git a/app/Http/Controllers/Manage/Bans/GamePlayerBanController.php b/app/Http/Controllers/Manage/Bans/GamePlayerBanController.php index 65547ee69..7ffca1687 100644 --- a/app/Http/Controllers/Manage/Bans/GamePlayerBanController.php +++ b/app/Http/Controllers/Manage/Bans/GamePlayerBanController.php @@ -5,8 +5,8 @@ use App\Core\Domains\MinecraftUUID\Data\MinecraftUUID; use App\Core\Domains\MinecraftUUID\Rules\MinecraftUUIDRule; use App\Domains\Bans\Data\UnbanType; -use App\Domains\Manage\RendersManageApp; use App\Domains\MinecraftEventBus\Events\MinecraftUuidBanned; +use App\Http\Controllers\Manage\RendersManageApp; use App\Http\Controllers\WebController; use App\Models\GamePlayerBan; use App\Models\MinecraftPlayer; diff --git a/app/Http/Controllers/Manage/Donations/DonationController.php b/app/Http/Controllers/Manage/Donations/DonationController.php index a33ad3ef0..711fcb783 100644 --- a/app/Http/Controllers/Manage/Donations/DonationController.php +++ b/app/Http/Controllers/Manage/Donations/DonationController.php @@ -2,7 +2,7 @@ namespace App\Http\Controllers\Manage\Donations; -use App\Domains\Manage\RendersManageApp; +use App\Http\Controllers\Manage\RendersManageApp; use App\Http\Controllers\WebController; use App\Models\Donation; use Illuminate\Http\Request; diff --git a/app/Http/Controllers/Manage/Groups/GroupAccountController.php b/app/Http/Controllers/Manage/Groups/GroupAccountController.php index bc967f805..0513d1d91 100644 --- a/app/Http/Controllers/Manage/Groups/GroupAccountController.php +++ b/app/Http/Controllers/Manage/Groups/GroupAccountController.php @@ -2,7 +2,7 @@ namespace App\Http\Controllers\Manage\Groups; -use App\Domains\Manage\RendersManageApp; +use App\Http\Controllers\Manage\RendersManageApp; use App\Http\Controllers\WebController; use App\Models\Account; use App\Models\Group; diff --git a/app/Http/Controllers/Manage/Groups/GroupController.php b/app/Http/Controllers/Manage/Groups/GroupController.php index 1663a7aa9..b59523800 100644 --- a/app/Http/Controllers/Manage/Groups/GroupController.php +++ b/app/Http/Controllers/Manage/Groups/GroupController.php @@ -2,7 +2,7 @@ namespace App\Http\Controllers\Manage\Groups; -use App\Domains\Manage\RendersManageApp; +use App\Http\Controllers\Manage\RendersManageApp; use App\Http\Controllers\WebController; use App\Models\Account; use App\Models\Group; diff --git a/app/Http/Controllers/Manage/HomeController.php b/app/Http/Controllers/Manage/HomeController.php index eeca9f9a7..fbb7aa106 100644 --- a/app/Http/Controllers/Manage/HomeController.php +++ b/app/Http/Controllers/Manage/HomeController.php @@ -2,7 +2,6 @@ namespace App\Http\Controllers\Manage; -use App\Domains\Manage\RendersManageApp; use App\Http\Controllers\WebController; use Illuminate\Http\Request; diff --git a/app/Http/Controllers/Manage/Minecraft/MinecraftConfigController.php b/app/Http/Controllers/Manage/Minecraft/MinecraftConfigController.php index b65886943..84625286f 100644 --- a/app/Http/Controllers/Manage/Minecraft/MinecraftConfigController.php +++ b/app/Http/Controllers/Manage/Minecraft/MinecraftConfigController.php @@ -2,8 +2,8 @@ namespace App\Http\Controllers\Manage\Minecraft; -use App\Domains\Manage\RendersManageApp; use App\Domains\MinecraftEventBus\Events\MinecraftConfigUpdated; +use App\Http\Controllers\Manage\RendersManageApp; use App\Http\Controllers\WebController; use App\Models\MinecraftConfig; use Illuminate\Http\Request; diff --git a/app/Http/Controllers/Manage/Minecraft/MinecraftWarpController.php b/app/Http/Controllers/Manage/Minecraft/MinecraftWarpController.php index 79989db86..ef9322405 100644 --- a/app/Http/Controllers/Manage/Minecraft/MinecraftWarpController.php +++ b/app/Http/Controllers/Manage/Minecraft/MinecraftWarpController.php @@ -3,7 +3,7 @@ namespace App\Http\Controllers\Manage\Minecraft; use App\Core\Domains\MinecraftCoordinate\ValidatesCoordinates; -use App\Domains\Manage\RendersManageApp; +use App\Http\Controllers\Manage\RendersManageApp; use App\Http\Controllers\WebController; use App\Models\MinecraftWarp; use Illuminate\Http\RedirectResponse; diff --git a/app/Http/Controllers/Manage/Players/MinecraftPlayerController.php b/app/Http/Controllers/Manage/Players/MinecraftPlayerController.php index c796906e2..7f4ba9b29 100644 --- a/app/Http/Controllers/Manage/Players/MinecraftPlayerController.php +++ b/app/Http/Controllers/Manage/Players/MinecraftPlayerController.php @@ -5,9 +5,8 @@ use App\Core\Domains\MinecraftUUID\Data\MinecraftUUID; use App\Core\Domains\MinecraftUUID\Rules\MinecraftUUIDRule; use App\Core\Domains\MinecraftUUID\UseCases\LookupMinecraftUUID; -use App\Domains\Manage\RendersManageApp; +use App\Http\Controllers\Manage\RendersManageApp; use App\Http\Controllers\WebController; -use App\Http\Filters\EqualFilter; use App\Http\Filters\LikeFilter; use App\Models\MinecraftPlayer; use Illuminate\Http\Request; diff --git a/app/Domains/Manage/RendersManageApp.php b/app/Http/Controllers/Manage/RendersManageApp.php similarity index 89% rename from app/Domains/Manage/RendersManageApp.php rename to app/Http/Controllers/Manage/RendersManageApp.php index 284e6127a..83ce56527 100644 --- a/app/Domains/Manage/RendersManageApp.php +++ b/app/Http/Controllers/Manage/RendersManageApp.php @@ -1,6 +1,6 @@ value) { return $next($query); } - $query->where($this->column, 'like', "%$this->value%"); + if (! empty($this->relationship)) { + $query->whereHas($this->relationship, function ($it) { + $it->where($this->column, 'like', "%$this->value%"); + }); + } else { + $query->where($this->column, 'like', "%$this->value%"); + } return $next($query); } diff --git a/resources/views/front/pages/banlist.blade.php b/resources/views/front/pages/bans/index.blade.php similarity index 100% rename from resources/views/front/pages/banlist.blade.php rename to resources/views/front/pages/bans/index.blade.php diff --git a/resources/views/front/pages/ban.blade.php b/resources/views/front/pages/bans/show.blade.php similarity index 100% rename from resources/views/front/pages/ban.blade.php rename to resources/views/front/pages/bans/show.blade.php From 94ca422dd65579cbfb3787bad394c4757cc5d487 Mon Sep 17 00:00:00 2001 From: Andy Saw <7236312+andyksaw@users.noreply.github.com> Date: Sat, 5 Apr 2025 18:15:25 +0900 Subject: [PATCH 2/3] ci: convert deploy action to resuable workflow (#912) --- .../install-composer-deps/action.yml | 0 .../{tasks => }/install-npm-deps/action.yml | 0 .../{tasks => }/install-php/action.yml | 0 .github/actions/recipes/deploy/action.yml | 33 --------------- .github/workflows/__deploy.yml | 41 +++++++++++++++++++ .github/workflows/deploy-dev.yml | 23 +++-------- .github/workflows/deploy-production.yml | 23 +++-------- .github/workflows/test.yml | 8 ++-- 8 files changed, 56 insertions(+), 72 deletions(-) rename .github/actions/{tasks => }/install-composer-deps/action.yml (100%) rename .github/actions/{tasks => }/install-npm-deps/action.yml (100%) rename .github/actions/{tasks => }/install-php/action.yml (100%) delete mode 100644 .github/actions/recipes/deploy/action.yml create mode 100644 .github/workflows/__deploy.yml diff --git a/.github/actions/tasks/install-composer-deps/action.yml b/.github/actions/install-composer-deps/action.yml similarity index 100% rename from .github/actions/tasks/install-composer-deps/action.yml rename to .github/actions/install-composer-deps/action.yml diff --git a/.github/actions/tasks/install-npm-deps/action.yml b/.github/actions/install-npm-deps/action.yml similarity index 100% rename from .github/actions/tasks/install-npm-deps/action.yml rename to .github/actions/install-npm-deps/action.yml diff --git a/.github/actions/tasks/install-php/action.yml b/.github/actions/install-php/action.yml similarity index 100% rename from .github/actions/tasks/install-php/action.yml rename to .github/actions/install-php/action.yml diff --git a/.github/actions/recipes/deploy/action.yml b/.github/actions/recipes/deploy/action.yml deleted file mode 100644 index 4b3703bbf..000000000 --- a/.github/actions/recipes/deploy/action.yml +++ /dev/null @@ -1,33 +0,0 @@ -name: Deploy -description: Deploys the current branch to the web server - -inputs: - keep-releases: - description: "Max number of releases stored (for rollback purposes)" - required: true - branch: - description: "Name of git branch to deploy" - required: true - -runs: - using: composite - steps: - - name: Install PHP - uses: ./.github/actions/tasks/install-php - - - name: Install Composer dependencies - shell: bash - run: composer install - - - name: Deploy - uses: deployphp/action@6242095e7207facf115ac4439760356bc52760ac - env: - DEPLOY_BRANCH: ${{ inputs.branch }} - DEPLOY_HOST: ${{ env.DEPLOY_HOST }} - DEPLOY_USER: ${{ env.DEPLOY_USER }} - DEPLOY_PATH: ${{ env.DEPLOY_PATH }} - DEPLOY_DISCORD_CHANNEL_ID: ${{ env.DEPLOY_DISCORD_CHANNEL_ID }} - DEPLOY_DISCORD_CHANNEL_TOKEN: ${{ env.DEPLOY_DISCORD_CHANNEL_TOKEN }} - with: - private-key: ${{ env.DEPLOY_PRIVATE_KEY }} - dep: "deploy -o keep_releases=${{ inputs.keep-releases }}" diff --git a/.github/workflows/__deploy.yml b/.github/workflows/__deploy.yml new file mode 100644 index 000000000..463a7fc0f --- /dev/null +++ b/.github/workflows/__deploy.yml @@ -0,0 +1,41 @@ +name: Deploy + +on: + workflow_call: + inputs: + branch: + required: true + type: string + keep-releases: + required: true + type: number + environment: + required: true + type: string + +jobs: + deploy: + runs-on: ubuntu-latest + environment: ${{ inputs.environment }} + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 + + - name: Install PHP + uses: ./.github/actions/install-php + + - name: Install Composer dependencies + run: composer install + + - name: Deploy ${{ inputs.branch }} branch + uses: deployphp/action@6242095e7207facf115ac4439760356bc52760ac + env: + DEPLOY_BRANCH: ${{ inputs.branch }} + DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }} + DEPLOY_USER: ${{ secrets.DEPLOY_USER }} + DEPLOY_PATH: ${{ secrets.DEPLOY_PATH }} + DEPLOY_DISCORD_CHANNEL_ID: ${{ secrets.DEPLOY_DISCORD_CHANNEL_ID }} + DEPLOY_DISCORD_CHANNEL_TOKEN: ${{ secrets.DEPLOY_DISCORD_CHANNEL_TOKEN }} + with: + private-key: ${{ secrets.DEPLOY_PRIVATE_KEY }} + dep: "deploy -o keep_releases=${{ inputs.keep-releases }}" + diff --git a/.github/workflows/deploy-dev.yml b/.github/workflows/deploy-dev.yml index a30a766bc..23ea48daf 100644 --- a/.github/workflows/deploy-dev.yml +++ b/.github/workflows/deploy-dev.yml @@ -12,21 +12,10 @@ concurrency: jobs: deploy: - runs-on: ubuntu-latest - environment: dev - steps: - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - - - name: Deploy dev branch - uses: ./.github/actions/recipes/deploy - env: - DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }} - DEPLOY_USER: ${{ secrets.DEPLOY_USER }} - DEPLOY_PATH: ${{ secrets.DEPLOY_PATH }} - DEPLOY_PRIVATE_KEY: ${{ secrets.DEPLOY_PRIVATE_KEY }} - DEPLOY_DISCORD_CHANNEL_ID: ${{ secrets.DEPLOY_DISCORD_CHANNEL_ID }} - DEPLOY_DISCORD_CHANNEL_TOKEN: ${{ secrets.DEPLOY_DISCORD_CHANNEL_TOKEN }} - with: - branch: main - keep-releases: 3 + uses: ./.github/workflows/__deploy.yml + secrets: inherit + with: + environment: dev + branch: main + keep-releases: 3 diff --git a/.github/workflows/deploy-production.yml b/.github/workflows/deploy-production.yml index f06a6fdf6..914d74252 100644 --- a/.github/workflows/deploy-production.yml +++ b/.github/workflows/deploy-production.yml @@ -25,23 +25,12 @@ concurrency: jobs: deploy: - runs-on: ubuntu-latest - environment: production - steps: - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - - - name: Deploy release branch - uses: ./.github/actions/recipes/deploy - env: - DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }} - DEPLOY_USER: ${{ secrets.DEPLOY_USER }} - DEPLOY_PATH: ${{ secrets.DEPLOY_PATH }} - DEPLOY_PRIVATE_KEY: ${{ secrets.DEPLOY_PRIVATE_KEY }} - DEPLOY_DISCORD_CHANNEL_ID: ${{ secrets.DEPLOY_DISCORD_CHANNEL_ID }} - DEPLOY_DISCORD_CHANNEL_TOKEN: ${{ secrets.DEPLOY_DISCORD_CHANNEL_TOKEN }} - with: - branch: release - keep-releases: 5 + uses: ./.github/workflows/__deploy.yml + secrets: inherit + with: + environment: production + branch: release + keep-releases: 5 tag: runs-on: ubuntu-latest diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d41942a97..82c67b095 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -10,7 +10,6 @@ concurrency: jobs: unit-test: runs-on: ubuntu-latest - services: mariadb: image: mariadb:11.0.5 @@ -26,21 +25,20 @@ jobs: --health-interval=10s --health-timeout=5s --health-retries=3 - steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - name: Install PHP - uses: ./.github/actions/tasks/install-php + uses: ./.github/actions/install-php - name: Install Composer dependencies - uses: ./.github/actions/tasks/install-composer-deps + uses: ./.github/actions/install-composer-deps - name: Prepare .env file run: cp .env.ci .env - name: Install npm dependencies - uses: ./.github/actions/tasks/install-npm-deps + uses: ./.github/actions/install-npm-deps - name: Calculate front-end asset hash id: get-assets-cache From ef5eafd588a36220ef958b981220ca01193d4993 Mon Sep 17 00:00:00 2001 From: Andy Saw <7236312+andyksaw@users.noreply.github.com> Date: Wed, 9 Apr 2025 23:48:11 +0900 Subject: [PATCH 3/3] feat: revamp ban appeal process and design (#801) --- app/Core/Domains/Environment/Environment.php | 4 +- .../Domains/Mojang/Api/MojangPlayerApi.php | 183 ----------------- app/Core/Domains/Mojang/Data/MojangPlayer.php | 46 ----- .../Mojang/Data/MojangPlayerNameChange.php | 61 ------ .../Mojang/Data/MojangPlayerNameHistory.php | 34 ---- .../Exceptions/EmailRequiredException.php | 15 -- .../BanAppeals/UseCases/CreateBanAppeal.php | 41 ++-- app/Domains/Bans/UseCases/LookupPlayerBan.php | 38 ---- .../Front/BanAppeal/BanAppealController.php | 91 +-------- .../BanAppeal/BanAppealFormController.php | 48 +++++ .../BanAppeal/BanAppealSearchController.php | 38 ++++ .../Front/BanAppeal/BanLookupController.php | 29 --- .../Controllers/Front/BanlistController.php | 12 +- .../Review/BanAppeals/BanAppealController.php | 1 + app/Http/Requests/StoreBanAppealRequest.php | 31 --- app/Models/BanAppeal.php | 16 +- app/Policies/BanAppealPolicy.php | 4 +- database/factories/BanAppealFactory.php | 6 +- .../2025_04_06_065852_update_ban_appeals.php | 51 +++++ resources/js/manage/Data/BanAppeal.ts | 7 +- .../review/Pages/BanAppeals/BanAppealShow.vue | 34 +++- resources/sass/front.scss | 21 ++ .../sass/front/{molecules => }/_command.scss | 5 +- .../sass/front/{molecules => }/_modal.scss | 4 +- resources/sass/front/elements/_body.scss | 17 -- resources/sass/front/elements/_button.scss | 59 ------ resources/sass/front/foundation/_colors.scss | 29 --- .../sass/front/foundation/_dimensions.scss | 6 - .../sass/front/foundation/_typography.scss | 6 - resources/sass/front/front.scss | 23 --- resources/sass/front/molecules/_form-row.scss | 50 ----- .../sass/front/molecules/_game-account.scss | 53 ----- resources/sass/front/molecules/_game-ban.scss | 117 ----------- resources/sass/front/molecules/_message.scss | 95 --------- .../sass/front/organisms/_page.form.scss | 90 --------- .../views/front/layouts/root-layout.blade.php | 2 +- .../pages/ban-appeal/_ban-history.blade.php | 33 ---- .../ban-appeal/_game-ban-empty.blade.php | 3 - .../ban-appeal/_game-ban-listing.blade.php | 65 ------ .../pages/ban-appeal/_layout-form.blade.php | 20 -- .../ban-appeal/_username-lookup.blade.php | 21 -- .../front/pages/ban-appeal/create.blade.php | 60 ------ .../pages/ban-appeal/error-no-bans.blade.php | 10 - .../pages/ban-appeal/error-pending.blade.php | 15 -- .../front/pages/ban-appeal/form.blade.php | 158 +++++++++++++++ .../front/pages/ban-appeal/index.blade.php | 112 ++++++++--- .../front/pages/ban-appeal/search.blade.php | 144 ++++++++++++++ .../front/pages/ban-appeal/show.blade.php | 185 +++++++++++------- .../views/front/pages/bans/index.blade.php | 74 +++---- .../views/front/pages/bans/show.blade.php | 14 +- .../views/front/pages/donate/donate.blade.php | 14 +- .../views/front/templates/2-col.blade.php | 19 -- .../views/front/templates/master.blade.php | 51 ----- routes/web.php | 28 ++- .../Integration/Front/BanAppealCreateTest.php | 132 ------------- tests/Integration/Front/BanAppealListTest.php | 74 ------- tests/Integration/Front/BanAppealViewTest.php | 53 ----- tests/Integration/Front/BanLookupTest.php | 98 ---------- tests/TestCase.php | 6 - vite.config.mjs | 2 +- 60 files changed, 823 insertions(+), 1935 deletions(-) delete mode 100644 app/Core/Domains/Mojang/Api/MojangPlayerApi.php delete mode 100644 app/Core/Domains/Mojang/Data/MojangPlayer.php delete mode 100644 app/Core/Domains/Mojang/Data/MojangPlayerNameChange.php delete mode 100644 app/Core/Domains/Mojang/Data/MojangPlayerNameHistory.php delete mode 100644 app/Domains/BanAppeals/Exceptions/EmailRequiredException.php delete mode 100644 app/Domains/Bans/UseCases/LookupPlayerBan.php create mode 100644 app/Http/Controllers/Front/BanAppeal/BanAppealFormController.php create mode 100644 app/Http/Controllers/Front/BanAppeal/BanAppealSearchController.php delete mode 100644 app/Http/Controllers/Front/BanAppeal/BanLookupController.php delete mode 100644 app/Http/Requests/StoreBanAppealRequest.php create mode 100644 database/migrations/2025_04_06_065852_update_ban_appeals.php create mode 100644 resources/sass/front.scss rename resources/sass/front/{molecules => }/_command.scss (53%) rename resources/sass/front/{molecules => }/_modal.scss (96%) delete mode 100644 resources/sass/front/elements/_body.scss delete mode 100644 resources/sass/front/elements/_button.scss delete mode 100644 resources/sass/front/foundation/_colors.scss delete mode 100644 resources/sass/front/foundation/_dimensions.scss delete mode 100644 resources/sass/front/foundation/_typography.scss delete mode 100644 resources/sass/front/front.scss delete mode 100644 resources/sass/front/molecules/_form-row.scss delete mode 100644 resources/sass/front/molecules/_game-account.scss delete mode 100644 resources/sass/front/molecules/_game-ban.scss delete mode 100644 resources/sass/front/molecules/_message.scss delete mode 100644 resources/sass/front/organisms/_page.form.scss delete mode 100644 resources/views/front/pages/ban-appeal/_ban-history.blade.php delete mode 100644 resources/views/front/pages/ban-appeal/_game-ban-empty.blade.php delete mode 100644 resources/views/front/pages/ban-appeal/_game-ban-listing.blade.php delete mode 100644 resources/views/front/pages/ban-appeal/_layout-form.blade.php delete mode 100644 resources/views/front/pages/ban-appeal/_username-lookup.blade.php delete mode 100644 resources/views/front/pages/ban-appeal/create.blade.php delete mode 100644 resources/views/front/pages/ban-appeal/error-no-bans.blade.php delete mode 100644 resources/views/front/pages/ban-appeal/error-pending.blade.php create mode 100644 resources/views/front/pages/ban-appeal/form.blade.php create mode 100644 resources/views/front/pages/ban-appeal/search.blade.php delete mode 100644 resources/views/front/templates/2-col.blade.php delete mode 100644 resources/views/front/templates/master.blade.php delete mode 100644 tests/Integration/Front/BanAppealCreateTest.php delete mode 100644 tests/Integration/Front/BanAppealListTest.php delete mode 100644 tests/Integration/Front/BanAppealViewTest.php delete mode 100644 tests/Integration/Front/BanLookupTest.php diff --git a/app/Core/Domains/Environment/Environment.php b/app/Core/Domains/Environment/Environment.php index 2ae64d7cf..7376aca79 100644 --- a/app/Core/Domains/Environment/Environment.php +++ b/app/Core/Domains/Environment/Environment.php @@ -4,9 +4,7 @@ final class Environment { - private function __construct() - { - } + private function __construct() {} public static function getLevel(): EnvironmentLevel { diff --git a/app/Core/Domains/Mojang/Api/MojangPlayerApi.php b/app/Core/Domains/Mojang/Api/MojangPlayerApi.php deleted file mode 100644 index eaa0c5a5d..000000000 --- a/app/Core/Domains/Mojang/Api/MojangPlayerApi.php +++ /dev/null @@ -1,183 +0,0 @@ -client->request('GET', 'https://api.mojang.com/users/profiles/minecraft/'.$name, [ - 'query' => [ - 'at' => $time, - ], - ]); - } catch (ClientException $e) { - if ($e->getCode() === 429) { - throw new TooManyRequestsException('rate_limited', 'Too many requests sent to the Mojang API'); - } - throw $e; - } - - // if no player exists, return null - if ($response->getStatusCode() === 204) { - return null; - } - - $body = json_decode($response->getBody()); - - return new MojangPlayer( - $body->id, - $body->name, - isset($body->legacy), - isset($body->demo) - ); - } - - /** - * Retrieves the UUID for the person who first registered - * the given name, regardless of who currently owns it now. - * - * @param $name - * @return MojangPlayer - * @throws TooManyRequestsException - */ - public function getOriginalOwnerUuidOf(string $name): ?MojangPlayer - { - return $this->getUuidOf($name, 0); - } - - /** - * Retrieves UUIDs for every name in the given array, in a - * single lookup. - * - * The API only allows a max of 10 names per lookup. - * - * @return MinecraftPlayer[] - * @throws TooManyRequestsException - */ - public function getUuidBatchOf(array $names): ?array - { - if (count($names) === 0 || count($names) > 10) { - throw new \Exception('Batch must contain between 1 and 10 names to search'); - } - - // Just in case a dictionary was given to us, use only the values - $names = array_values($names); - - // Strip empty names from the batch or else the API will return an error - $names = array_filter($names, fn ($name) => ! empty($name)); - - $response = null; - try { - $response = $this->client->request('POST', 'https://api.mojang.com/profiles/minecraft', [ - 'json' => $names, - ]); - } catch (ClientException $e) { - if ($e->getCode() === 429) { - throw new TooManyRequestsException('rate_limited', 'Too many requests sent to the Mojang API'); - } - throw $e; - } - - $data = json_decode($response->getBody()); - if (count($data) === 0) { - return []; - } - - return collect($data) - ->keyBy(function ($player) { - return $player->name; - }) - ->map(function ($player) { - return new MojangPlayer( - str_replace('-', '', $player->id), - $player->name, - isset($body->legacy), - isset($body->demo) - ); - }) - ->toArray(); - } - - /** - * Returns all the usernames this user has used in the past and - * the one they are using currently. - * - * The UUID must be given without hyphens. - * - * @param $uuid - * @return array|null - * @throws TooManyRequestsException - */ - public function getNameHistoryOf($uuid): ?MojangPlayerNameHistory - { - $response = null; - try { - $response = $this->client->request('GET', 'https://api.mojang.com/user/profiles/'.$uuid.'/names'); - } catch (ClientException $e) { - if ($e->getCode() === 429) { - throw new TooManyRequestsException('rate_limited', 'Too many requests sent to the Mojang API'); - } - throw $e; - } - - // if no player exists, return null - if ($response->getStatusCode() === 204) { - return null; - } - - return new MojangPlayerNameHistory( - json_decode($response->getBody()) - ); - } - - /** - * Returns all the usernames this user has used in the past and - * the one they are using currently. - * - * Performs two lookups as the original API can only be queried using an UUID. - * - * @param $name - * @return array|null - * @throws TooManyRequestsException - */ - public function getNameHistoryByNameOf($name): ?MojangPlayerNameHistory - { - $player = $this->getUuidOf($name); - if ($player !== null) { - return $this->getNameHistoryOf($player->getUuid()); - } - - return null; - } -} diff --git a/app/Core/Domains/Mojang/Data/MojangPlayer.php b/app/Core/Domains/Mojang/Data/MojangPlayer.php deleted file mode 100644 index eb2e31192..000000000 --- a/app/Core/Domains/Mojang/Data/MojangPlayer.php +++ /dev/null @@ -1,46 +0,0 @@ -uuid; - } - - /** - * Player's in-game name. - */ - public function getAlias(): string - { - return $this->alias; - } - - /** - * Whether the account has not migrated to a Mojang account. - */ - public function isLegacyAccount(): bool - { - return $this->isLegacyAccount; - } - - /** - * Whether the account is a free account (ie. unpaid). - */ - public function isDemoAccount(): bool - { - return $this->isDemoAccount; - } -} diff --git a/app/Core/Domains/Mojang/Data/MojangPlayerNameChange.php b/app/Core/Domains/Mojang/Data/MojangPlayerNameChange.php deleted file mode 100644 index 126549de8..000000000 --- a/app/Core/Domains/Mojang/Data/MojangPlayerNameChange.php +++ /dev/null @@ -1,61 +0,0 @@ -alias = $alias; - $this->changedToAt = $changedToAt; - $this->isCurrent = $isCurrent; - } - - public function getAlias(): string - { - return $this->alias; - } - - public function getChangeDate(): ?int - { - if ($this->changedToAt !== null) { - return $this->changedToAt / 1000; - } - - return null; - } - - public function isCurrentAlias(): bool - { - return $this->isCurrent; - } - - public function isOriginalAlias(): bool - { - return $this->changedToAt === null; - } -} diff --git a/app/Core/Domains/Mojang/Data/MojangPlayerNameHistory.php b/app/Core/Domains/Mojang/Data/MojangPlayerNameHistory.php deleted file mode 100644 index 2b191c0ad..000000000 --- a/app/Core/Domains/Mojang/Data/MojangPlayerNameHistory.php +++ /dev/null @@ -1,34 +0,0 @@ - - */ - private $nameChanges = []; - - public function __construct(array $nameChanges) - { - for ($i = 0; $i < count($nameChanges); $i++) { - $nameChange = $nameChanges[$i]; - $this->nameChanges[] = new MojangPlayerNameChange( - $nameChange->name, - property_exists($nameChange, 'changedToAt') ? $nameChange->changedToAt : null, - $i + 1 === count($nameChanges) - ); - } - } - - /** - * @return array| Status | -Reason | -Banned By | -Banned At | -Expires | -
|---|---|---|---|---|
| {{ $ban->isActive() ? 'Active' : 'Removed' }} | -{{ $ban->reason ?? 'No Reason Given' }} | -
- @if($ban->banner_player_id != null && !empty($ban->bannerPlayer->alias))
- |
- - {{ $ban->created_at->format('j M Y H:i') }} - | -- {{ $ban->expires_at?->format('j M Y H:i') ?? 'Never' }} - | -
- If you have been wrongfully banned, please post your request, and we will investigate the matter. Alternatively, if you are simply seeking a second chance, you may plead your case for consideration. -
-- Please fill out all fields honestly. -
---@endsection - - diff --git a/resources/views/front/pages/ban-appeal/_username-lookup.blade.php b/resources/views/front/pages/ban-appeal/_username-lookup.blade.php deleted file mode 100644 index dff949e0e..000000000 --- a/resources/views/front/pages/ban-appeal/_username-lookup.blade.php +++ /dev/null @@ -1,21 +0,0 @@ - diff --git a/resources/views/front/pages/ban-appeal/create.blade.php b/resources/views/front/pages/ban-appeal/create.blade.php deleted file mode 100644 index f13ed325e..000000000 --- a/resources/views/front/pages/ban-appeal/create.blade.php +++ /dev/null @@ -1,60 +0,0 @@ -@extends('front.pages.ban-appeal._layout-form') - -@section('col-2') -WARNING
- Abuse of the ban appeal system will result in your access being revoked. -
Below is a list of your current ban and any previous bans.
- @include('front.pages.ban-appeal._ban-history') -+ Please fill-in all fields with appropriate detail. Appeals with false or insufficient detail will likely be denied. +
++ If you have been wrongfully banned, please let us know so we can investigate the matter. + Alternatively, if you are seeking a second chance, you may plead your case for consideration. +
+If the ban doesn't appear above, try searching manually. Enter your current Minecraft - username.
- - @include('front.pages.ban-appeal._username-lookup') -To appeal a ban, sign in to your PCB account. Alternatively, you may appeal as a guest.
- Sign In -To start your appeal, enter the current username of your Minecraft account
- - @include('front.pages.ban-appeal._username-lookup') -+ Find and select the ban you wish to appeal. If you have trouble locating it, you can still fill out the form manually. +
+| Player Name | +Reason | +Ban Date | ++ |
|---|---|---|---|
|
+ |
+ + {{ $ban->reason ?? "-" }} + | ++ {{ $ban->created_at->format('j M Y H:i') }} + | +
+ |
+
- View the status of your ban appeal. You will be emailed with any updates. -
-- Please note that you cannot submit another appeal until this appeal has been resolved. -
-@endsection +@section('body') +Your appeal has been considered, and your ban has been reduced to a temporary ban.
-You will be unbanned on {{ $banAppeal->gamePlayerBan->expires_at }}.
+ + - @break - @case(\App\Domains\BanAppeals\Data\BanAppealStatus::DENIED) -