mirror of
https://github.com/acepanel/panel.git
synced 2026-02-04 22:07:16 +08:00
特性(设置):面板API
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user