mirror of
https://github.com/ProxyPanel/ProxyPanel.git
synced 2026-04-12 23:48:53 +00:00
feat: 添加v2rayN、v2rayNG、v2rayU客户端订阅方式 (#180)
This commit is contained in:
44
app/Components/Client/V2rayN.php
Normal file
44
app/Components/Client/V2rayN.php
Normal file
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
namespace App\Components\Client;
|
||||
|
||||
class V2rayN
|
||||
{
|
||||
public static function buildShadowsocksr($server)
|
||||
{
|
||||
$setting = "{$server['host']}:{$server['port']}:{$server['protocol']}:{$server['method']}:{$server['obfs']}:";
|
||||
|
||||
return 'ssr://'.base64url_encode($setting.base64url_encode($server['passwd']).'/?obfsparam='.base64url_encode($server['obfs_param']).'&protoparam='.base64url_encode($server['protocol_param']).'&remarks='.base64url_encode($server['name']).'&group='.base64url_encode($server['group']).'&udpport='.$server['udp'].'&uot=0').PHP_EOL;
|
||||
}
|
||||
|
||||
public static function buildVmess($server)
|
||||
{
|
||||
$config = [
|
||||
'v' => '2',
|
||||
'ps' => $server['name'],
|
||||
'add' => $server['host'],
|
||||
'port' => $server['port'],
|
||||
'id' => $server['uuid'],
|
||||
'aid' => $server['v2_alter_id'],
|
||||
'net' => $server['v2_net'],
|
||||
'type' => $server['v2_type'],
|
||||
'host' => $server['v2_host'],
|
||||
'path' => $server['v2_path'],
|
||||
'tls' => $server['v2_tls'],
|
||||
'remark' => $server['name'],
|
||||
];
|
||||
|
||||
return 'vmess://'.base64_encode(json_encode($config)).PHP_EOL;
|
||||
}
|
||||
|
||||
public static function buildTrojan($server)
|
||||
{
|
||||
$name = rawurlencode($server['name']);
|
||||
$query = '';
|
||||
if (array_key_exists('relay_server', $server)) {
|
||||
$query = "?sni={$server['relay_server']}";
|
||||
}
|
||||
|
||||
return "trojan://{$server['passwd']}@{$server['host']}:{$server['port']}{$query}#{$name}".PHP_EOL;
|
||||
}
|
||||
}
|
||||
@@ -7,6 +7,7 @@ use App\Components\Client\QuantumultX;
|
||||
use App\Components\Client\Surfboard;
|
||||
use App\Components\Client\Surge;
|
||||
use App\Components\Client\URLSchemes;
|
||||
use App\Components\Client\V2rayN;
|
||||
use App\Models\User;
|
||||
use File;
|
||||
use Symfony\Component\Yaml\Yaml;
|
||||
@@ -33,6 +34,15 @@ class ClientController extends Controller
|
||||
if (strpos($target, 'shadowrocket') !== false) {
|
||||
return $this->shadowrocket($user, $servers);
|
||||
}
|
||||
if (strpos($target, 'v2rayn') !== false) {
|
||||
return $this->v2rayN($servers);
|
||||
}
|
||||
if (strpos($target, 'v2rayng') !== false) {
|
||||
return $this->v2rayN($servers);
|
||||
}
|
||||
if (strpos($target, 'v2rayu') !== false) {
|
||||
return $this->v2rayN($servers);
|
||||
}
|
||||
// if (strpos($target, 'shadowsocks') !== false) {
|
||||
// exit($this->shaodowsocksSIP008($servers));
|
||||
// }
|
||||
@@ -222,4 +232,22 @@ class ClientController extends Controller
|
||||
|
||||
return json_encode(['version' => 1, 'remark' => sysConfig('website_name'), 'servers' => $configs ?? []], JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT);
|
||||
}
|
||||
|
||||
private function v2rayN($servers)
|
||||
{
|
||||
$uri = '';
|
||||
foreach ($servers as $server) {
|
||||
if ($server['type'] === 'shadowsocksr') {
|
||||
$uri .= V2rayN::buildShadowsocksr($server);
|
||||
}
|
||||
if ($server['type'] === 'v2ray') {
|
||||
$uri .= V2rayN::buildVmess($server);
|
||||
}
|
||||
if ($server['type'] === 'trojan') {
|
||||
$uri .= V2rayN::buildTrojan($server);
|
||||
}
|
||||
}
|
||||
|
||||
return base64_encode($uri);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -170,6 +170,7 @@
|
||||
<option value="surfboard">Surfboard</option>
|
||||
<option value="surge">Surge</option>
|
||||
<option value="shadowrocket">Shadowrocket</option>
|
||||
<option value="v2rayn">v2rayN</option>
|
||||
{{-- <option value="shadowsocks">SS路由器</option>--}}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user