Shadowsocks.php 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. <?php
  2. namespace App\Http\Controllers\Client\Protocols;
  3. class Shadowsocks
  4. {
  5. public $flag = 'shadowsocks';
  6. private $servers;
  7. private $user;
  8. public function __construct($user, $servers)
  9. {
  10. $this->user = $user;
  11. $this->servers = $servers;
  12. }
  13. public function handle()
  14. {
  15. $servers = $this->servers;
  16. $user = $this->user;
  17. $configs = [];
  18. $subs = [];
  19. $subs['servers'] = [];
  20. $subs['bytes_used'] = '';
  21. $subs['bytes_remaining'] = '';
  22. $bytesUsed = $user['u'] + $user['d'];
  23. $bytesRemaining = $user['transfer_enable'] - $bytesUsed;
  24. foreach ($servers as $item) {
  25. if ($item['type'] === 'shadowsocks') {
  26. array_push($configs, self::SIP008($item, $user));
  27. }
  28. }
  29. $subs['version'] = 1;
  30. $subs['bytes_used'] = $bytesUsed;
  31. $subs['bytes_remaining'] = $bytesRemaining;
  32. $subs['servers'] = array_merge($subs['servers'] ? $subs['servers'] : [], $configs);
  33. return json_encode($subs, JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT);
  34. }
  35. public static function SIP008($server, $user)
  36. {
  37. $config = [
  38. "id" => $server['id'],
  39. "remarks" => $server['name'],
  40. "server" => $server['host'],
  41. "server_port" => $server['port'],
  42. "password" => $user['uuid'],
  43. "method" => $server['cipher']
  44. ];
  45. return $config;
  46. }
  47. }