VueController.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441
  1. <?php
  2. namespace App\Controllers;
  3. use App\Models\InviteCode;
  4. use App\Models\User;
  5. use App\Models\Code;
  6. use App\Models\Payback;
  7. use App\Models\Ann;
  8. use App\Models\Shop;
  9. use App\Services\Auth;
  10. use App\Services\Config;
  11. use App\Utils\AliPay;
  12. use App\Utils\Tools;
  13. use App\Utils\TelegramSessionManager;
  14. use App\Utils\Spay_tool;
  15. use App\Utils\Geetest;
  16. use App\Utils\URL;
  17. use App\Models\Node;
  18. use App\Models\Relay;
  19. class VueController extends BaseController
  20. {
  21. public function getGlobalConfig($request, $response, $args)
  22. {
  23. $GtSdk = null;
  24. $recaptcha_sitekey = null;
  25. $user = $this->user;
  26. if (Config::get('captcha_provider') != '') {
  27. switch (Config::get('captcha_provider')) {
  28. case 'recaptcha':
  29. $recaptcha_sitekey = Config::get('recaptcha_sitekey');
  30. break;
  31. case 'geetest':
  32. $uid = time() . random_int(1, 10000);
  33. $GtSdk = Geetest::get($uid);
  34. break;
  35. }
  36. }
  37. if (Config::get('enable_telegram') == true) {
  38. $login_text = TelegramSessionManager::add_login_session();
  39. $login = explode('|', $login_text);
  40. $login_token = $login[0];
  41. $login_number = $login[1];
  42. } else {
  43. $login_token = '';
  44. $login_number = '';
  45. }
  46. $res['globalConfig'] = array(
  47. 'geetest_html' => $GtSdk,
  48. 'login_token' => $login_token,
  49. 'login_number' => $login_number,
  50. 'telegram_bot' => Config::get('telegram_bot'),
  51. 'enable_logincaptcha' => Config::get('enable_login_captcha'),
  52. 'enable_regcaptcha' => Config::get('enable_reg_captcha'),
  53. 'enable_checkin_captcha' => Config::get('enable_checkin_captcha'),
  54. 'base_url' => Config::get('baseUrl'),
  55. 'recaptcha_sitekey' => $recaptcha_sitekey,
  56. 'captcha_provider' => Config::get('captcha_provider'),
  57. 'jump_delay' => Config::get('jump_delay'),
  58. 'register_mode' => Config::get('register_mode'),
  59. 'enable_email_verify' => Config::get('enable_email_verify'),
  60. 'appName' => Config::get('appName'),
  61. 'dateY' => date('Y'),
  62. 'isLogin' => $user->isLogin,
  63. 'enable_telegram' => Config::get('enable_telegram'),
  64. 'enable_mylivechat' => Config::get('enable_mylivechat'),
  65. 'enable_flag' => Config::get('enable_flag'),
  66. 'payment_type' => Config::get('payment_system'),
  67. );
  68. $res['ret'] = 1;
  69. return $response->getBody()->write(json_encode($res));
  70. }
  71. public function vuelogout($request, $response, $args)
  72. {
  73. Auth::logout();
  74. $res['ret'] = 1;
  75. return $response->getBody()->write(json_encode($res));
  76. }
  77. public function getUserInfo($request, $response, $args)
  78. {
  79. $user = $this->user;
  80. if (!$user->isLogin) {
  81. $res['ret'] = -1;
  82. return $response->getBody()->write(json_encode($res));
  83. }
  84. $pre_user = URL::cloneUser($user);
  85. $user->ssr_url_all = URL::getAllUrl($pre_user, 0, 0);
  86. $user->ssr_url_all_mu = URL::getAllUrl($pre_user, 1, 0);
  87. $user->ss_url_all = URL::getAllUrl($pre_user, 0, 2);
  88. $ssinfo = URL::getSSConnectInfo($pre_user);
  89. $user->ssd_url_all = URL::getAllSSDUrl($ssinfo);
  90. $user->isAbleToCheckin = $user->isAbleToCheckin();
  91. $ssr_sub_token = LinkController::GenerateSSRSubCode($this->user->id, 0);
  92. $GtSdk = null;
  93. $recaptcha_sitekey = null;
  94. if (Config::get('captcha_provider') != '') {
  95. switch (Config::get('captcha_provider')) {
  96. case 'recaptcha':
  97. $recaptcha_sitekey = Config::get('recaptcha_sitekey');
  98. break;
  99. case 'geetest':
  100. $uid = time() . random_int(1, 10000);
  101. $GtSdk = Geetest::get($uid);
  102. break;
  103. }
  104. }
  105. $Ann = Ann::orderBy('date', 'desc')->first();
  106. $display_ios_class = Config::get('display_ios_class');
  107. $ios_account = Config::get('ios_account');
  108. $ios_password = Config::get('ios_password');
  109. $mergeSub = Config::get('mergeSub');
  110. $subUrl = Config::get('subUrl');
  111. $baseUrl = Config::get('baseUrl');
  112. $user['online_ip_count'] = $user->online_ip_count();
  113. $res['info'] = array(
  114. 'user' => $user,
  115. 'ssrSubToken' => $ssr_sub_token,
  116. 'displayIosClass' => $display_ios_class,
  117. 'iosAccount' => $ios_account,
  118. 'iosPassword' => $ios_password,
  119. 'mergeSub' => $mergeSub,
  120. 'subUrl' => $subUrl,
  121. 'baseUrl' => $baseUrl,
  122. 'ann' => $Ann,
  123. 'recaptchaSitekey' => $recaptcha_sitekey,
  124. 'GtSdk' => $GtSdk,
  125. );
  126. $res['ret'] = 1;
  127. return $response->getBody()->write(json_encode($res));
  128. }
  129. public function getUserInviteInfo($request, $response, $args)
  130. {
  131. $user = $this->user;
  132. if (!$user->isLogin) {
  133. $res['ret'] = -1;
  134. return $response->getBody()->write(json_encode($res));
  135. }
  136. $code = InviteCode::where('user_id', $user->id)->first();
  137. if ($code == null) {
  138. $user->addInviteCode();
  139. $code = InviteCode::where('user_id', $user->id)->first();
  140. }
  141. $pageNum = $request->getParam('current');
  142. $paybacks = Payback::where('ref_by', $user->id)->orderBy('id', 'desc')->paginate(15, ['*'], 'page', $pageNum);
  143. if (!$paybacks_sum = Payback::where('ref_by', $user->id)->sum('ref_get')) {
  144. $paybacks_sum = 0;
  145. }
  146. $paybacks->setPath('/#/user/panel');
  147. $res['inviteInfo'] = array(
  148. 'code' => $code,
  149. 'paybacks' => $paybacks,
  150. 'paybacks_sum' => $paybacks_sum,
  151. 'invite_num' => $user->invite_num,
  152. 'invitePrice' => Config::get('invite_price'),
  153. 'customPrice' => Config::get('custom_invite_price'),
  154. 'invite_gift' => Config::get('invite_gift'),
  155. 'invite_get_money' => Config::get('invite_get_money'),
  156. 'code_payback' => Config::get('code_payback'),
  157. );
  158. $res['ret'] = 1;
  159. return $response->getBody()->write(json_encode($res));
  160. }
  161. public function getUserShops($request, $response, $args)
  162. {
  163. $user = $this->user;
  164. if (!$user->isLogin) {
  165. $res['ret'] = -1;
  166. return $response->getBody()->write(json_encode($res));
  167. }
  168. $shops = Shop::where('status', 1)->orderBy('name')->get();
  169. $res['arr'] = array(
  170. 'shops' => $shops,
  171. );
  172. $res['ret'] = 1;
  173. return $response->getBody()->write(json_encode($res));
  174. }
  175. public function getAllResourse($request, $response, $args)
  176. {
  177. $user = $this->user;
  178. if (!$user->isLogin) {
  179. $res['ret'] = -1;
  180. return $response->getBody()->write(json_encode($res));
  181. }
  182. $res['resourse'] = array(
  183. 'money' => $user->money,
  184. 'class' => $user->class,
  185. 'class_expire' => $user->class_expire,
  186. 'expire_in' => $user->expire_in,
  187. 'online_ip_count' => $user->online_ip_count(),
  188. 'node_speedlimit' => $user->node_speedlimit,
  189. 'node_connector' => $user->node_connector,
  190. );
  191. $res['ret'] = 1;
  192. return $response->getBody()->write(json_encode($res));
  193. }
  194. public function getNewSubToken($request, $response, $args)
  195. {
  196. $user = $this->user;
  197. if (!$user->isLogin) {
  198. $res['ret'] = -1;
  199. return $response->getBody()->write(json_encode($res));
  200. }
  201. $user->clean_link();
  202. $ssr_sub_token = LinkController::GenerateSSRSubCode($this->user->id, 0);
  203. $res['arr'] = array(
  204. 'ssr_sub_token' => $ssr_sub_token,
  205. );
  206. $res['ret'] = 1;
  207. return $response->getBody()->write(json_encode($res));
  208. }
  209. public function getNewInviteCode($request, $response, $args)
  210. {
  211. $user = $this->user;
  212. if (!$user->isLogin) {
  213. $res['ret'] = -1;
  214. return $response->getBody()->write(json_encode($res));
  215. }
  216. $user->clear_inviteCodes();
  217. $code = InviteCode::where('user_id', $this->user->id)->first();
  218. if ($code == null) {
  219. $this->user->addInviteCode();
  220. $code = InviteCode::where('user_id', $this->user->id)->first();
  221. }
  222. $res['arr'] = array(
  223. 'code' => $code,
  224. );
  225. $res['ret'] = 1;
  226. return $response->getBody()->write(json_encode($res));
  227. }
  228. public function getTransfer($request, $response, $args)
  229. {
  230. $user = $this->user;
  231. if (!$user->isLogin) {
  232. $res['ret'] = -1;
  233. return $response->getBody()->write(json_encode($res));
  234. }
  235. $res['arr'] = array(
  236. 'todayUsedTraffic' => $user->TodayusedTraffic(),
  237. 'lastUsedTraffic' => $user->LastusedTraffic(),
  238. 'unUsedTraffic' => $user->unusedTraffic(),
  239. );
  240. $res['ret'] = 1;
  241. return $response->getBody()->write(json_encode($res));
  242. }
  243. public function getCaptcha($request, $response, $args)
  244. {
  245. $GtSdk = null;
  246. $recaptcha_sitekey = null;
  247. if (Config::get('captcha_provider') != '') {
  248. switch (Config::get('captcha_provider')) {
  249. case 'recaptcha':
  250. $recaptcha_sitekey = Config::get('recaptcha_sitekey');
  251. $res['recaptchaKey'] = $recaptcha_sitekey;
  252. break;
  253. case 'geetest':
  254. $uid = time() . random_int(1, 10000);
  255. $GtSdk = Geetest::get($uid);
  256. $res['GtSdk'] = $GtSdk;
  257. break;
  258. }
  259. }
  260. $res['respon'] = 1;
  261. return $response->getBody()->write(json_encode($res));
  262. }
  263. public function getChargeLog($request, $response, $args)
  264. {
  265. $user = $this->user;
  266. if (!$user->isLogin) {
  267. $res['ret'] = -1;
  268. return $response->getBody()->write(json_encode($res));
  269. }
  270. $pageNum = $request->getParam('current');
  271. $codes = Code::where('type', '<>', '-2')->where('userid', '=', $user->id)->orderBy('id', 'desc')->paginate(15, ['*'], 'page', $pageNum);
  272. $codes->setPath('/#/user/code');
  273. $res['codes'] = $codes;
  274. $res['ret'] = 1;
  275. return $response->getBody()->write(json_encode($res));
  276. }
  277. public function getNodeList($request, $response, $args)
  278. {
  279. $user = Auth::getUser();
  280. if (!$this->user->isLogin) {
  281. $res['ret'] = -1;
  282. return $response->getBody()->write(json_encode($res));
  283. }
  284. $nodes = Node::where('type', 1)->orderBy('node_class')->orderBy('name')->get();
  285. $relay_rules = Relay::where('user_id', $this->user->id)->orwhere('user_id', 0)->orderBy('id', 'asc')->get();
  286. if (!Tools::is_protocol_relay($user)) {
  287. $relay_rules = array();
  288. }
  289. $array_nodes = array();
  290. $nodes_muport = array();
  291. foreach ($nodes as $node) {
  292. if ($node->node_group != $user->node_group && $node->node_group != 0) {
  293. continue;
  294. }
  295. if ($node->sort == 9) {
  296. $mu_user = User::where('port', '=', $node->server)->first();
  297. $mu_user->obfs_param = $this->user->getMuMd5();
  298. $nodes_muport[] = array('server' => $node, 'user' => $mu_user);
  299. continue;
  300. }
  301. $array_node = array();
  302. $array_node['id'] = $node->id;
  303. $array_node['class'] = $node->node_class;
  304. $array_node['name'] = $node->name;
  305. if ($this->user->class < $node->node_class) {
  306. $array_node['server'] = '***.***.***.***';
  307. } elseif ($node->sort == 13) {
  308. $server = Tools::ssv2Array($node->server);
  309. $array_node['server'] = $server['add'];
  310. } else {
  311. $array_node['server'] = $node->server;
  312. }
  313. $array_node['sort'] = $node->sort;
  314. $array_node['info'] = $node->info;
  315. $array_node['mu_only'] = $node->mu_only;
  316. $array_node['group'] = $node->node_group;
  317. $array_node['raw_node'] = $node;
  318. $regex = Config::get('flag_regex');
  319. $matches = array();
  320. preg_match($regex, $node->name, $matches);
  321. if (isset($matches[0])) {
  322. $array_node['flag'] = $matches[0] . '.png';
  323. } else {
  324. $array_node['flag'] = 'unknown.png';
  325. }
  326. $node_online = $node->isNodeOnline();
  327. if ($node_online === null) {
  328. $array_node['online'] = 0;
  329. } elseif ($node_online === true) {
  330. $array_node['online'] = 1;
  331. } elseif ($node_online === false) {
  332. $array_node['online'] = -1;
  333. }
  334. if (in_array($node->sort, array(0, 7, 8, 10, 11, 12, 13))) {
  335. $array_node['online_user'] = $node->getOnlineUserCount();
  336. } else {
  337. $array_node['online_user'] = -1;
  338. }
  339. $nodeLoad = $node->getNodeLoad();
  340. if (isset($nodeLoad[0]['load'])) {
  341. $array_node['latest_load'] = (explode(' ', $nodeLoad[0]['load']))[0] * 100;
  342. } else {
  343. $array_node['latest_load'] = -1;
  344. }
  345. $array_node['traffic_used'] = (int)Tools::flowToGB($node->node_bandwidth);
  346. $array_node['traffic_limit'] = (int)Tools::flowToGB($node->node_bandwidth_limit);
  347. if ($node->node_speedlimit == 0.0) {
  348. $array_node['bandwidth'] = 0;
  349. } elseif ($node->node_speedlimit >= 1024.00) {
  350. $array_node['bandwidth'] = round($node->node_speedlimit / 1024.00, 1) . 'Gbps';
  351. } else {
  352. $array_node['bandwidth'] = $node->node_speedlimit . 'Mbps';
  353. }
  354. $array_node['traffic_rate'] = $node->traffic_rate;
  355. $array_node['status'] = $node->status;
  356. $array_nodes[] = $array_node;
  357. }
  358. $res['nodeinfo'] = array(
  359. 'nodes' => $array_nodes,
  360. 'nodes_muport' => $nodes_muport,
  361. 'relay_rules' => $relay_rules,
  362. 'user' => $user,
  363. 'tools' => new Tools(),
  364. );
  365. $res['ret'] = 1;
  366. return $response->getBody()->write(json_encode($res));
  367. }
  368. }