ApiController.php 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. <?php
  2. namespace App\Controllers;
  3. use App\Models\Node;
  4. use App\Models\User;
  5. use App\Services\Factory;
  6. use App\Services\Config;
  7. use App\Utils\Tools;
  8. use App\Utils\Hash;
  9. use App\Utils\Helper;
  10. /**
  11. * ApiController
  12. */
  13. class ApiController extends BaseController
  14. {
  15. public function index()
  16. {
  17. }
  18. public function token($request, $response, $args)
  19. {
  20. $accessToken = $id = $args['token'];
  21. $storage = Factory::createTokenStorage();
  22. $token = $storage->get($accessToken);
  23. if ($token == null) {
  24. $res['ret'] = 0;
  25. $res['msg'] = 'token is null';
  26. return $this->echoJson($response, $res);
  27. }
  28. $res['ret'] = 1;
  29. $res['msg'] = 'ok';
  30. $res['data'] = $token;
  31. return $this->echoJson($response, $res);
  32. }
  33. public function newToken($request, $response, $args)
  34. {
  35. // $data = $request->post('sdf');
  36. $email = $request->getParam('email');
  37. $email = strtolower($email);
  38. $passwd = $request->getParam('passwd');
  39. // Handle Login
  40. $user = User::where('email', '=', $email)->first();
  41. if ($user == null) {
  42. $res['ret'] = 0;
  43. $res['msg'] = '401 邮箱或者密码错误';
  44. return $this->echoJson($response, $res);
  45. }
  46. if (!Hash::checkPassword($user->pass, $passwd)) {
  47. $res['ret'] = 0;
  48. $res['msg'] = '402 邮箱或者密码错误';
  49. return $this->echoJson($response, $res);
  50. }
  51. $tokenStr = Tools::genToken();
  52. $storage = Factory::createTokenStorage();
  53. $expireTime = time() + 3600 * 24 * 7;
  54. if ($storage->store($tokenStr, $user, $expireTime)) {
  55. $res['ret'] = 1;
  56. $res['msg'] = 'ok';
  57. $res['data']['token'] = $tokenStr;
  58. $res['data']['user_id'] = $user->id;
  59. return $this->echoJson($response, $res);
  60. }
  61. $res['ret'] = 0;
  62. $res['msg'] = 'system error';
  63. return $this->echoJson($response, $res);
  64. }
  65. public function node($request, $response, $args)
  66. {
  67. $accessToken = Helper::getTokenFromReq($request);
  68. $storage = Factory::createTokenStorage();
  69. $token = $storage->get($accessToken);
  70. $user = User::find($token->userId);
  71. $nodes = Node::where('sort', 0)->where('type', '1')->where(
  72. static function ($query) use ($user) {
  73. $query->where('node_group', '=', $user->node_group)
  74. ->orWhere('node_group', '=', 0);
  75. }
  76. )->orderBy('name')->get();
  77. $mu_nodes = Node::where('sort', 9)->where('node_class', '<=', $user->class)->where('type', '1')->where(
  78. static function ($query) use ($user) {
  79. $query->where('node_group', '=', $user->node_group)
  80. ->orWhere('node_group', '=', 0);
  81. }
  82. )->orderBy('name')->get();
  83. $temparray = array();
  84. foreach ($nodes as $node) {
  85. if ($node->mu_only == 0) {
  86. $temparray[] = array('remarks' => $node->name,
  87. 'server' => $node->server,
  88. 'server_port' => $user->port,
  89. 'method' => $node->custom_method == 1 ? $user->method : $node->method,
  90. 'obfs' => str_replace('_compatible', '', (($node->custom_rss == 1 && !($user->obfs == 'plain' && $user->protocol == 'origin')) ? $user->obfs : 'plain')),
  91. 'obfsparam' => ($node->custom_rss == 1 && !($user->obfs == 'plain' && $user->protocol == 'origin')) ? $user->obfs_param : '',
  92. 'remarks_base64' => base64_encode($node->name),
  93. 'password' => $user->passwd,
  94. 'tcp_over_udp' => false,
  95. 'udp_over_tcp' => false,
  96. 'group' => Config::get('appName'),
  97. 'protocol' => str_replace('_compatible', '', (($node->custom_rss == 1 && !($user->obfs == 'plain' && $user->protocol == 'origin')) ? $user->protocol : 'origin')),
  98. 'obfs_udp' => false,
  99. 'enable' => true);
  100. }
  101. if ($node->custom_rss == 1) {
  102. foreach ($mu_nodes as $mu_node) {
  103. $mu_user = User::where('port', '=', $mu_node->server)->first();
  104. $mu_user->obfs_param = $user->getMuMd5();
  105. $temparray[] = array('remarks' => $node->name . '- ' . $mu_node->server . ' 单端口',
  106. 'server' => $node->server,
  107. 'server_port' => $mu_user->port,
  108. 'method' => $mu_user->method,
  109. 'group' => Config::get('appName'),
  110. 'obfs' => str_replace('_compatible', '', (($node->custom_rss == 1 && !($mu_user->obfs == 'plain' && $mu_user->protocol == 'origin')) ? $mu_user->obfs : 'plain')),
  111. 'obfsparam' => ($node->custom_rss == 1 && !($mu_user->obfs == 'plain' && $mu_user->protocol == 'origin')) ? $mu_user->obfs_param : '',
  112. 'remarks_base64' => base64_encode($node->name . '- ' . $mu_node->server . ' 单端口'),
  113. 'password' => $mu_user->passwd,
  114. 'tcp_over_udp' => false,
  115. 'udp_over_tcp' => false,
  116. 'protocol' => str_replace('_compatible', '', (($node->custom_rss == 1 && !($mu_user->obfs == 'plain' && $mu_user->protocol == 'origin')) ? $mu_user->protocol : 'origin')),
  117. 'obfs_udp' => false,
  118. 'enable' => true);
  119. }
  120. }
  121. }
  122. $res['ret'] = 1;
  123. $res['msg'] = 'ok';
  124. $res['data'] = $temparray;
  125. return $this->echoJson($response, $res);
  126. }
  127. public function userInfo($request, $response, $args)
  128. {
  129. $id = $args['id'];
  130. $accessToken = Helper::getTokenFromReq($request);
  131. $storage = Factory::createTokenStorage();
  132. $token = $storage->get($accessToken);
  133. if ($id != $token->userId) {
  134. $res['ret'] = 0;
  135. $res['msg'] = 'access denied';
  136. return $this->echoJson($response, $res);
  137. }
  138. $user = User::find($token->userId);
  139. $user->pass = null;
  140. $data = $user;
  141. $res['ret'] = 1;
  142. $res['msg'] = 'ok';
  143. $res['data'] = $data;
  144. return $this->echoJson($response, $res);
  145. }
  146. }