ClientController.php 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <?php
  2. namespace App\Http\Controllers\Client;
  3. use App\Http\Controllers\Client\Protocols\V2rayN;
  4. use App\Http\Controllers\Controller;
  5. use App\Services\ServerService;
  6. use Illuminate\Http\Request;
  7. use App\Services\UserService;
  8. class ClientController extends Controller
  9. {
  10. public function subscribe(Request $request)
  11. {
  12. $flag = $request->input('flag')
  13. ?? (isset($_SERVER['HTTP_USER_AGENT'])
  14. ? $_SERVER['HTTP_USER_AGENT']
  15. : '');
  16. $flag = strtolower($flag);
  17. $user = $request->user;
  18. // account not expired and is not banned.
  19. $userService = new UserService();
  20. if ($userService->isAvailable($user)) {
  21. $serverService = new ServerService();
  22. $servers = $serverService->getAvailableServers($user);
  23. $this->setSubscribeInfoToServers($servers, $user);
  24. if ($flag) {
  25. foreach (glob(app_path('Http//Controllers//Client//Protocols') . '/*.php') as $file) {
  26. $file = 'App\\Http\\Controllers\\Client\\Protocols\\' . basename($file, '.php');
  27. $class = new $file($user, $servers);
  28. if (strpos($flag, $class->flag) !== false) {
  29. die($class->handle());
  30. }
  31. }
  32. }
  33. // todo 1.5.3 remove
  34. $class = new V2rayN($user, $servers);
  35. die($class->handle());
  36. die('该客户端暂不支持进行订阅');
  37. }
  38. }
  39. private function setSubscribeInfoToServers(&$servers, $user)
  40. {
  41. if (!(int)config('v2board.show_info_to_server_enable', 0)) return;
  42. $useTraffic = round($user['u'] / (1024*1024*1024), 2) + round($user['d'] / (1024*1024*1024), 2);
  43. $totalTraffic = round($user['transfer_enable'] / (1024*1024*1024), 2);
  44. $remainingTraffic = $totalTraffic - $useTraffic;
  45. $expiredDate = $user['expired_at'] ? date('Y-m-d', $user['expired_at']) : '长期有效';
  46. $userService = new UserService();
  47. $resetDay = $userService->getResetDay($user);
  48. array_unshift($servers, array_merge($servers[0], [
  49. 'name' => "套餐到期:{$expiredDate}",
  50. ]));
  51. if ($resetDay) {
  52. array_unshift($servers, array_merge($servers[0], [
  53. 'name' => "距离下次重置剩余:{$resetDay} 天",
  54. ]));
  55. }
  56. array_unshift($servers, array_merge($servers[0], [
  57. 'name' => "剩余流量:{$remainingTraffic} GB",
  58. ]));
  59. }
  60. }