1
0

ClientController.php 2.4 KB

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