2
0
mirror of https://github.com/acepanel/panel.git synced 2026-02-04 22:07:16 +08:00

特性(设置):面板API

This commit is contained in:
耗子
2022-12-01 21:25:10 +08:00
parent 3b5eb5ecf3
commit 53baea1422
3 changed files with 86 additions and 5 deletions

View File

@@ -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);

View File

@@ -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;

View File

@@ -12,6 +12,20 @@ Date: 2022-12-01
<div class="layui-card-body">
<div class="layui-form" lay-filter="panel_setting">
<div class="layui-form-item">
<label class="layui-form-label">API 开关</label>
<div class="layui-input-inline">
<input type="checkbox" name="api" lay-skin="switch" lay-text="ON|OFF"/>
</div>
<div class="layui-form-mid layui-word-aux">开启后将提供面板API接口的访问支持</div>
</div>
<div id="setting-api-token" class="layui-form-item">
<label class="layui-form-label">API Token</label>
<div class="layui-input-inline">
<input type="text" name="api_token" value="获取中ing..." class="layui-input" disabled/>
</div>
<div class="layui-form-mid layui-word-aux">API Token用于携带访问面板接口</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">面板名称</label>
<div class="layui-input-inline">
@@ -38,7 +52,8 @@ Date: 2022-12-01
<div class="layui-input-inline">
<input type="text" name="port" value="" class="layui-input" disabled/>
</div>
<div class="layui-form-mid layui-word-aux">修改面板的访问端口(<b style="color: red;">保存后需要手动修改浏览器地址栏的端口为新端口以访问面板</b></div>
<div class="layui-form-mid layui-word-aux">修改面板的访问端口(<b style="color: red;">保存后需要手动修改浏览器地址栏的端口为新端口以访问面板</b>
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
@@ -62,6 +77,7 @@ Date: 2022-12-01
// 渲染表单
form.render();
$('#setting-api-token').hide();
// ajax获取设置项并赋值
admin.req({
@@ -77,6 +93,10 @@ Date: 2022-12-01
result.data
);
$('input').attr('disabled', false);
if (result.data.api === 1) {
$('#setting-api-token').show();
$('#setting-api-token input').attr('readonly', true);
}
}
, error: function (xhr, status, error) {
console.log('耗子Linux面板ajax请求出错错误' + error);
@@ -85,6 +105,11 @@ Date: 2022-12-01
// 面板设置
form.on('submit(panel_setting_submit)', function (obj) {
if (obj.field.api === "on") {
obj.field.api = 1;
} else {
obj.field.api = 0;
}
// 提交修改
admin.req({
url: "/api/panel/setting/save"
@@ -97,6 +122,7 @@ Date: 2022-12-01
return false;
}
layer.msg('面板设置保存成功!');
admin.render();
}
, error: function (xhr, status, error) {
console.log('耗子Linux面板ajax请求出错错误' + error);