mirror of
				https://github.com/v2board/v2board.git
				synced 2025-11-01 01:41:47 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			65 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace App\Http\Controllers\Client;
 | |
| 
 | |
| use App\Http\Controllers\Client\Protocols\V2rayN;
 | |
| use App\Http\Controllers\Controller;
 | |
| use App\Services\ServerService;
 | |
| use Illuminate\Http\Request;
 | |
| use App\Services\UserService;
 | |
| 
 | |
| class ClientController extends Controller
 | |
| {
 | |
|     public function subscribe(Request $request)
 | |
|     {
 | |
|         $flag = $request->input('flag')
 | |
|             ?? (isset($_SERVER['HTTP_USER_AGENT'])
 | |
|                 ? $_SERVER['HTTP_USER_AGENT']
 | |
|                 : '');
 | |
|         $flag = strtolower($flag);
 | |
|         $user = $request->user;
 | |
|         // account not expired and is not banned.
 | |
|         $userService = new UserService();
 | |
|         if ($userService->isAvailable($user)) {
 | |
|             $serverService = new ServerService();
 | |
|             $servers = $serverService->getAvailableServers($user);
 | |
|             $this->setSubscribeInfoToServers($servers, $user);
 | |
|             if ($flag) {
 | |
|                 foreach (glob(app_path('Http//Controllers//Client//Protocols') . '/*.php') as $file) {
 | |
|                     $file = 'App\\Http\\Controllers\\Client\\Protocols\\' . basename($file, '.php');
 | |
|                     $class = new $file($user, $servers);
 | |
|                     if (strpos($flag, $class->flag) !== false) {
 | |
|                         die($class->handle());
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|             // todo 1.5.3 remove
 | |
|             $class = new V2rayN($user, $servers);
 | |
|             die($class->handle());
 | |
|             die('该客户端暂不支持进行订阅');
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private function setSubscribeInfoToServers(&$servers, $user)
 | |
|     {
 | |
|         if (!(int)config('v2board.show_info_to_server_enable', 0)) return;
 | |
|         $useTraffic = round($user['u'] / (1024*1024*1024), 2) + round($user['d'] / (1024*1024*1024), 2);
 | |
|         $totalTraffic = round($user['transfer_enable'] / (1024*1024*1024), 2);
 | |
|         $remainingTraffic = $totalTraffic - $useTraffic;
 | |
|         $expiredDate = $user['expired_at'] ? date('Y-m-d', $user['expired_at']) : '长期有效';
 | |
|         $userService = new UserService();
 | |
|         $resetDay = $userService->getResetDay($user);
 | |
|         array_unshift($servers, array_merge($servers[0], [
 | |
|             'name' => "套餐到期:{$expiredDate}",
 | |
|         ]));
 | |
|         if ($resetDay) {
 | |
|             array_unshift($servers, array_merge($servers[0], [
 | |
|                 'name' => "距离下次重置剩余:{$resetDay} 天",
 | |
|             ]));
 | |
|         }
 | |
|         array_unshift($servers, array_merge($servers[0], [
 | |
|             'name' => "剩余流量:{$remainingTraffic} GB",
 | |
|         ]));
 | |
|     }
 | |
| }
 |