mirror of
https://github.com/acepanel/panel.git
synced 2026-02-04 23:27:17 +08:00
98 lines
3.3 KiB
PHP
98 lines
3.3 KiB
PHP
<?php
|
||
/**
|
||
* 耗子Linux面板 - 设置控制器
|
||
* @author 耗子
|
||
*/
|
||
|
||
namespace App\Http\Controllers\Api;
|
||
|
||
use App\Http\Controllers\Controller;
|
||
use App\Models\Setting;
|
||
use Illuminate\Http\JsonResponse;
|
||
use Illuminate\Http\Request;
|
||
use Illuminate\Support\Facades\Hash;
|
||
|
||
class SettingsController extends Controller
|
||
{
|
||
/**
|
||
* 获取面板设置
|
||
* @param Request $request
|
||
* @return JsonResponse
|
||
*/
|
||
public function get(Request $request): JsonResponse
|
||
{
|
||
$settings = Setting::all();
|
||
// 隐藏字段
|
||
$settings->makeHidden('id');
|
||
$settings->makeHidden('created_at');
|
||
$settings->makeHidden('updated_at');
|
||
$settingArr = $settings->pluck('value', 'name');
|
||
|
||
// 从nginx配置文件中获取面板端口
|
||
$nginxConf = file_get_contents('/www/server/nginx/conf/nginx.conf');
|
||
preg_match('/listen\s+(\d+)/', $nginxConf, $matches);
|
||
|
||
if (!isset($matches[1])) {
|
||
$res['code'] = 1;
|
||
$res['msg'] = '获取面板端口失败,请检查nginx主配置文件';
|
||
return response()->json($res);
|
||
}
|
||
$data = [
|
||
'name' => $settingArr['name'],
|
||
'username' => $request->user()->username,
|
||
'password' => '',
|
||
'port' => $matches[1],
|
||
];
|
||
$res['code'] = 0;
|
||
$res['msg'] = 'success';
|
||
$res['data'] = $data;
|
||
return response()->json($res);
|
||
}
|
||
|
||
/**
|
||
* 保存面板设置
|
||
* @param Request $request
|
||
* @return JsonResponse
|
||
*/
|
||
public function save(Request $request): JsonResponse
|
||
{
|
||
// 获取前端传递过来的数据
|
||
$settings = $request->all();
|
||
// 将数据入库
|
||
foreach ($settings as $key => $value) {
|
||
if ($key == 'access_token' || $key == 'username' || $key == 'password') {
|
||
continue;
|
||
}
|
||
Setting::query()->where('name', $key)->update(['value' => $value]);
|
||
}
|
||
// 单独处理用户名和密码
|
||
if ($request->input('username') != $request->user()->username) {
|
||
$request->user()->update(['username' => $request->input('username')]);
|
||
}
|
||
if ($request->input('password') != '') {
|
||
$request->user()->update(['password' => Hash::make($request->input('password'))]);
|
||
}
|
||
// 处理面板端口
|
||
$port = $request->input('port');
|
||
$nginxConf = file_get_contents('/www/server/nginx/conf/nginx.conf');
|
||
preg_match('/listen\s+(\d+)/', $nginxConf, $matches);
|
||
if (!isset($matches[1])) {
|
||
$res['code'] = 1;
|
||
$res['msg'] = '获取面板端口失败,请检查nginx主配置文件';
|
||
return response()->json($res);
|
||
}
|
||
if ($port != $matches[1]) {
|
||
$nginxConf = preg_replace('/listen\s+(\d+)/', 'listen '.$port, $nginxConf);
|
||
file_put_contents('/www/server/nginx/conf/nginx.conf', $nginxConf);
|
||
// 重载nginx
|
||
shell_exec('systemctl reload nginx');
|
||
// 防火墙放行端口
|
||
shell_exec('firewall-cmd --permanent --zone=public --add-port='.$port.'/tcp >/dev/null 2>&1');
|
||
shell_exec('firewall-cmd --reload');
|
||
}
|
||
$res['code'] = 0;
|
||
$res['msg'] = 'success';
|
||
return response()->json($res);
|
||
}
|
||
}
|