'操作', 'querys' => '查询', 'id' => 'ID', 'user_name' => '用户名', 'remark' => '备注', 'email' => '邮箱', 'money' => '金钱', 'im_type' => '联络方式类型', 'im_value' => '联络方式详情', 'node_group' => '群组', 'expire_in' => '账户过期时间', 'class' => '等级', 'class_expire' => '等级过期时间', 'passwd' => '连接密码', 'port' => '连接端口', 'method' => '加密方式', 'protocol' => '连接协议', 'obfs' => '混淆方式', 'obfs_param' => '混淆参数', 'online_ip_count' => '在线IP数', 'last_ss_time' => '上次使用时间', 'used_traffic' => '已用流量/GB', 'enable_traffic' => '总流量/GB', 'last_checkin_time' => '上次签到时间', 'today_traffic' => '今日流量', 'enable' => '是否启用', 'reg_date' => '注册时间', 'reg_ip' => '注册IP', 'auto_reset_day' => '自动重置流量日', 'auto_reset_bandwidth' => '自动重置流量/GB', 'ref_by' => '邀请人ID', 'ref_by_user_name' => '邀请人用户名', 'top_up' => '累计充值' ); $table_config['default_show_column'] = array('op', 'id', 'user_name', 'remark', 'email'); $table_config['ajax_url'] = 'user/ajax'; return $response->write( $this->view() ->assign('shops', Shop::orderBy('name')->get()) ->assign('table_config', $table_config) ->display('admin/user/index.tpl') ); } /** * @param Request $request * @param Response $response * @param array $args */ public function createNewUser($request, $response, $args) { # 需要一个 userEmail $email = $request->getParam('userEmail'); $email = trim($email); $email = strtolower($email); $money = (int) trim($request->getParam('userMoney')); $shop_id = (int) $request->getParam('userShop'); $user = User::where('email', $email)->first(); if ($user != null) { return $response->withJson([ 'ret' => 0, 'msg' => '邮箱已经被注册了' ]); } // do reg user $user = new User(); $current_timestamp = time(); $pass = Tools::genRandomChar(); $user->user_name = $email; $user->email = $email; $user->pass = Hash::passwordHash($pass); $user->passwd = Tools::genRandomChar(16); $user->uuid = Uuid::uuid3(Uuid::NAMESPACE_DNS, $email . '|' . $current_timestamp); $user->port = Tools::getAvPort(); $user->t = 0; $user->u = 0; $user->d = 0; $user->method = Config::getconfig('Register.string.defaultMethod'); $user->protocol = Config::getconfig('Register.string.defaultProtocol'); $user->protocol_param = Config::getconfig('Register.string.defaultProtocol_param'); $user->obfs = Config::getconfig('Register.string.defaultObfs'); $user->obfs_param = Config::getconfig('Register.string.defaultObfs_param'); $user->forbidden_ip = $_ENV['reg_forbidden_ip']; $user->forbidden_port = $_ENV['reg_forbidden_port']; $user->im_type = 2; $user->im_value = $email; $user->transfer_enable = Tools::toGB((int) Config::getconfig('Register.string.defaultTraffic')); $user->invite_num = (int) Config::getconfig('Register.string.defaultInviteNum'); $user->auto_reset_day = $_ENV['reg_auto_reset_day']; $user->auto_reset_bandwidth = $_ENV['reg_auto_reset_bandwidth']; $user->money = ($money != -1 ? $money : 0); $user->class_expire = date('Y-m-d H:i:s', time() + (int) Config::getconfig('Register.string.defaultClass_expire') * 3600); $user->class = (int) Config::getconfig('Register.string.defaultClass'); $user->node_connector = (int) Config::getconfig('Register.string.defaultConn'); $user->node_speedlimit = (int) Config::getconfig('Register.string.defaultSpeedlimit'); $user->expire_in = date('Y-m-d H:i:s', time() + (int) Config::getconfig('Register.string.defaultExpire_in') * 86400); $user->reg_date = date('Y-m-d H:i:s'); $user->reg_ip = $_SERVER['REMOTE_ADDR']; $user->theme = $_ENV['theme']; $groups = explode(',', $_ENV['random_group']); $user->node_group = $groups[array_rand($groups)]; $ga = new GA(); $secret = $ga->createSecret(); $user->ga_token = $secret; $user->ga_enable = 0; if ($user->save()) { $res['ret'] = 1; $res['msg'] = '新用户注册成功 用户名: ' . $email . ' 随机初始密码: ' . $pass; $res['email_error'] = 'success'; if ($shop_id > 0) { $shop = Shop::find($shop_id); if ($shop != null) { $bought = new Bought(); $bought->userid = $user->id; $bought->shopid = $shop->id; $bought->datetime = time(); $bought->renew = 0; $bought->coupon = ''; $bought->price = $shop->price; $bought->save(); $shop->buy($user); } else { $res['msg'] .= '
但是套餐添加失败了,原因是套餐不存在'; } } $user->addMoneyLog($user->money); $subject = $_ENV['appName'] . '-新用户注册通知'; $to = $user->email; $text = '您好,管理员已经为您生成账户,用户名: ' . $email . ',登录密码为:' . $pass . ',感谢您的支持。 '; try { Mail::send($to, $subject, 'newuser.tpl', [ 'user' => $user, 'text' => $text, ], []); } catch (Exception $e) { $res['email_error'] = $e->getMessage(); } return $response->withJson($res); } return $response->withJson([ 'ret' => 0, 'msg' => '未知错误' ]); } /** * @param Request $request * @param Response $response * @param array $args */ public function edit($request, $response, $args) { $user = User::find($args['id']); return $response->write( $this->view() ->assign('edit_user', $user) ->display('admin/user/edit.tpl') ); } /** * @param Request $request * @param Response $response * @param array $args */ public function update($request, $response, $args) { $id = $args['id']; $user = User::find($id); $email1 = $user->email; $user->email = $request->getParam('email'); $email2 = $request->getParam('email'); $passwd = $request->getParam('passwd'); if ($request->getParam('pass') != '') { $user->pass = Hash::passwordHash($request->getParam('pass')); $user->clean_link(); } $user->auto_reset_day = $request->getParam('auto_reset_day'); $user->auto_reset_bandwidth = $request->getParam('auto_reset_bandwidth'); $origin_port = $user->port; $user->port = $request->getParam('port'); $user->addMoneyLog($request->getParam('money') - $user->money); $user->passwd = $request->getParam('passwd'); $user->protocol = $request->getParam('protocol'); $user->protocol_param = $request->getParam('protocol_param'); $user->obfs = $request->getParam('obfs'); $user->obfs_param = $request->getParam('obfs_param'); $user->is_multi_user = $request->getParam('is_multi_user'); $user->transfer_enable = Tools::toGB($request->getParam('transfer_enable')); $user->invite_num = $request->getParam('invite_num'); $user->method = $request->getParam('method'); $user->node_speedlimit = $request->getParam('node_speedlimit'); $user->node_connector = $request->getParam('node_connector'); $user->enable = $request->getParam('enable'); $user->is_admin = $request->getParam('is_admin'); $user->ga_enable = $request->getParam('ga_enable'); $user->node_group = $request->getParam('group'); $user->ref_by = $request->getParam('ref_by'); $user->remark = $request->getParam('remark'); $user->money = $request->getParam('money'); $user->class = $request->getParam('class'); $user->class_expire = $request->getParam('class_expire'); $user->expire_in = $request->getParam('expire_in'); $user->forbidden_ip = str_replace(PHP_EOL, ',', $request->getParam('forbidden_ip')); $user->forbidden_port = str_replace(PHP_EOL, ',', $request->getParam('forbidden_port')); // 手动封禁 $ban_time = (int) $request->getParam('ban_time'); if ($ban_time > 0) { $user->enable = 0; $end_time = date('Y-m-d H:i:s'); $user->last_detect_ban_time = $end_time; $DetectBanLog = new DetectBanLog(); $DetectBanLog->user_name = $user->user_name; $DetectBanLog->user_id = $user->id; $DetectBanLog->email = $user->email; $DetectBanLog->detect_number = '0'; $DetectBanLog->ban_time = $ban_time; $DetectBanLog->start_time = strtotime('1989-06-04 00:05:00'); $DetectBanLog->end_time = strtotime($end_time); $DetectBanLog->all_detect_number = $user->all_detect_number; $DetectBanLog->save(); } if (!$user->save()) { return $response->withJson([ 'ret' => 0, 'msg' => '修改失败' ]); } return $response->withJson([ 'ret' => 1, 'msg' => '修改成功' ]); } /** * @param Request $request * @param Response $response * @param array $args */ public function delete($request, $response, $args) { $user = User::find((int) $request->getParam('id')); if (!$user->kill_user()) { return $response->withJson([ 'ret' => 0, 'msg' => '删除失败' ]); } return $response->withJson([ 'ret' => 1, 'msg' => '删除成功' ]); } /** * @param Request $request * @param Response $response * @param array $args */ public function changetouser($request, $response, $args) { $userid = $request->getParam('userid'); $adminid = $request->getParam('adminid'); $user = User::find($userid); $admin = User::find($adminid); $expire_in = time() + 60 * 60; if (!$admin->is_admin || !$user || !Auth::getUser()->isLogin) { return $response->withJson([ 'ret' => 0, 'msg' => '非法请求' ]); } Cookie::set([ 'uid' => $user->id, 'email' => $user->email, 'key' => Hash::cookieHash($user->pass, $expire_in), 'ip' => md5($_SERVER['REMOTE_ADDR'] . $_ENV['key'] . $user->id . $expire_in), 'expire_in' => $expire_in, 'old_uid' => Cookie::get('uid'), 'old_email' => Cookie::get('email'), 'old_key' => Cookie::get('key'), 'old_ip' => Cookie::get('ip'), 'old_expire_in' => Cookie::get('expire_in'), 'old_local' => $request->getParam('local'), ], $expire_in); return $response->withJson([ 'ret' => 1, 'msg' => '切换成功' ]); } /** * @param Request $request * @param Response $response * @param array $args */ public function ajax($request, $response, $args) { $query = User::getTableDataFromAdmin( $request, static function (&$order_field) { if ($order_field == 'used_traffic') { $order_field = 'u + d'; } elseif ($order_field == 'enable_traffic') { $order_field = 'transfer_enable'; } elseif ($order_field == 'today_traffic') { $order_field = 'u + d - last_day_t'; } elseif ($order_field == 'querys') { $order_field = 'id'; } } ); $data = []; foreach ($query['datas'] as $value) { /** @var User $value */ $tempdata['op'] = '' . '编辑' . '删除' . '切换为该用户'; $tempdata['querys'] = '' . '套餐' . '充值' . '订阅' . '审计' . '登录'; $tempdata['id'] = $value->id; $tempdata['user_name'] = $value->user_name; $tempdata['remark'] = $value->remark; $tempdata['email'] = $value->email; $tempdata['money'] = $value->money; $tempdata['im_type'] = $value->im_type(); $tempdata['im_value'] = $value->im_value(); $tempdata['node_group'] = $value->node_group; $tempdata['expire_in'] = $value->expire_in; $tempdata['class'] = $value->class; $tempdata['class_expire'] = $value->class_expire; $tempdata['passwd'] = $value->passwd; $tempdata['port'] = $value->port; $tempdata['method'] = $value->method; $tempdata['protocol'] = $value->protocol; $tempdata['obfs'] = $value->obfs; $tempdata['obfs_param'] = $value->obfs_param; $tempdata['online_ip_count'] = $value->online_ip_count(); $tempdata['last_ss_time'] = $value->lastSsTime(); $tempdata['used_traffic'] = Tools::flowToGB($value->u + $value->d); $tempdata['enable_traffic'] = Tools::flowToGB($value->transfer_enable); $tempdata['last_checkin_time'] = $value->lastCheckInTime(); $tempdata['today_traffic'] = $value->TodayusedTraffic(); $tempdata['enable'] = $value->enable == 1 ? '可用' : '禁用'; $tempdata['reg_date'] = $value->reg_date; $tempdata['reg_ip'] = $value->reg_ip; $tempdata['auto_reset_day'] = $value->auto_reset_day; $tempdata['auto_reset_bandwidth'] = $value->auto_reset_bandwidth; $tempdata['ref_by'] = $value->ref_by; $tempdata['ref_by_user_name'] = $value->ref_by_user_name(); $tempdata['top_up'] = $value->get_top_up(); $data[] = $tempdata; } return $response->withJson([ 'draw' => $request->getParam('draw'), 'recordsTotal' => User::count(), 'recordsFiltered' => $query['count'], 'data' => $data, ]); } }