URLSchemes.php 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. <?php
  2. namespace App\Components\Client;
  3. use App\Models\Server;
  4. class URLSchemes
  5. {
  6. public static function buildShadowsocks($server)
  7. {
  8. $name = rawurlencode($server['name']);
  9. $str = base64url_encode("{$server['method']}:{$server['passwd']}");
  10. return "ss://{$str}@{$server['host']}:{$server['port']}#{$name}".PHP_EOL;
  11. }
  12. public static function buildShadowsocksr($server)
  13. {
  14. $setting = "{$server['host']}:{$server['port']}:{$server['protocol']}:{$server['method']}:{$server['obfs']}:";
  15. 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;
  16. }
  17. // TODO: More study required about id usage https://shadowsocks.org/en/wiki/SIP008-Online-Configuration-Delivery.html
  18. public static function buildShadowsocksSIP008($server)
  19. {
  20. $config = [
  21. 'id' => $server['id'],
  22. 'remark' => $server['name'],
  23. 'server' => $server['host'],
  24. 'server_port' => $server['port'],
  25. 'password' => $server['passwd'],
  26. 'method' => $server['method'],
  27. ];
  28. return $config;
  29. }
  30. public static function buildVmess($server)
  31. {
  32. $config = [
  33. 'v' => '2',
  34. 'ps' => $server['name'],
  35. 'add' => $server['host'],
  36. 'port' => $server['port'],
  37. 'id' => $server['uuid'],
  38. 'aid' => $server['v2_alter_id'],
  39. 'net' => $server['v2_net'],
  40. 'type' => $server['v2_type'],
  41. 'host' => $server['v2_host'],
  42. 'path' => $server['v2_path'],
  43. 'tls' => $server['v2_tls'],
  44. 'sni' => $server['v2_sni'],
  45. ];
  46. return 'vmess://'.base64_encode(json_encode($config)).PHP_EOL;
  47. }
  48. //vless://6478f959-c97c-43a2-a7de-256167db0f70@93.179.124.145:51510?encryption=none&flow=xtls-rprx-vision&security=reality&sni=www.amazon.com&fp=chrome&pbk=qhTzYYIgBzDLNYR79oxftqdo1kzL-1_hGJKfqrOliCY&type=tcp&headerType=none#93.179.124.145
  49. public static function buildVless($server)
  50. {
  51. $config = [
  52. 'v' => '2',
  53. 'ps' => $server['name'],
  54. 'add' => $server['host'],
  55. 'port' => $server['port'],
  56. 'id' => $server['uuid'],
  57. 'aid' => $server['v2_alter_id'],
  58. 'net' => $server['v2_net'],
  59. 'type' => $server['v2_type'],
  60. 'host' => $server['v2_host'],
  61. 'path' => $server['v2_path'],
  62. 'tls' => $server['v2_tls'],
  63. 'sni' => $server['v2_sni'],
  64. 'flow' => 'xtls-rprx-vision',
  65. 'security' => 'reality',
  66. 'fp' => 'chrome',
  67. 'pbk' => 'qhTzYYIgBzDLNYR79oxftqdo1kzL-1_hGJKfqrOliCY',
  68. 'headerType' => 'none',
  69. ];
  70. return "vless://{$server['uuid']}@{$server['host']}:{$server['port']}?encryption=none&flow=xtls-rprx-vision&security=reality&sni={$server['v2_sni']}&fp=chrome&pbk=qhTzYYIgBzDLNYR79oxftqdo1kzL-1_hGJKfqrOliCY&type=tcp&headerType=none#{$server['name']}".PHP_EOL;
  71. // return 'vless://'.base64_encode(json_encode($config)).PHP_EOL;
  72. }
  73. public static function buildTrojan($server)
  74. {
  75. $name = rawurlencode($server['name']);
  76. $query = '';
  77. if (array_key_exists('relay_server', $server)) {
  78. $query = "?sni={$server['relay_server']}";
  79. }
  80. return "trojan://{$server['passwd']}@{$server['host']}:{$server['port']}{$query}#{$name}".PHP_EOL;
  81. }
  82. }