From 03edaea99a444f6e10ea158ecb86d7a75763f7b5 Mon Sep 17 00:00:00 2001 From: Kode Date: Fri, 18 Mar 2022 16:33:46 +0000 Subject: [PATCH] Initial start of adding an API --- app/Http/Controllers/ApiItemController.php | 105 ++++++++++++++++++++ app/Http/Controllers/SettingsController.php | 4 +- app/Http/Kernel.php | 1 + app/Http/Middleware/UserApiKey.php | 30 ++++++ app/Setting.php | 10 +- config/app.php | 2 +- database/seeds/SettingsSeeder.php | 16 +++ resources/lang/en/app.php | 3 + resources/views/settings/form.blade.php | 2 +- routes/api.php | 1 + 10 files changed, 170 insertions(+), 4 deletions(-) create mode 100644 app/Http/Controllers/ApiItemController.php create mode 100644 app/Http/Middleware/UserApiKey.php diff --git a/app/Http/Controllers/ApiItemController.php b/app/Http/Controllers/ApiItemController.php new file mode 100644 index 00000000..74e69595 --- /dev/null +++ b/app/Http/Controllers/ApiItemController.php @@ -0,0 +1,105 @@ +middleware('apikey'); + + $key = $request->input('api_key'); + if ($key) { + $details = SettingUser::where('setting_id', 12)->where('uservalue', $key)->first(); + $this->api_key = $key; + $this->user = User::find($details->user_id); + } + } + + /** + * Display a listing of the resource. + * + * @return \Illuminate\Http\Response + */ + public function index() + { + return $this->user->items; + } + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\Http\Response + */ + public function create() + { + + } + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function store(Request $request) + { + $request->merge([ + 'user_id' => $this->user->id + ]); + // die(print_r($request->all())); + Item::create($request->all()); + } + + /** + * Display the specified resource. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function show($id) + { + // + } + + /** + * Show the form for editing the specified resource. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function edit($id) + { + // + } + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param int $id + * @return \Illuminate\Http\Response + */ + public function update(Request $request, $id) + { + // + } + + /** + * Remove the specified resource from storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + // + } +} diff --git a/app/Http/Controllers/SettingsController.php b/app/Http/Controllers/SettingsController.php index afcec249..d08b824c 100644 --- a/app/Http/Controllers/SettingsController.php +++ b/app/Http/Controllers/SettingsController.php @@ -8,6 +8,7 @@ use App\SettingGroup; use App\User; use Illuminate\Support\Facades\Auth; use App\Http\Controllers\Controller; +use Illuminate\Support\Str; class SettingsController extends Controller { @@ -77,7 +78,8 @@ class SettingsController extends Controller $path = $request->file('value')->store('backgrounds'); $setting_value = $path; } - + } elseif ($setting->type == 'apikey') { + $setting_value = Str::random(40); } else { $setting_value = $data->value; } diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index e9e665a6..358d1e6f 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -58,5 +58,6 @@ class Kernel extends HttpKernel 'can' => \Illuminate\Auth\Middleware\Authorize::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, + 'apikey' => \App\Http\Middleware\UserApiKey::class, ]; } diff --git a/app/Http/Middleware/UserApiKey.php b/app/Http/Middleware/UserApiKey.php new file mode 100644 index 00000000..b551a9ae --- /dev/null +++ b/app/Http/Middleware/UserApiKey.php @@ -0,0 +1,30 @@ +input('api_key'); + $details = SettingUser::where('setting_id', 12)->where('uservalue', $key)->first(); + // die(var_dump($details)); + if($details === null) { + return response()->json([ + 'status' => 401, + 'message' => 'invalid api key' + ], 401); + } + return $next($request); + } +} diff --git a/app/Setting.php b/app/Setting.php index 7264d367..1d788071 100644 --- a/app/Setting.php +++ b/app/Setting.php @@ -134,7 +134,15 @@ class Setting extends Model $value = Form::select('value', $options, null, ['class' => 'form-control']); break; case 'textarea': - $value = Form::textarea('value', null, ['class' => 'form-control', 'cols' => '44', 'rows' => '15']); + $value = Form::textarea('value', null, ['class' => 'form-control', 'cols' => '44', 'rows' => '15', 'style' => 'width: 100%;']); + break; + case 'apikey': + if (isset($this->value) && !empty($this->value)) { + $value = Form::text('value', null, ['class' => 'form-control']); + } else { + $value = '
'.$current.'
'; + } + $value .= ''.__('app.settings.click_generate').''; break; default: $value = Form::text('value', null, ['class' => 'form-control']); diff --git a/config/app.php b/config/app.php index 7116bd81..30ca0aa6 100644 --- a/config/app.php +++ b/config/app.php @@ -14,7 +14,7 @@ return [ */ 'name' => env('APP_NAME', 'Heimdall'), - 'version' => '2.4.3', + 'version' => '2.5.0-beta1', /* |-------------------------------------------------------------------------- diff --git a/database/seeds/SettingsSeeder.php b/database/seeds/SettingsSeeder.php index e5e2cd0c..ff036d96 100644 --- a/database/seeds/SettingsSeeder.php +++ b/database/seeds/SettingsSeeder.php @@ -237,6 +237,22 @@ class SettingsSeeder extends Seeder $setting->save(); } + if(!$setting = Setting::find(12)) { + $setting = new Setting; + $setting->id = 12; + $setting->group_id = 1; + $setting->key = 'api_key'; + $setting->type = 'apikey'; + $setting->label = 'app.settings.apikey'; + $setting->value = ''; + $setting->save(); + } else { + $setting->type = 'apikey'; + $setting->group_id = 1; + $setting->label = 'app.settings.apikey'; + $setting->save(); + } + if(!$home_tag = \App\Item::find(0)) { $home_tag = new \App\Item; $home_tag->id = 0; diff --git a/resources/lang/en/app.php b/resources/lang/en/app.php index 5943b36f..81a28469 100644 --- a/resources/lang/en/app.php +++ b/resources/lang/en/app.php @@ -39,6 +39,9 @@ return [ 'settings.custom_css' => 'Custom CSS', 'settings.custom_js' => 'Custom JavaScript', + 'settings.apikey' => 'API Key', + 'settings.click_generate' => 'Clicking the save button will generate a new API key.', + 'options.none' => '- not set -', 'options.google' => 'Google', 'options.ddg' => 'DuckDuckGo', diff --git a/resources/views/settings/form.blade.php b/resources/views/settings/form.blade.php index 1ffacce1..ad9bcf37 100644 --- a/resources/views/settings/form.blade.php +++ b/resources/views/settings/form.blade.php @@ -13,7 +13,7 @@ {!! Form::select('supported', \App\Item::supportedOptions(), array('placeholder' => 'Title','class' => 'form-control')) !!} */ ?> -
+
{!! $setting->edit_value !!}
diff --git a/routes/api.php b/routes/api.php index 0f37e006..6f8a6501 100644 --- a/routes/api.php +++ b/routes/api.php @@ -13,3 +13,4 @@ use Illuminate\Http\Request; | */ +Route::resource('items', 'ApiItemController'); \ No newline at end of file