mirror of
				https://github.com/v2board/v2board.git
				synced 2025-11-04 03:11:46 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			60 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace App\Http\Controllers\Client\Protocols;
 | 
						|
 | 
						|
class Shadowsocks
 | 
						|
{
 | 
						|
    public $flag = 'shadowsocks';
 | 
						|
    private $servers;
 | 
						|
    private $user;
 | 
						|
 | 
						|
    public function __construct($user, $servers)
 | 
						|
    {
 | 
						|
        $this->user = $user;
 | 
						|
        $this->servers = $servers;
 | 
						|
    }
 | 
						|
 | 
						|
    public function handle()
 | 
						|
    {
 | 
						|
        $servers = $this->servers;
 | 
						|
        $user = $this->user;
 | 
						|
 | 
						|
        $configs = [];
 | 
						|
        $subs = [];
 | 
						|
        $subs['servers'] = [];
 | 
						|
        $subs['bytes_used'] = '';
 | 
						|
        $subs['bytes_remaining'] = '';
 | 
						|
 | 
						|
        $bytesUsed = $user['u'] + $user['d'];
 | 
						|
        $bytesRemaining = $user['transfer_enable'] - $bytesUsed;
 | 
						|
 | 
						|
        foreach ($servers as $item) {
 | 
						|
            if ($item['type'] === 'shadowsocks'
 | 
						|
                && in_array($item['cipher'], ['aes-128-gcm', 'aes-256-gcm', 'aes-192-gcm', 'chacha20-ietf-poly1305'])
 | 
						|
            ) {
 | 
						|
                array_push($configs, self::SIP008($item, $user));
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        $subs['version'] = 1;
 | 
						|
        $subs['bytes_used'] = $bytesUsed;
 | 
						|
        $subs['bytes_remaining'] = $bytesRemaining;
 | 
						|
        $subs['servers'] = array_merge($subs['servers'] ? $subs['servers'] : [], $configs);
 | 
						|
 | 
						|
        return json_encode($subs, JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT);
 | 
						|
    }
 | 
						|
 | 
						|
    public static function SIP008($server, $user)
 | 
						|
    {
 | 
						|
        $config = [
 | 
						|
            "id" => $server['id'],
 | 
						|
            "remarks" => $server['name'],
 | 
						|
            "server" => $server['host'],
 | 
						|
            "server_port" => $server['port'],
 | 
						|
            "password" => $user['uuid'],
 | 
						|
            "method" => $server['cipher']
 | 
						|
        ];
 | 
						|
        return $config;
 | 
						|
    }
 | 
						|
}
 |