From 1a778beb45ac9c6462797a787127f20587e9306f Mon Sep 17 00:00:00 2001 From: Ngo Quoc Dat Date: Thu, 14 Mar 2024 14:31:43 +0700 Subject: [PATCH] Move sanctum token management to API settings page --- resources/views/settings.blade.php | 33 ++---- resources/views/table.blade.php | 112 +++++++++++++++++- routes/web.php | 2 +- src/Forms/Settings/ApiSettingForm.php | 31 +++++ src/Http/Controllers/ApiController.php | 14 ++- .../Controllers/SanctumTokenController.php | 10 +- src/Providers/ApiServiceProvider.php | 12 -- 7 files changed, 163 insertions(+), 51 deletions(-) create mode 100644 src/Forms/Settings/ApiSettingForm.php diff --git a/resources/views/settings.blade.php b/resources/views/settings.blade.php index d6bce57..7174998 100644 --- a/resources/views/settings.blade.php +++ b/resources/views/settings.blade.php @@ -1,30 +1,13 @@ @extends(BaseHelper::getAdminMasterLayoutTemplate()) @section('content') - - - - + {!! $form->renderForm() !!} - - - {{ trans('packages/api::api.save_settings') }} - - - + @if(ApiHelper::enabled()) +
+ + {!! $sanctumTokenTable->renderTable() !!} + +
+ @endif @endsection diff --git a/resources/views/table.blade.php b/resources/views/table.blade.php index 9748339..6b3c977 100644 --- a/resources/views/table.blade.php +++ b/resources/views/table.blade.php @@ -1,6 +1,4 @@ -@extends(BaseHelper::getAdminMasterLayoutTemplate()) - -@section('content') +
@if(session()->has('plainTextToken')) @endif - @include('core/table::base-table') -@stop + + +
+
+ @if ($table->hasBulkActions()) + + @foreach ($table->getBulkActions() as $action) + {!! $action !!} + @endforeach + + @endif + + @if ($table->hasFilters()) + + {{ trans('core/table::table.filters') }} + + @endif + +
+ +
+
+ +
+ @foreach($table->getButtons() as $button) + @if (Arr::get($button, 'extend') === 'collection') + + @else + + @endif + @endforeach + + @foreach($table->getDefaultButtons() as $defaultButton) + @if (is_string($defaultButton)) + @switch($defaultButton) + @case('reload') + + @break + @case('export') + + @break + @case('visibility') + @break + @endswitch + @else + @dd($defaultButton) + @endif + @endforeach +
+
+
+ +
+
+ {!! $dataTable->table(compact('id', 'class'), false) !!} +
+
+
+
+ +@push('footer') + @include('core/table::modal') + + {!! $dataTable->scripts() !!} +@endpush diff --git a/routes/web.php b/routes/web.php index 42bf4c5..422d390 100644 --- a/routes/web.php +++ b/routes/web.php @@ -15,7 +15,7 @@ Route::group(['prefix' => 'settings/api', 'permission' => 'api.settings'], function () { Route::get('/', [ApiController::class, 'edit'])->name('settings'); - Route::post('/', [ApiController::class, 'update'])->name('settings.update'); + Route::put('/', [ApiController::class, 'update'])->name('settings.update'); }); }); }); diff --git a/src/Forms/Settings/ApiSettingForm.php b/src/Forms/Settings/ApiSettingForm.php new file mode 100644 index 0000000..837e7e8 --- /dev/null +++ b/src/Forms/Settings/ApiSettingForm.php @@ -0,0 +1,31 @@ +setValidatorClass(ApiSettingRequest::class) + ->setSectionTitle(trans('packages/api::api.setting_title')) + ->setSectionDescription(trans('packages/api::api.setting_description')) + ->contentOnly() + ->add( + 'api_enabled', + OnOffCheckboxField::class, + OnOffFieldOption::make() + ->label(trans('packages/api::api.api_enabled')) + ->value(ApiHelper::enabled()) + ->toArray() + ); + } +} diff --git a/src/Http/Controllers/ApiController.php b/src/Http/Controllers/ApiController.php index e12a2ec..f374e64 100644 --- a/src/Http/Controllers/ApiController.php +++ b/src/Http/Controllers/ApiController.php @@ -2,24 +2,26 @@ namespace Botble\Api\Http\Controllers; +use Botble\Api\Forms\Settings\ApiSettingForm; use Botble\Api\Http\Requests\ApiSettingRequest; -use Botble\Base\Facades\Assets; +use Botble\Api\Tables\SanctumTokenTable; use Botble\Setting\Http\Controllers\SettingController; class ApiController extends SettingController { - public function edit() + public function edit(SanctumTokenTable $sanctumTokenTable) { $this->pageTitle(trans('packages/api::api.settings')); - Assets::addScriptsDirectly('vendor/core/core/setting/js/setting.js') - ->addStylesDirectly('vendor/core/core/setting/css/setting.css'); - $this->breadcrumb() ->add(trans('core/setting::setting.title'), route('settings.index')) ->add(trans('packages/api::api.settings')); - return view('packages/api::settings'); + $form = ApiSettingForm::create(); + + $sanctumTokenTable->setAjaxUrl(route('api.sanctum-token.index')); + + return view('packages/api::settings', compact('form', 'sanctumTokenTable')); } public function update(ApiSettingRequest $request) diff --git a/src/Http/Controllers/SanctumTokenController.php b/src/Http/Controllers/SanctumTokenController.php index 98eba2e..e810ffe 100644 --- a/src/Http/Controllers/SanctumTokenController.php +++ b/src/Http/Controllers/SanctumTokenController.php @@ -14,6 +14,13 @@ class SanctumTokenController extends BaseController { + public function __construct() + { + $this->breadcrumb() + ->add(trans('core/setting::setting.title'), route('settings.index')) + ->add(trans('packages/api::api.settings'), route('api.settings')); + } + public function index(SanctumTokenTable $sanctumTokenTable): JsonResponse|View { $this->pageTitle(trans('packages/api::sanctum-token.name')); @@ -36,8 +43,7 @@ public function store(StoreSanctumTokenRequest $request): BaseHttpResponse return $this ->httpResponse() - ->setPreviousUrl(route('api.sanctum-token.index')) - ->setNextUrl(route('api.sanctum-token.index')) + ->setNextUrl(route('api.settings')) ->withCreatedSuccessMessage(); } diff --git a/src/Providers/ApiServiceProvider.php b/src/Providers/ApiServiceProvider.php index 41b2632..89cb188 100644 --- a/src/Providers/ApiServiceProvider.php +++ b/src/Providers/ApiServiceProvider.php @@ -5,7 +5,6 @@ use Botble\Api\Facades\ApiHelper; use Botble\Api\Http\Middleware\ForceJsonResponseMiddleware; use Botble\Api\Models\PersonalAccessToken; -use Botble\Base\Facades\DashboardMenu; use Botble\Base\Facades\PanelSectionManager; use Botble\Base\PanelSections\PanelSectionItem; use Botble\Base\Supports\ServiceProvider; @@ -54,17 +53,6 @@ public function boot(): void Sanctum::usePersonalAccessTokenModel(PersonalAccessToken::class); - DashboardMenu::default()->beforeRetrieving(function () { - DashboardMenu::make() - ->registerItem([ - 'id' => 'cms-packages-api-sanctum-token', - 'name' => trans('packages/api::sanctum-token.name'), - 'icon' => 'ti ti-key', - 'url' => route('api.sanctum-token.index'), - 'permissions' => ['api.sanctum-token.index'], - ]); - }); - $this->app['events']->listen(RouteMatched::class, function () { if (ApiHelper::enabled()) { $this->app['router']->pushMiddlewareToGroup('api', ForceJsonResponseMiddleware::class);