mirror of
				https://github.com/elyby/accounts.git
				synced 2025-05-31 14:11:46 +05:30 
			
		
		
		
	Add a redirect for new Usernames to UUIDs endpoint (#29)
* fix: add redirect for new "Usernames to UUIDs" endpoint location "As of 23w42a, the endpoint moved to: 'POST https://sessionserver.mojang.com/session/minecraft/profile/lookup/bulk/byname' " https://wiki.vg/Mojang_API#Usernames_to_UUIDs * add a redirect for authlib-injector too Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com> * revert: .gitignore Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com> * tests: pass new URL to existing tests Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com> * review: address requested changes Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com> * style: add type hints to MinecraftProfilesCest functions too Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com> --------- Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com>
This commit is contained in:
		| @@ -41,6 +41,7 @@ return [ | ||||
|     '/minecraft/session/hasJoined' => 'session/session/has-joined', | ||||
|     '/minecraft/session/legacy/hasJoined' => 'session/session/has-joined-legacy', | ||||
|     '/minecraft/session/profile/<uuid>' => 'session/session/profile', | ||||
|     'POST /minecraft/session/profile/lookup/bulk/byname' => 'mojang/api/uuids-by-usernames', | ||||
|  | ||||
|     // Mojang API module routes | ||||
|     '/mojang/profiles/<username>' => 'mojang/api/uuid-by-username', | ||||
| @@ -54,4 +55,5 @@ return [ | ||||
|     '/authlib-injector/sessionserver/session/minecraft/hasJoined' => 'session/session/has-joined', | ||||
|     '/authlib-injector/sessionserver/session/minecraft/profile/<uuid>' => 'session/session/profile', | ||||
|     '/authlib-injector/api/profiles/minecraft' => 'mojang/api/uuids-by-usernames', | ||||
|     '/authlib-injector/sessionserver/session/minecraft/profile/lookup/bulk/byname' => 'mojang/api/uuids-by-usernames', | ||||
| ]; | ||||
|   | ||||
| @@ -11,9 +11,4 @@ class MojangApiRoute extends BasePage { | ||||
|     public function usernamesByUuid($uuid) { | ||||
|         $this->getActor()->sendGET("/api/mojang/profiles/{$uuid}/names"); | ||||
|     } | ||||
|  | ||||
|     public function uuidsByUsernames($uuids) { | ||||
|         $this->getActor()->sendPOST('/api/mojang/profiles', $uuids); | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -4,11 +4,15 @@ declare(strict_types=1); | ||||
| namespace api\tests\functional\authlibInjector; | ||||
|  | ||||
| use api\tests\FunctionalTester; | ||||
| use Codeception\Example; | ||||
|  | ||||
| final class MinecraftProfilesCest { | ||||
|  | ||||
|     public function geUuidByOneUsername(FunctionalTester $I) { | ||||
|         $I->sendPOST('/api/authlib-injector/api/profiles/minecraft', ['Admin']); | ||||
|     /** | ||||
|      * @dataProvider bulkProfilesEndpoints | ||||
|      */ | ||||
|     public function getUuidByOneUsername(FunctionalTester $I, Example $url) : void { | ||||
|         $I->sendPOST($url[0], ['Admin']); | ||||
|         $I->canSeeResponseCodeIs(200); | ||||
|         $I->canSeeResponseContainsJson([ | ||||
|             [ | ||||
| @@ -18,21 +22,32 @@ final class MinecraftProfilesCest { | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     public function getUuidsByUsernames(FunctionalTester $I) { | ||||
|         $I->sendPOST('/api/authlib-injector/api/profiles/minecraft', ['Admin', 'AccWithOldPassword', 'Notch']); | ||||
|     /** | ||||
|      * @dataProvider bulkProfilesEndpoints | ||||
|      */ | ||||
|     public function getUuidsByUsernames(FunctionalTester $I, Example $url) : void { | ||||
|         $I->sendPOST($url[0], ['Admin', 'AccWithOldPassword', 'Notch']); | ||||
|         $this->validateFewValidUsernames($I); | ||||
|     } | ||||
|  | ||||
|     public function getUuidsByUsernamesWithPostString(FunctionalTester $I) { | ||||
|  | ||||
|     /** | ||||
|      * @dataProvider bulkProfilesEndpoints | ||||
|      */ | ||||
|     public function getUuidsByUsernamesWithPostString(FunctionalTester $I, Example $url) : void { | ||||
|         $I->sendPOST( | ||||
|             '/api/authlib-injector/api/profiles/minecraft', | ||||
|             $url[0], | ||||
|             json_encode(['Admin', 'AccWithOldPassword', 'Notch']), | ||||
|         ); | ||||
|         $this->validateFewValidUsernames($I); | ||||
|     } | ||||
|  | ||||
|     public function getUuidsByPartialNonexistentUsernames(FunctionalTester $I) { | ||||
|         $I->sendPOST('/api/authlib-injector/api/profiles/minecraft', ['Admin', 'DeletedAccount', 'not-exists-user']); | ||||
|  | ||||
|     /** | ||||
|      * @dataProvider bulkProfilesEndpoints | ||||
|      */ | ||||
|     public function getUuidsByPartialNonexistentUsernames(FunctionalTester $I, Example $url) : void { | ||||
|         $I->sendPOST($url[0], ['Admin', 'DeletedAccount', 'not-exists-user']); | ||||
|         $I->canSeeResponseCodeIs(200); | ||||
|         $I->canSeeResponseContainsJson([ | ||||
|             [ | ||||
| @@ -44,20 +59,28 @@ final class MinecraftProfilesCest { | ||||
|         $I->cantSeeResponseJsonMatchesJsonPath('$.[?(@.name="not-exists-user")]'); | ||||
|     } | ||||
|  | ||||
|     public function passAllNonexistentUsernames(FunctionalTester $I) { | ||||
|         $I->sendPOST('/api/authlib-injector/api/profiles/minecraft', ['not-exists-1', 'not-exists-2']); | ||||
|  | ||||
|     /** | ||||
|      * @dataProvider bulkProfilesEndpoints | ||||
|      */ | ||||
|     public function passAllNonexistentUsernames(FunctionalTester $I, Example $url) : void { | ||||
|         $I->sendPOST($url[0], ['not-exists-1', 'not-exists-2']); | ||||
|         $I->canSeeResponseCodeIs(200); | ||||
|         $I->canSeeResponseIsJson(); | ||||
|         $I->canSeeResponseEquals('[]'); | ||||
|     } | ||||
|  | ||||
|     public function passTooManyUsernames(FunctionalTester $I) { | ||||
|  | ||||
|     /** | ||||
|      * @dataProvider bulkProfilesEndpoints | ||||
|      */ | ||||
|     public function passTooManyUsernames(FunctionalTester $I, Example $url) : void { | ||||
|         $usernames = []; | ||||
|         for ($i = 0; $i < 150; $i++) { | ||||
|             $usernames[] = random_bytes(10); | ||||
|         } | ||||
|  | ||||
|         $I->sendPOST('/api/authlib-injector/api/profiles/minecraft', $usernames); | ||||
|         $I->sendPOST($url[0], $usernames); | ||||
|         $I->canSeeResponseCodeIs(400); | ||||
|         $I->canSeeResponseContainsJson([ | ||||
|             'error' => 'IllegalArgumentException', | ||||
| @@ -65,8 +88,12 @@ final class MinecraftProfilesCest { | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     public function passEmptyUsername(FunctionalTester $I) { | ||||
|         $I->sendPOST('/api/authlib-injector/api/profiles/minecraft', ['Admin', '']); | ||||
|  | ||||
|     /** | ||||
|      * @dataProvider bulkProfilesEndpoints | ||||
|      */ | ||||
|     public function passEmptyUsername(FunctionalTester $I, Example $url) : void { | ||||
|         $I->sendPOST($url[0], ['Admin', '']); | ||||
|         $I->canSeeResponseCodeIs(400); | ||||
|         $I->canSeeResponseContainsJson([ | ||||
|             'error' => 'IllegalArgumentException', | ||||
| @@ -74,8 +101,12 @@ final class MinecraftProfilesCest { | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     public function passEmptyField(FunctionalTester $I) { | ||||
|         $I->sendPOST('/api/authlib-injector/api/profiles/minecraft', []); | ||||
|  | ||||
|     /** | ||||
|      * @dataProvider bulkProfilesEndpoints | ||||
|      */ | ||||
|     public function passEmptyField(FunctionalTester $I, Example $url) : void { | ||||
|         $I->sendPOST($url[0], []); | ||||
|         $I->canSeeResponseCodeIs(400); | ||||
|         $I->canSeeResponseContainsJson([ | ||||
|             'error' => 'IllegalArgumentException', | ||||
| @@ -83,7 +114,7 @@ final class MinecraftProfilesCest { | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     private function validateFewValidUsernames(FunctionalTester $I) { | ||||
|     private function validateFewValidUsernames(FunctionalTester $I) : void { | ||||
|         $I->canSeeResponseCodeIs(200); | ||||
|         $I->canSeeResponseIsJson(); | ||||
|         $I->canSeeResponseContainsJson([ | ||||
| @@ -102,4 +133,11 @@ final class MinecraftProfilesCest { | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     private function bulkProfilesEndpoints() : array { | ||||
|         return [ | ||||
|             ["/api/authlib-injector/api/profiles/minecraft"], | ||||
|             ["/api/authlib-injector/sessionserver/session/minecraft/profile/lookup/bulk/byname"] | ||||
|         ]; | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -1,23 +1,16 @@ | ||||
| <?php | ||||
| namespace api\tests\functional\authserver; | ||||
|  | ||||
| use api\tests\_pages\MojangApiRoute; | ||||
| use api\tests\FunctionalTester; | ||||
| use Codeception\Example; | ||||
|  | ||||
| class UsernamesToUuidsCest { | ||||
|  | ||||
|     /** | ||||
|      * @var MojangApiRoute | ||||
|      * @dataProvider bulkProfilesEndpoints | ||||
|      */ | ||||
|     private $route; | ||||
|  | ||||
|     public function _before(FunctionalTester $I) { | ||||
|         $this->route = new MojangApiRoute($I); | ||||
|     } | ||||
|  | ||||
|     public function geUuidByOneUsername(FunctionalTester $I) { | ||||
|     public function getUuidByOneUsername(FunctionalTester $I, Example $url) : void { | ||||
|         $I->wantTo('get uuid by one username'); | ||||
|         $this->route->uuidsByUsernames(['Admin']); | ||||
|         $I->sendPost($url[0], ['Admin']); | ||||
|         $I->canSeeResponseCodeIs(200); | ||||
|         $I->canSeeResponseIsJson(); | ||||
|         $I->canSeeResponseContainsJson([ | ||||
| @@ -28,21 +21,30 @@ class UsernamesToUuidsCest { | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     public function getUuidsByUsernames(FunctionalTester $I) { | ||||
|     /** | ||||
|      * @dataProvider bulkProfilesEndpoints | ||||
|      */ | ||||
|     public function getUuidsByUsernames(FunctionalTester $I, Example $url) : void { | ||||
|         $I->wantTo('get uuids by few usernames'); | ||||
|         $this->route->uuidsByUsernames(['Admin', 'AccWithOldPassword', 'Notch']); | ||||
|         $I->sendPost($url[0], ['Admin', 'AccWithOldPassword', 'Notch']); | ||||
|         $this->validateFewValidUsernames($I); | ||||
|     } | ||||
|  | ||||
|     public function getUuidsByUsernamesWithPostString(FunctionalTester $I) { | ||||
|     /** | ||||
|      * @dataProvider bulkProfilesEndpoints | ||||
|      */ | ||||
|     public function getUuidsByUsernamesWithPostString(FunctionalTester $I, Example $url) : void { | ||||
|         $I->wantTo('get uuids by few usernames'); | ||||
|         $this->route->uuidsByUsernames(json_encode(['Admin', 'AccWithOldPassword', 'Notch'])); | ||||
|         $I->sendPost($url[0], json_encode(['Admin', 'AccWithOldPassword', 'Notch'])); | ||||
|         $this->validateFewValidUsernames($I); | ||||
|     } | ||||
|  | ||||
|     public function getUuidsByPartialNonexistentUsernames(FunctionalTester $I) { | ||||
|     /** | ||||
|      * @dataProvider bulkProfilesEndpoints | ||||
|      */ | ||||
|     public function getUuidsByPartialNonexistentUsernames(FunctionalTester $I, Example $url) : void { | ||||
|         $I->wantTo('get uuids by few usernames and some nonexistent'); | ||||
|         $this->route->uuidsByUsernames(['Admin', 'DeletedAccount', 'not-exists-user']); | ||||
|         $I->sendPost($url[0], ['Admin', 'DeletedAccount', 'not-exists-user']); | ||||
|         $I->canSeeResponseCodeIs(200); | ||||
|         $I->canSeeResponseIsJson(); | ||||
|         $I->canSeeResponseContainsJson([ | ||||
| @@ -55,22 +57,28 @@ class UsernamesToUuidsCest { | ||||
|         $I->cantSeeResponseJsonMatchesJsonPath('$.[?(@.name="not-exists-user")]'); | ||||
|     } | ||||
|  | ||||
|     public function passAllNonexistentUsernames(FunctionalTester $I) { | ||||
|     /** | ||||
|      * @dataProvider bulkProfilesEndpoints | ||||
|      */ | ||||
|     public function passAllNonexistentUsernames(FunctionalTester $I, Example $url) : void { | ||||
|         $I->wantTo('get specific response when pass all nonexistent usernames'); | ||||
|         $this->route->uuidsByUsernames(['not-exists-1', 'not-exists-2']); | ||||
|         $I->sendPost($url[0], ['not-exists-1', 'not-exists-2']); | ||||
|         $I->canSeeResponseCodeIs(200); | ||||
|         $I->canSeeResponseIsJson(); | ||||
|         $I->canSeeResponseContainsJson([]); | ||||
|     } | ||||
|  | ||||
|     public function passTooManyUsernames(FunctionalTester $I) { | ||||
|     /** | ||||
|      * @dataProvider bulkProfilesEndpoints | ||||
|      */ | ||||
|     public function passTooManyUsernames(FunctionalTester $I, Example $url) : void { | ||||
|         $I->wantTo('get specific response when pass too many usernames'); | ||||
|         $usernames = []; | ||||
|         for ($i = 0; $i < 150; $i++) { | ||||
|             $usernames[] = random_bytes(10); | ||||
|         } | ||||
|  | ||||
|         $this->route->uuidsByUsernames($usernames); | ||||
|         $I->sendPost($url[0], $usernames); | ||||
|         $I->canSeeResponseCodeIs(400); | ||||
|         $I->canSeeResponseIsJson(); | ||||
|         $I->canSeeResponseContainsJson([ | ||||
| @@ -79,9 +87,12 @@ class UsernamesToUuidsCest { | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     public function passEmptyUsername(FunctionalTester $I) { | ||||
|     /** | ||||
|      * @dataProvider bulkProfilesEndpoints | ||||
|      */ | ||||
|     public function passEmptyUsername(FunctionalTester $I, Example $url) : void { | ||||
|         $I->wantTo('get specific response when pass empty username'); | ||||
|         $this->route->uuidsByUsernames(['Admin', '']); | ||||
|         $I->sendPost($url[0], ['Admin', '']); | ||||
|         $I->canSeeResponseCodeIs(400); | ||||
|         $I->canSeeResponseIsJson(); | ||||
|         $I->canSeeResponseContainsJson([ | ||||
| @@ -90,9 +101,12 @@ class UsernamesToUuidsCest { | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     public function passEmptyField(FunctionalTester $I) { | ||||
|     /** | ||||
|      * @dataProvider bulkProfilesEndpoints | ||||
|      */ | ||||
|     public function passEmptyField(FunctionalTester $I, Example $url) : void { | ||||
|         $I->wantTo('get response when pass empty array'); | ||||
|         $this->route->uuidsByUsernames([]); | ||||
|         $I->sendPost($url[0], []); | ||||
|         $I->canSeeResponseCodeIs(400); | ||||
|         $I->canSeeResponseIsJson(); | ||||
|         $I->canSeeResponseContainsJson([ | ||||
| @@ -101,7 +115,7 @@ class UsernamesToUuidsCest { | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     private function validateFewValidUsernames(FunctionalTester $I) { | ||||
|     private function validateFewValidUsernames(FunctionalTester $I) : void { | ||||
|         $I->canSeeResponseCodeIs(200); | ||||
|         $I->canSeeResponseIsJson(); | ||||
|         $I->canSeeResponseContainsJson([ | ||||
| @@ -120,4 +134,10 @@ class UsernamesToUuidsCest { | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     private function bulkProfilesEndpoints() : array { | ||||
|         return [ | ||||
|             ["/api/authlib-injector/api/profiles/minecraft"], | ||||
|             ["/api/authlib-injector/sessionserver/session/minecraft/profile/lookup/bulk/byname"] | ||||
|         ]; | ||||
|     } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user