From f0ff6a69e48b7317924591b3c1a4ea3fff26191e Mon Sep 17 00:00:00 2001 From: Graphictoria Date: Sun, 22 May 2022 02:20:19 -0400 Subject: [PATCH] Setting up api. --- web/app/Helpers/DomainHelper.php | 5 + .../Http/Controllers/Api/ApiController.php | 238 ++++++++++++++++++ .../Http/Controllers/Api/FeedController.php | 19 ++ web/app/Http/Kernel.php | 5 +- web/app/Http/Middleware/Authenticate.php | 25 +- web/app/Providers/RouteServiceProvider.php | 2 +- web/config/session.php | 2 +- web/routes/api.php | 28 +-- 8 files changed, 303 insertions(+), 21 deletions(-) create mode 100644 web/app/Http/Controllers/Api/ApiController.php create mode 100644 web/app/Http/Controllers/Api/FeedController.php diff --git a/web/app/Helpers/DomainHelper.php b/web/app/Helpers/DomainHelper.php index 9fa509e..baeb9d3 100644 --- a/web/app/Helpers/DomainHelper.php +++ b/web/app/Helpers/DomainHelper.php @@ -18,4 +18,9 @@ class DomainHelper return $baseurl; } + + public static function DotLeadTopLevelDomain() + { + return '.' . DomainHelper::TopLevelDomain(); + } } diff --git a/web/app/Http/Controllers/Api/ApiController.php b/web/app/Http/Controllers/Api/ApiController.php new file mode 100644 index 0000000..e17e791 --- /dev/null +++ b/web/app/Http/Controllers/Api/ApiController.php @@ -0,0 +1,238 @@ +header('Content-Type', 'text/plain'); + } +} diff --git a/web/app/Http/Controllers/Api/FeedController.php b/web/app/Http/Controllers/Api/FeedController.php new file mode 100644 index 0000000..b6a8793 --- /dev/null +++ b/web/app/Http/Controllers/Api/FeedController.php @@ -0,0 +1,19 @@ + [ - \App\Http\Middleware\EncryptCookies::class, - \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \App\Http\Middleware\VerifyCsrfToken::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, @@ -46,7 +46,6 @@ class Kernel extends HttpKernel 'api' => [ // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, - 'throttle:api', \Illuminate\Routing\Middleware\SubstituteBindings::class, ], ]; diff --git a/web/app/Http/Middleware/Authenticate.php b/web/app/Http/Middleware/Authenticate.php index 6e316bb..1b3457f 100644 --- a/web/app/Http/Middleware/Authenticate.php +++ b/web/app/Http/Middleware/Authenticate.php @@ -6,6 +6,29 @@ use Illuminate\Auth\Middleware\Authenticate as Middleware; class Authenticate extends Middleware { + /** + * Handle an unauthenticated user. + * + * @param \Illuminate\Http\Request $request + * @param array $guards + * @return void + * + * @throws \Illuminate\Auth\AuthenticationException + */ + protected function unauthenticated($request, array $guards) + { + if(in_array('api', $request->route()->middleware())) { + // HACK: Couldn't use laravel's response function here. So, we manually do it instead. + http_response_code(401); + header('Content-Type: text/plain'); + exit('login required'); + } + + throw new \Illuminate\Auth\AuthenticationException( + 'Unauthenticated.', $guards, $this->redirectTo($request) + ); + } + /** * Get the path the user should be redirected to when they are not authenticated. * @@ -14,7 +37,7 @@ class Authenticate extends Middleware */ protected function redirectTo($request) { - if (! $request->expectsJson()) { + if(!$request->expectsJson()) { return route('auth.login.index'); } } diff --git a/web/app/Providers/RouteServiceProvider.php b/web/app/Providers/RouteServiceProvider.php index 0a7894c..c52e035 100644 --- a/web/app/Providers/RouteServiceProvider.php +++ b/web/app/Providers/RouteServiceProvider.php @@ -51,7 +51,7 @@ class RouteServiceProvider extends ServiceProvider // Domain: api.gtoria.net // Route::domain('api.' . DomainHelper::TopLevelDomain()) - ->middleware('web') + ->middleware('api') ->namespace('App\Http\Controllers\Api') ->group(base_path('routes/api.php')); }); diff --git a/web/config/session.php b/web/config/session.php index ec00de8..f1b555b 100644 --- a/web/config/session.php +++ b/web/config/session.php @@ -155,7 +155,7 @@ return [ | */ - 'domain' => env('SESSION_DOMAIN'), + 'domain' => \App\Helpers\DomainHelper::DotLeadTopLevelDomain(), /* |-------------------------------------------------------------------------- diff --git a/web/routes/api.php b/web/routes/api.php index eb6fa48..aa84c0f 100644 --- a/web/routes/api.php +++ b/web/routes/api.php @@ -1,19 +1,17 @@ name('index'); -/* -|-------------------------------------------------------------------------- -| API Routes -|-------------------------------------------------------------------------- -| -| Here is where you can register API routes for your application. These -| routes are loaded by the RouteServiceProvider within a group which -| is assigned the "api" middleware group. Enjoy building your API! -| -*/ - -Route::middleware('auth:sanctum')->get('/user', function (Request $request) { - return $request->user(); +Route::middleware('auth')->group(function () { + Route::group(['as' => 'feed.', 'prefix' => 'feed'], function() { + Route::group(['as' => 'v1.', 'prefix' => 'v1'], function() { + Route::get('/list-json', 'FeedController@listjson')->name('list'); + Route::post('/handle ', 'FeedController@handle')->name('handle'); + }); + }); }); + +Route::fallback(function () { + return response('404 not found.', 404) + ->header('Content-Type', 'text/plain'); +}); \ No newline at end of file