Shadowsocks.php 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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. && in_array($item['cipher'], ['aes-128-gcm', 'aes-256-gcm', 'aes-192-gcm'])
  27. ) {
  28. array_push($configs, self::SIP008($item, $user));
  29. }
  30. }
  31. $subs['version'] = 1;
  32. $subs['bytes_used'] = $bytesUsed;
  33. $subs['bytes_remaining'] = $bytesRemaining;
  34. $subs['servers'] = array_merge($subs['servers'] ? $subs['servers'] : [], $configs);
  35. return json_encode($subs, JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT);
  36. }
  37. public static function SIP008($server, $user)
  38. {
  39. $config = [
  40. "id" => $server['id'],
  41. "remarks" => $server['name'],
  42. "server" => $server['host'],
  43. "server_port" => $server['port'],
  44. "password" => $user['uuid'],
  45. "method" => $server['cipher']
  46. ];
  47. return $config;
  48. }
  49. }