SubscribeController.php 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Http\Models\SsGroup;
  4. use App\Http\Models\SsGroupNode;
  5. use App\Http\Models\SsNode;
  6. use App\Http\Models\User;
  7. use App\Http\Models\UserScoreLog;
  8. use App\Http\Models\UserSubscribe;
  9. use App\Http\Models\UserSubscribeLog;
  10. use Illuminate\Http\Request;
  11. use Response;
  12. use Redirect;
  13. use Cache;
  14. /**
  15. * 订阅控制器
  16. * Class SubscribeController
  17. * @package App\Http\Controllers
  18. */
  19. class SubscribeController extends BaseController
  20. {
  21. protected static $config;
  22. function __construct()
  23. {
  24. self::$config = $this->systemConfig();
  25. }
  26. // 登录页
  27. public function index(Request $request, $code)
  28. {
  29. if (empty($code)) {
  30. return Redirect::to('login');
  31. }
  32. // 校验合法性
  33. $subscribe = UserSubscribe::where('code', $code)->with('user')->first();
  34. if (empty($subscribe)) {
  35. exit('非法请求');
  36. }
  37. $user = User::where('id', $subscribe->user_id)->whereIn('status', [0, 1])->where('enable', 1)->first();
  38. if (empty($user)) {
  39. exit('非法请求');
  40. }
  41. // 更新访问次数
  42. $subscribe->increment('times', 1);
  43. // 记录每次请求
  44. $log = new UserSubscribeLog();
  45. $log->sid = $subscribe->id;
  46. $log->request_ip = $request->getClientIp();
  47. $log->request_time = date('Y-m-d H:i:s');
  48. $log->request_header = $request->headers;
  49. $log->save();
  50. // 获取这个账号可用节点
  51. $group_ids = SsGroup::where('level', '<=', $user->level)->select(['id'])->get();
  52. if (empty($group_ids)) {
  53. exit();
  54. }
  55. $node_ids = SsGroupNode::whereIn('group_id', $group_ids)->select(['node_id'])->get();
  56. $nodeList = SsNode::whereIn('id', $node_ids)->get();
  57. $scheme = '';
  58. foreach ($nodeList as $node) {
  59. $obfs_param = $user->obfs_param ? $this->base64url_encode($user->obfs_param) : '';
  60. //$protocol_param = $user->protocol_param ? $this->base64url_encode($user->protocol_param) : '';
  61. // 生成ssr scheme
  62. $ssr_str = '';
  63. $ssr_str .= $node->server . ':' . $user->port;
  64. $ssr_str .= ':' . $user->protocol . ':' . $user->method;
  65. $ssr_str .= ':' . $user->obfs . ':' . $this->base64url_encode($user->passwd);
  66. $ssr_str .= '/?obfsparam=' . $obfs_param;
  67. //$ssr_str .= '&protoparam=' . $protocol_param;
  68. $ssr_str .= '&remarks=' . $this->base64url_encode($node->name);
  69. $ssr_str .= '&group=' . $this->base64url_encode('VPN');
  70. //$ssr_str .= '&udpport=0';
  71. //$ssr_str .= '&uot=0';
  72. $ssr_str = $this->base64url_encode($ssr_str);
  73. $scheme .= 'ssr://' . $ssr_str . "\n";
  74. }
  75. exit($scheme);
  76. }
  77. }