diff --git a/app/Http/Controllers/Api/OAuth2/OAuth2UserApiController.php b/app/Http/Controllers/Api/OAuth2/OAuth2UserApiController.php index f15a0290..fd0b744f 100644 --- a/app/Http/Controllers/Api/OAuth2/OAuth2UserApiController.php +++ b/app/Http/Controllers/Api/OAuth2/OAuth2UserApiController.php @@ -332,6 +332,25 @@ public function get($id) } } + /** + * @param $id + * @return \Illuminate\Http\JsonResponse|mixed + */ + public function getV2($id) + { + return $this->processRequest(function() use($id) { + $user = $this->repository->getById(intval($id)); + if (is_null($user)) { + throw new EntityNotFoundException(); + } + return $this->ok(SerializerRegistry::getInstance() + ->getSerializer($user, SerializerRegistry::SerializerType_Private) + ->serialize( + Request::input("expand", '') + )); + }); + } + /** * @param $user_id * @return JsonResponse|mixed diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 6876b5f0..e36d12c2 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -53,6 +53,10 @@ class Kernel extends HttpKernel 'ssl', 'oauth2.endpoint', ], + 'api_v2' => [ + 'ssl', + 'oauth2.endpoint', + ], ]; /** diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php index b81b2ffa..e964c594 100644 --- a/app/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -115,6 +115,11 @@ protected function mapApiRoutes() ->namespace('App\Http\Controllers\Api\OAuth2') ->prefix('api/v1') ->group(base_path('routes/api.php')); + + Route::middleware('api_v2') + ->namespace('App\Http\Controllers\Api\OAuth2') + ->prefix('api/v2') + ->group(base_path('routes/api_v2.php')); } } diff --git a/database/migrations/Version20250807173401.php b/database/migrations/Version20250807173401.php new file mode 100644 index 00000000..00255e7b --- /dev/null +++ b/database/migrations/Version20250807173401.php @@ -0,0 +1,53 @@ + 'get-user-by-id-v2', + 'active' => true, + 'route' => '/api/v2/users/{id}', + 'http_method' => 'GET', + 'scopes' => [ + \App\libs\OAuth2\IUserScopes::ReadAll + ], + ], + ]); + } + + /** + * @param Schema $schema + */ + public function down(Schema $schema):void + { + + } +} diff --git a/database/seeds/ApiEndpointSeeder.php b/database/seeds/ApiEndpointSeeder.php index 51050a2e..647930d5 100644 --- a/database/seeds/ApiEndpointSeeder.php +++ b/database/seeds/ApiEndpointSeeder.php @@ -85,6 +85,15 @@ private function seedUsersEndpoints() \App\libs\OAuth2\IUserScopes::ReadAll ], ], + [ + 'name' => 'get-user-by-id-v2', + 'active' => true, + 'route' => '/api/v2/users/{id}', + 'http_method' => 'GET', + 'scopes' => [ + \App\libs\OAuth2\IUserScopes::ReadAll + ], + ], [ 'name' => 'update-my-user', 'active' => true, diff --git a/routes/api_v2.php b/routes/api_v2.php new file mode 100644 index 00000000..5941f322 --- /dev/null +++ b/routes/api_v2.php @@ -0,0 +1,32 @@ + 'users'], function () { + Route::group(['prefix' => '{id}'], function () { + Route::get('', ['middleware' => 'service.account', 'uses' => 'OAuth2UserApiController@getV2']); + }); +}); \ No newline at end of file diff --git a/tests/OAuth2UserServiceApiTest.php b/tests/OAuth2UserApiTest.php similarity index 77% rename from tests/OAuth2UserServiceApiTest.php rename to tests/OAuth2UserApiTest.php index 828a3e65..a0633ba1 100644 --- a/tests/OAuth2UserServiceApiTest.php +++ b/tests/OAuth2UserApiTest.php @@ -21,7 +21,7 @@ /** * Class OAuth2UserServiceApiTest */ -final class OAuth2UserServiceApiTest extends OAuth2ProtectedServiceAppApiTestCase { +final class OAuth2UserApiTest extends OAuth2ProtectedServiceAppApiTestCase { public function testUpdateMe(){ @@ -72,6 +72,53 @@ public function testGetInfo(){ $user_info = json_decode($content); } + public function testGetUserByIdV1(){ + $repo = EntityManager::getRepository(User::class); + $user = $repo->getAll()[0]; + + $params = [ + 'id' => $user->getId() + ]; + + $response = $this->action( + "GET", + "Api\OAuth2\OAuth2UserApiController@get", + $params, + [], + [], + [], + array("HTTP_Authorization" => " Bearer " .$this->access_token)); + + $content = $response->getContent(); + $this->assertResponseStatus(200); + $user = json_decode($content); + $this->assertNotNull($user); + } + + public function testGetUserByIdV2(){ + $repo = EntityManager::getRepository(User::class); + $user = $repo->getAll()[0]; + + $params = [ + 'id' => $user->getId(), + 'expand' => 'groups' + ]; + + $response = $this->action( + "GET", + "Api\OAuth2\OAuth2UserApiController@getV2", + $params, + [], + [], + [], + array("HTTP_Authorization" => " Bearer " .$this->access_token_service_app_type)); + + $content = $response->getContent(); + $this->assertResponseStatus(200); + $user = json_decode($content); + $this->assertNotNull($user); + } + public function testGetInfoCORS(){ $response = $this->action("OPTIONS", "Api\OAuth2\OAuth2UserApiController@me", [],