URLSchemes.php 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <?php
  2. namespace App\Components\Client;
  3. class URLSchemes
  4. {
  5. public static function buildShadowsocks($server)
  6. {
  7. $name = rawurlencode($server['name']);
  8. $str = base64url_encode("{$server['method']}:{$server['method']}");
  9. return "ss://{$str}@{$server['host']}:{$server['port']}#{$name}".PHP_EOL;
  10. }
  11. public static function buildShadowsocksr($server)
  12. {
  13. $setting = "{$server['host']}:{$server['port']}:{$server['protocol']}:{$server['method']}:{$server['obfs']}:";
  14. 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;
  15. }
  16. // TODO: More study required about id usage https://shadowsocks.org/en/wiki/SIP008-Online-Configuration-Delivery.html
  17. public static function buildShadowsocksSIP008($server)
  18. {
  19. return [
  20. 'id' => $server['id'],
  21. 'remark' => $server['name'],
  22. 'server' => $server['host'],
  23. 'server_port' => $server['port'],
  24. 'password' => $server['passwd'],
  25. 'method' => $server['method'],
  26. ];
  27. }
  28. public static function buildVmess($server)
  29. {
  30. $config = [
  31. 'v' => '2',
  32. 'ps' => $server['name'],
  33. 'add' => $server['host'],
  34. 'port' => $server['port'],
  35. 'id' => $server['uuid'],
  36. 'aid' => $server['v2_alter_id'],
  37. 'net' => $server['v2_net'],
  38. 'type' => $server['v2_type'],
  39. 'host' => $server['v2_host'],
  40. 'path' => $server['v2_path'],
  41. 'tls' => $server['v2_tls'],
  42. ];
  43. return 'vmess://'.base64_encode(json_encode($config)).PHP_EOL;
  44. }
  45. public static function buildTrojan($server)
  46. {
  47. $name = rawurlencode($server['name']);
  48. $query = '';
  49. if (array_key_exists('relay_server', $server)) {
  50. $query = "?sni={$server['relay_server']}";
  51. }
  52. return "trojan://{$server['passwd']}@{$server['host']}:{$server['port']}{$query}#{$name}".PHP_EOL;
  53. }
  54. }