URLSchemes.php 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <?php
  2. namespace App\Utils\Clients;
  3. use App\Utils\Library\Templates\Client;
  4. class URLSchemes implements Client
  5. {
  6. public static function buildShadowsocks(array $server): string
  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(array $server): string
  13. {
  14. $setting = "{$server['host']}:{$server['port']}:{$server['protocol']}:{$server['method']}:{$server['obfs']}:";
  15. return 'ssr://'.base64url_encode($setting.base64url_encode($server['passwd']).'/?'.http_build_query([
  16. 'obfsparam' => $server['obfs_param'] ? base64url_encode($server['obfs_param']) : '',
  17. 'protoparam' => $server['protocol_param'] ? base64url_encode($server['protocol_param']) : '',
  18. 'remarks' => $server['name'] ? base64url_encode($server['name']) : '',
  19. 'group' => $server['group'] ? base64url_encode($server['group']) : '',
  20. 'udpport' => $server['udp'],
  21. 'uot' => 0,
  22. ])).PHP_EOL;
  23. }
  24. public static function buildVmess(array $server): string
  25. {
  26. $config = [
  27. 'v' => '2',
  28. 'ps' => $server['name'],
  29. 'add' => $server['host'],
  30. 'port' => $server['port'],
  31. 'id' => $server['uuid'],
  32. 'aid' => $server['v2_alter_id'],
  33. 'net' => $server['v2_net'],
  34. 'type' => $server['v2_type'],
  35. 'host' => $server['v2_host'],
  36. 'path' => $server['v2_path'],
  37. 'tls' => $server['v2_tls'],
  38. 'sni' => $server['v2_sni'],
  39. 'remark' => $server['name'],
  40. ];
  41. return 'vmess://'.base64_encode(json_encode($config)).PHP_EOL;
  42. }
  43. public static function buildTrojan(array $server): string
  44. {
  45. $name = rawurlencode($server['name']);
  46. $query = '';
  47. if (array_key_exists('sni', $server)) {
  48. $query = "?sni={$server['sni']}";
  49. }
  50. return "trojan://{$server['passwd']}@{$server['host']}:{$server['port']}$query#$name".PHP_EOL;
  51. }
  52. }