diff --git a/app/Http/Controllers/Api/SettingsController.php b/app/Http/Controllers/Api/SettingsController.php index 7cf6f626..474dc986 100644 --- a/app/Http/Controllers/Api/SettingsController.php +++ b/app/Http/Controllers/Api/SettingsController.php @@ -8,9 +8,12 @@ namespace App\Http\Controllers\Api; use App\Http\Controllers\Controller; use App\Models\Setting; +use App\Models\User; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Hash; +use Illuminate\Support\Str; class SettingsController extends Controller { @@ -32,6 +35,13 @@ class SettingsController extends Controller $nginxConf = file_get_contents('/www/server/nginx/conf/nginx.conf'); preg_match('/listen\s+(\d+)/', $nginxConf, $matches); + $api = 0; + $apiToken = ''; + if (isset($settingArr['api']) && $settingArr['api'] == 1) { + $api = 1; + $apiToken = $settingArr['api_token'] ?? ''; + } + if (!isset($matches[1])) { $res['code'] = 1; $res['msg'] = '获取面板端口失败,请检查nginx主配置文件'; @@ -42,6 +52,8 @@ class SettingsController extends Controller 'username' => $request->user()->username, 'password' => '', 'port' => $matches[1], + 'api' => $api, + 'api_token' => $apiToken, ]; $res['code'] = 0; $res['msg'] = 'success'; @@ -60,7 +72,7 @@ class SettingsController extends Controller $settings = $request->all(); // 将数据入库 foreach ($settings as $key => $value) { - if ($key == 'access_token' || $key == 'username' || $key == 'password') { + if ($key == 'access_token' || $key == 'username' || $key == 'password' || $key == 'api_token' || $key == 'api') { continue; } Setting::query()->where('name', $key)->update(['value' => $value]); @@ -90,6 +102,48 @@ class SettingsController extends Controller shell_exec('firewall-cmd --permanent --zone=public --add-port='.$port.'/tcp >/dev/null 2>&1'); shell_exec('firewall-cmd --reload'); } + // 处理api + $api = $request->input('api', 0); + $apiCheck = Setting::query()->where('name', 'api')->value('value'); + if (empty($apiCheck)) { + $apiCheck = 0; + } + if ($api != $apiCheck) { + if ($api) { + Setting::query()->insert([ + 'name' => 'api', + 'value' => 1, + ]); + // 生成api用户 + $username = 'api_'.Str::random(); + $apiUser = User::query()->create([ + 'username' => $username, + 'password' => Hash::make(Str::random()), + 'email' => 'panel_api@haozi.net', + ]); + // 生成api token + $apiToken = $apiUser->createToken('api')->plainTextToken; + Setting::query()->insert([ + 'name' => 'api_user', + 'value' => $username, + ]); + Setting::query()->insert([ + 'name' => 'api_token', + 'value' => $apiToken, + ]); + } else { + Setting::query()->where('name', 'api')->delete(); + Setting::query()->where('name', 'api_token')->delete(); + $username = Setting::query()->where('name', 'api_user')->value('value'); + Setting::query()->where('name', 'api_user')->delete(); + Setting::query()->where('name', 'api')->delete(); + $apiUser = User::query()->where('username', $username)->first(); + // 删除api用户的所有token + $apiUser->tokens()->delete(); + // 删除api用户 + $apiUser->delete(); + } + } $res['code'] = 0; $res['msg'] = 'success'; return response()->json($res); diff --git a/app/Http/Controllers/Api/UsersController.php b/app/Http/Controllers/Api/UsersController.php index 46bc708f..0742021b 100644 --- a/app/Http/Controllers/Api/UsersController.php +++ b/app/Http/Controllers/Api/UsersController.php @@ -6,6 +6,7 @@ namespace App\Http\Controllers\Api; use App\Http\Controllers\Controller; +use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Validation\ValidationException; @@ -15,9 +16,9 @@ class UsersController extends Controller * 登录 * * @param Request $request - * @return \Illuminate\Http\JsonResponse + * @return JsonResponse */ - public function login(Request $request) + public function login(Request $request): JsonResponse { // 消毒数据 try { @@ -42,7 +43,7 @@ class UsersController extends Controller return response()->json(['code' => 1, 'msg' => '登录失败,用户名或密码错误']); } } - public function getInfo(Request $request) + public function getInfo(Request $request): JsonResponse { $user = $request->user(); $res['code'] = 0; diff --git a/resources/views/setting.blade.php b/resources/views/setting.blade.php index 3e96588f..4887a56f 100755 --- a/resources/views/setting.blade.php +++ b/resources/views/setting.blade.php @@ -12,6 +12,20 @@ Date: 2022-12-01