From ae4be6fbda2a185723e1f1a0b21fddbf63edcc27 Mon Sep 17 00:00:00 2001 From: Pig Fang Date: Sun, 22 Dec 2019 17:28:55 +0800 Subject: [PATCH] Refactor static routes --- app/Http/Controllers/TextureController.php | 19 +------ app/Http/View/Composers/UserMenuComposer.php | 2 +- app/Http/View/Composers/UserPanelComposer.php | 2 +- .../src/components/ApplyToPlayerDialog.vue | 2 +- .../components/ApplyToPlayerDialog.test.ts | 2 +- .../assets/tests/views/user/Closet.test.ts | 2 +- routes/static.php | 23 ++------- .../ControllersTest/TextureControllerTest.php | 50 +++---------------- .../ControllersTest/UserControllerTest.php | 2 +- 9 files changed, 19 insertions(+), 85 deletions(-) diff --git a/app/Http/Controllers/TextureController.php b/app/Http/Controllers/TextureController.php index 09db14d3..459d2e1e 100644 --- a/app/Http/Controllers/TextureController.php +++ b/app/Http/Controllers/TextureController.php @@ -122,14 +122,9 @@ class TextureController extends Controller return response()->file(storage_path('static_textures/avatar.png')); } - public function avatarByTidWithSize($size, $tid) + public function avatar($uid, $size = 128) { - return $this->avatarByTid($tid, $size); - } - - public function avatar($base64_email, $size = 128) - { - $user = User::where('email', base64_decode($base64_email))->first(); + $user = User::find($uid); if ($user) { return $this->avatarByTid($user->avatar, $size); @@ -138,11 +133,6 @@ class TextureController extends Controller return response()->file(storage_path('static_textures/avatar.png')); } - public function avatarWithSize($size, $base64_email) - { - return $this->avatar($base64_email, $size); - } - public function preview($tid, $size = 250) { if ($t = Texture::find($tid)) { @@ -177,11 +167,6 @@ class TextureController extends Controller return response()->file(storage_path('static_textures/broken.png')); } - public function previewWithSize($size, $tid) - { - return $this->preview($tid, $size); - } - public function raw($tid) { abort_unless(option('allow_downloading_texture'), 404); diff --git a/app/Http/View/Composers/UserMenuComposer.php b/app/Http/View/Composers/UserMenuComposer.php index 8862721a..531236b4 100644 --- a/app/Http/View/Composers/UserMenuComposer.php +++ b/app/Http/View/Composers/UserMenuComposer.php @@ -26,7 +26,7 @@ class UserMenuComposer $email = base64_encode($user->email); $avatar = $this->filter->apply( 'user_avatar', - url('avatar/25/'.$email.'.png?tid='.$user->avatar), + url('/avatar/user/'.$user->uid.'/25'), [$user] ); diff --git a/app/Http/View/Composers/UserPanelComposer.php b/app/Http/View/Composers/UserPanelComposer.php index 3098408d..32dd76aa 100644 --- a/app/Http/View/Composers/UserPanelComposer.php +++ b/app/Http/View/Composers/UserPanelComposer.php @@ -25,7 +25,7 @@ class UserPanelComposer $user = auth()->user(); $avatar = $this->filter->apply( 'user_avatar', - url('avatar/45/'.base64_encode($user->email).'.png?tid='.$user->avatar), + url('/avatar/user/'.$user->uid.'/45'), [$user] ); diff --git a/resources/assets/src/components/ApplyToPlayerDialog.vue b/resources/assets/src/components/ApplyToPlayerDialog.vue index dc8c502f..20c23cc8 100644 --- a/resources/assets/src/components/ApplyToPlayerDialog.vue +++ b/resources/assets/src/components/ApplyToPlayerDialog.vue @@ -92,7 +92,7 @@ export default { } }, avatarUrl(player) { - return `${blessing.base_url}/avatar/35/${player.tid_skin}` + return `${blessing.base_url}/avatar/${player.tid_skin}/35` }, }, } diff --git a/resources/assets/tests/components/ApplyToPlayerDialog.test.ts b/resources/assets/tests/components/ApplyToPlayerDialog.test.ts index 51d7ba30..0ba2b8a5 100644 --- a/resources/assets/tests/components/ApplyToPlayerDialog.test.ts +++ b/resources/assets/tests/components/ApplyToPlayerDialog.test.ts @@ -48,5 +48,5 @@ test('compute avatar URL', () => { // eslint-disable-next-line camelcase const wrapper = mount(ApplyToPlayerDialog) const { avatarUrl } = wrapper.vm - expect(avatarUrl({ tid_skin: 1 })).toBe('/avatar/35/1') + expect(avatarUrl({ tid_skin: 1 })).toBe('/avatar/1/35') }) diff --git a/resources/assets/tests/views/user/Closet.test.ts b/resources/assets/tests/views/user/Closet.test.ts index 5a83ced7..3630a1e3 100644 --- a/resources/assets/tests/views/user/Closet.test.ts +++ b/resources/assets/tests/views/user/Closet.test.ts @@ -210,7 +210,7 @@ test('apply texture', async () => { button.trigger('click') await flushPromises() expect(wrapper.find('input[type="radio"]').attributes('value')).toBe('1') - expect(wrapper.find('.model-label > img').attributes('src')).toBe('/avatar/35/10') + expect(wrapper.find('.model-label > img').attributes('src')).toBe('/avatar/10/35') expect(wrapper.find('.modal-body').text()).toContain('name') jest.runAllTimers() }) diff --git a/routes/static.php b/routes/static.php index 7a374546..9a2335fa 100644 --- a/routes/static.php +++ b/routes/static.php @@ -1,19 +1,5 @@ 'player'], function () { // Json profile Route::get('/{player_name}.json', 'TextureController@json'); @@ -27,12 +13,9 @@ Route::get('/textures/{hash}', 'TextureController@texture'); Route::get('/{api}/textures/{hash}', 'TextureController@textureWithApi')->where('api', 'usm|csl'); Route::get('/avatar/player/{size}/{name}.png', 'TextureController@avatarByPlayer'); -Route::get('/avatar/{base64_email}.png', 'TextureController@avatar'); -Route::get('/avatar/{size}/{base64_email}.png', 'TextureController@avatarWithSize'); -Route::get('/avatar/{tid}', 'TextureController@avatarByTid'); -Route::get('/avatar/{size}/{tid}', 'TextureController@avatarByTidWithSize'); +Route::get('/avatar/user/{uid}/{size?}', 'TextureController@avatar'); +Route::get('/avatar/{tid}/{size?}', 'TextureController@avatarByTid'); Route::get('/raw/{tid}.png', 'TextureController@raw'); -Route::get('/preview/{tid}.png', 'TextureController@preview'); -Route::get('/preview/{size}/{tid}.png', 'TextureController@previewWithSize'); +Route::get('/preview/{tid}/{size?}', 'TextureController@preview'); diff --git a/tests/HttpTest/ControllersTest/TextureControllerTest.php b/tests/HttpTest/ControllersTest/TextureControllerTest.php index de304a42..4b7cd0ed 100644 --- a/tests/HttpTest/ControllersTest/TextureControllerTest.php +++ b/tests/HttpTest/ControllersTest/TextureControllerTest.php @@ -190,19 +190,12 @@ class TextureControllerTest extends TestCase $this->get('/avatar/1')->assertHeader('Content-Type', 'image/png'); } - public function testAvatarByTidWithSize() - { - $this->get('/avatar/50/1')->assertHeader('Content-Type', 'image/png'); - } - public function testAvatar() { Event::fake(); Storage::fake('textures'); - $base64_email = base64_encode('a@b.c'); - $this->get("/avatar/$base64_email.png") - ->assertHeader('Content-Type', 'image/png'); + $this->get("/avatar/5.png")->assertHeader('Content-Type', 'image/png'); $steve = factory(Texture::class)->create(); $png = base64_decode(\App\Http\Controllers\TextureController::getDefaultSteveSkin()); @@ -215,36 +208,15 @@ class TextureControllerTest extends TestCase ->once() ->andReturn(imagecreatefromstring($png)); - $this->get('/avatar/'.base64_encode($user->email).'.png') + $this->get('/avatar/user/'.$user->uid) ->assertHeader('Content-Type', 'image/png'); Event::assertDispatched(\App\Events\GetAvatarPreview::class); Storage::shouldReceive('disk')->with('textures')->andThrow(new Exception()); - $this->get('/avatar/'.base64_encode($user->email).'.png') + $this->get('/avatar/user/'.$user->uid.'/45') ->assertHeader('Content-Type', 'image/png'); } - public function testAvatarWithSize() - { - Event::fake(); - Storage::fake('textures'); - - $steve = factory(Texture::class)->create(); - $png = base64_decode(\App\Http\Controllers\TextureController::getDefaultSteveSkin()); - Storage::disk('textures')->put($steve->hash, $png); - - $user = factory(User::class)->create(['avatar' => $steve->tid]); - - $mock = Mockery::mock('overload:Minecraft'); - $mock->shouldReceive('generateAvatarFromSkin') - ->once() - ->andReturn(imagecreatefromstring($png)); - - $this->get('/avatar/50/'.base64_encode($user->email).'.png') - ->assertHeader('Content-Type', 'image/png'); - Event::fake(\App\Events\GetAvatarPreview::class); - } - public function testPreview() { Event::fake(); @@ -253,10 +225,10 @@ class TextureControllerTest extends TestCase $steve = factory(Texture::class)->create(); $cape = factory(Texture::class, 'cape')->create(); - $this->get('/preview/0.png') + $this->get('/preview/0') ->assertHeader('Content-Type', 'image/png'); - $this->get("/preview/{$steve->tid}.png") + $this->get("/preview/{$steve->tid}") ->assertHeader('Content-Type', 'image/png'); $png = base64_decode(\App\Http\Controllers\TextureController::getDefaultSteveSkin()); @@ -267,24 +239,18 @@ class TextureControllerTest extends TestCase $mock->shouldReceive('generatePreviewFromSkin') ->once() ->andReturn(imagecreatefromstring($png)); - $this->get("/preview/{$steve->tid}.png") + $this->get("/preview/{$steve->tid}/56") ->assertHeader('Content-Type', 'image/png'); Event::fake(\App\Events\GetSkinPreview::class); $mock->shouldReceive('generatePreviewFromCape') ->once() ->andReturn(imagecreatefromstring($png)); - $this->get("/preview/{$cape->tid}.png") + $this->get("/preview/{$cape->tid}") ->assertHeader('Content-Type', 'image/png'); Storage::shouldReceive('disk')->with('textures')->andThrow(new Exception()); - $this->get("/preview/{$steve->tid}.png") - ->assertHeader('Content-Type', 'image/png'); - } - - public function testPreviewWithSize() - { - $this->get('/preview/200/0.png') + $this->get("/preview/{$steve->tid}") ->assertHeader('Content-Type', 'image/png'); } diff --git a/tests/HttpTest/ControllersTest/UserControllerTest.php b/tests/HttpTest/ControllersTest/UserControllerTest.php index 30cbc63e..4a273255 100644 --- a/tests/HttpTest/ControllersTest/UserControllerTest.php +++ b/tests/HttpTest/ControllersTest/UserControllerTest.php @@ -50,7 +50,7 @@ class UserControllerTest extends TestCase ->assertSee((string) $user->score); $filter->assertApplied('grid:user.index'); $filter->assertApplied('user_avatar', function ($url, $user) use ($uid) { - $this->assertTrue(Str::endsWith($url, 'tid=0')); + $this->assertTrue(Str::contains($url, '/avatar/user/'.$uid)); $this->assertEquals($uid, $user->uid); return true;