UserController-test.php 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. <?php
  2. namespace App\Controllers;
  3. use App\Models\CheckInLog;
  4. use App\Models\InviteCode;
  5. use App\Models\Node;
  6. use App\Models\TrafficLog;
  7. use App\Services\Auth;
  8. use App\Services\Config;
  9. use App\Services\DbConfig;
  10. use App\Utils\Hash;
  11. use App\Utils\Tools;
  12. /**
  13. * HomeController
  14. */
  15. class UserController extends BaseController
  16. {
  17. private $user;
  18. public function __construct()
  19. {
  20. $this->user = Auth::getUser();
  21. }
  22. public function view()
  23. {
  24. $userFooter = DbConfig::get('user-footer');
  25. return parent::view()->assign('userFooter', $userFooter);
  26. }
  27. public function index($request, $response, $args)
  28. {
  29. $msg = DbConfig::get('user-index');
  30. if ($msg == null) {
  31. $msg = "在后台修改用户中心公告...";
  32. }
  33. return $this->view()->assign('msg', $msg)->display('user/index.tpl');
  34. }
  35. public function node($request, $response, $args)
  36. {
  37. $msg = DbConfig::get('user-node');
  38. $user = Auth::getUser();
  39. $nodes = Node::where('type', 1)->orderBy('sort')->get();
  40. return $this->view()->assign('nodes', $nodes)->assign('user', $user)->assign('msg', $msg)->display('user/node.tpl');
  41. }
  42. public function nodeInfo($request, $response, $args)
  43. {
  44. $id = $args['id'];
  45. $node = Node::find($id);
  46. if ($node == null) {
  47. }
  48. $ary['server'] = $node->server;
  49. $ary['server_port'] = $this->user->port;
  50. $ary['password'] = $this->user->passwd;
  51. $ary['method'] = $node->method;
  52. if ($node->custom_method) {
  53. $ary['method'] = $this->user->method;
  54. }
  55. $json = json_encode($ary);
  56. $json_show = json_encode($ary, JSON_PRETTY_PRINT);
  57. $ssurl = $ary['method'] . ":" . $ary['password'] . "@" . $ary['server'] . ":" . $ary['server_port'];
  58. $ssqr = "ss://" . base64_encode($ssurl);
  59. $surge_base = Config::get('baseUrl') . "/downloads/ProxyBase.conf";
  60. $surge_proxy = "#!PROXY-OVERRIDE:ProxyBase.conf\n";
  61. $surge_proxy .= "[Proxy]\n";
  62. $surge_proxy .= "Proxy = custom," . $ary['server'] . "," . $ary['server_port'] . "," . $ary['method'] . "," . $ary['password'] . "," . Config::get('baseUrl') . "/downloads/SSEncrypt.module";
  63. return $this->view()->assign('json', $json)->assign('json_show', $json_show)->assign('ssqr', $ssqr)->assign('surge_base', $surge_base)->assign('surge_proxy', $surge_proxy)->display('user/nodeinfo.tpl');
  64. }
  65. public function profile($request, $response, $args)
  66. {
  67. return $this->view()->display('user/profile.tpl');
  68. }
  69. public function edit($request, $response, $args)
  70. {
  71. return $this->view()->display('user/edit.tpl');
  72. }
  73. public function invite($request, $response, $args)
  74. {
  75. $codes = $this->user->inviteCodes();
  76. return $this->view()->assign('codes', $codes)->display('user/invite.tpl');
  77. }
  78. public function doInvite($request, $response, $args)
  79. {
  80. $n = $this->user->invite_num;
  81. if ($n < 1) {
  82. $res['ret'] = 0;
  83. return $response->getBody()->write(json_encode($res));
  84. }
  85. for ($i = 0; $i < $n; $i++) {
  86. $char = Tools::genRandomChar(32);
  87. $code = new InviteCode();
  88. $code->code = $char;
  89. $code->user_id = $this->user->id;
  90. $code->save();
  91. }
  92. $this->user->invite_num = 0;
  93. $this->user->save();
  94. $res['ret'] = 1;
  95. return $this->echoJson($response, $res);
  96. }
  97. public function sys($request, $response, $args)
  98. {
  99. return $this->view()->assign('ana', "")->display('user/sys.tpl');
  100. }
  101. public function updatePassword($request, $response, $args)
  102. {
  103. $oldpwd = $request->getParam('oldpwd');
  104. $pwd = $request->getParam('pwd');
  105. $repwd = $request->getParam('repwd');
  106. $user = $this->user;
  107. if (!Hash::checkPassword($user->pass, $oldpwd)) {
  108. $res['ret'] = 0;
  109. $res['msg'] = "旧密码错误";
  110. return $response->getBody()->write(json_encode($res));
  111. }
  112. if ($pwd != $repwd) {
  113. $res['ret'] = 0;
  114. $res['msg'] = "两次输入不符合";
  115. return $response->getBody()->write(json_encode($res));
  116. }
  117. if (strlen($pwd) < 8) {
  118. $res['ret'] = 0;
  119. $res['msg'] = "密码太短啦";
  120. return $response->getBody()->write(json_encode($res));
  121. }
  122. $hashPwd = Hash::passwordHash($pwd);
  123. $user->pass = $hashPwd;
  124. $user->save();
  125. $res['ret'] = 1;
  126. $res['msg'] = "ok";
  127. return $this->echoJson($response, $res);
  128. }
  129. public function updateSsPwd($request, $response, $args)
  130. {
  131. $user = Auth::getUser();
  132. $pwd = $request->getParam('sspwd');
  133. $user->updateSsPwd($pwd);
  134. $res['ret'] = 1;
  135. return $this->echoJson($response, $res);
  136. }
  137. public function updateMethod($request, $response, $args)
  138. {
  139. $user = Auth::getUser();
  140. $method = $request->getParam('method');
  141. $method = strtolower($method);
  142. $user->updateMethod($method);
  143. $res['ret'] = 1;
  144. return $this->echoJson($response, $res);
  145. }
  146. public function logout($request, $response, $args)
  147. {
  148. Auth::logout();
  149. $newResponse = $response->withStatus(302)->withHeader('Location', '/auth/login');
  150. return $newResponse;
  151. }
  152. public function doCheckIn($request, $response, $args)
  153. {
  154. if (!$this->user->isAbleToCheckin()) {
  155. $res['msg'] = "您似乎已经签到过了...";
  156. $res['ret'] = 1;
  157. return $response->getBody()->write(json_encode($res));
  158. }
  159. $traffic = rand(Config::get('checkinMin'), Config::get('checkinMax'));
  160. $trafficToAdd = Tools::toMB($traffic);
  161. $this->user->transfer_enable = $this->user->transfer_enable + $trafficToAdd;
  162. $this->user->last_check_in_time = time();
  163. $this->user->save();
  164. // checkin log
  165. try {
  166. $log = new CheckInLog();
  167. $log->user_id = Auth::getUser()->id;
  168. $log->traffic = $trafficToAdd;
  169. $log->checkin_at = time();
  170. $log->save();
  171. } catch (\Exception $e) {
  172. }
  173. $res['msg'] = sprintf("获得了 %u MB流量.", $traffic);
  174. $res['ret'] = 1;
  175. return $this->echoJson($response, $res);
  176. }
  177. public function kill($request, $response, $args)
  178. {
  179. return $this->view()->display('user/kill.tpl');
  180. }
  181. public function handleKill($request, $response, $args)
  182. {
  183. $user = Auth::getUser();
  184. $passwd = $request->getParam('passwd');
  185. // check passwd
  186. $res = array();
  187. if (!Hash::checkPassword($user->pass, $passwd)) {
  188. $res['ret'] = 0;
  189. $res['msg'] = " 密码错误";
  190. return $this->echoJson($response, $res);
  191. }
  192. Auth::logout();
  193. $user->delete();
  194. $res['ret'] = 1;
  195. $res['msg'] = "GG!您的帐号已经从我们的系统中删除.";
  196. return $this->echoJson($response, $res);
  197. }
  198. public function trafficLog($request, $response, $args)
  199. {
  200. $pageNum = 1;
  201. if (isset($request->getQueryParams()["page"])) {
  202. $pageNum = $request->getQueryParams()["page"];
  203. }
  204. $traffic = TrafficLog::where('user_id', $this->user->id)->orderBy('id', 'desc')->paginate(15, ['*'], 'page', $pageNum);
  205. $traffic->setPath('/user/trafficlog');
  206. return $this->view()->assign('logs', $traffic)->display('user/trafficlog.tpl');
  207. }
  208. }