PortIO/app/Http/Controllers/Admin/TunnelController.php

147 lines
4.0 KiB
PHP
Raw Normal View History

2023-05-14 07:42:18 +00:00
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
2023-07-21 16:01:40 +00:00
use App\Models\Tunnel;
2023-05-14 07:42:18 +00:00
use Illuminate\Http\RedirectResponse;
2023-07-21 16:01:40 +00:00
use Illuminate\Http\Request;
use Illuminate\Support\Str;
use Illuminate\View\View;
2023-05-14 07:42:18 +00:00
class TunnelController extends Controller
{
/**
* Display a listing of the resource.
*
* @return RedirectResponse|View
*/
public function index(Request $request)
{
$hosts = Tunnel::with('user');
// if has has_free_traffic
if ($request->has_free_traffic == 1) {
$hosts = $hosts->where('free_traffic', '>', 0);
}
foreach ($request->except(['has_free_traffic', 'page']) as $key => $value) {
if (empty($value)) {
continue;
}
if ($request->{$key}) {
2023-07-21 16:01:40 +00:00
$hosts = $hosts->where($key, 'LIKE', '%' . $value . '%');
2023-05-14 07:42:18 +00:00
}
}
$count = $hosts->count();
$hosts = $hosts->simplePaginate(100);
return view('admin.tunnels.index', ['hosts' => $hosts, 'count' => $count]);
}
/**
* Display the specified resource.
*
2023-07-21 16:01:40 +00:00
* @param Tunnel $tunnel
2023-05-14 07:42:18 +00:00
* @return View
*/
public function show(Tunnel $tunnel)
{
$tunnel->load('server');
return view('admin.tunnels.show', compact('tunnel'));
}
/**
* Update the specified resource in storage.
*
2023-07-21 16:01:40 +00:00
* @param \Illuminate\Http\Request $request
* @param Tunnel $tunnel
2023-05-14 07:42:18 +00:00
* @return RedirectResponse
*/
public function update(Request $request, Tunnel $tunnel)
{
$request->validate([
'locked_reason' => 'nullable|string'
]);
$tunnel->update($request->all());
return back()->with('success', '完成。');
}
/**
* Remove the specified resource from storage.
*
2023-07-21 16:01:40 +00:00
* @param Tunnel $host
2023-05-14 07:42:18 +00:00
* @return RedirectResponse
*/
public function destroy(Tunnel $host)
{
$host->delete();
return back()->with('success', '已开始销毁。');
}
public function generateConfig(Tunnel $tunnel)
{
$tunnel->load('server');
// 配置文件
$config = [];
$config['server'] = <<<EOF
[common]
server_addr = {$tunnel->server->server_address}
server_port = {$tunnel->server->server_port}
token = {$tunnel->server->token}
EOF;
$local_addr = explode(':', $tunnel->local_address);
$config['client'] = <<<EOF
[{$tunnel->client_token}]
type = {$tunnel->protocol}
local_ip = {$local_addr[0]}
local_port = {$local_addr[1]}
EOF;
if ($tunnel->protocol == 'tcp' || $tunnel->protocol == 'udp') {
$config['client'] .= PHP_EOL . 'remote_port = ' . $tunnel->remote_port;
} elseif ($tunnel->protocol == 'http' || $tunnel->protocol == 'https') {
$config['client'] .= PHP_EOL . 'custom_domains = ' . $tunnel->custom_domain . PHP_EOL;
} elseif ($tunnel->server->allow_stcp || $tunnel->server->allow_xtcp || $tunnel->server->allow_sudp) {
$uuid = Str::uuid();
$config['client'] .= <<<EOF
sk = {$tunnel->sk}
# 以下的是对端配置文件,请不要复制或者使用!
# 如果你想让别人通过 XTCP|STCP|SUDP 连接到你的主机,请将以下配置文件发给你信任的人。如果你不信任他人, 请勿发送, 这样会导致不信任的人也能通过 XTCP 连接到你的主机。
# XTCP 连接不能保证稳定性, 并且也不会100%成功。
#------ 对端复制开始 --------
[common]
server_addr = {$tunnel->server->server_address}
server_port = {$tunnel->server->server_port}
user = visitor_{$uuid}
token = {$tunnel->server->token}
[lae_visitor_{$uuid}]
type = xtcp
role = visitor
server_name = lae_visitor_{$uuid}
sk = {$tunnel->sk}
bind_addr = {$local_addr[0]}
bind_port = {$local_addr[1]}
#------ 对端复制结束 --------
# 非常感谢您的支持。如果您觉得这个项目不错,请将我们的网站分享给您的朋友。谢谢。
EOF;
}
return $config;
}
}