diff --git a/app/Components/Callback.php b/app/Components/Callback.php index e0afa2ca..c6933228 100644 --- a/app/Components/Callback.php +++ b/app/Components/Callback.php @@ -35,22 +35,22 @@ trait Callback private function tradePaid($msg, $pay_type) { $pay_type_name = $pay_type == 1? '余额支付' : ($pay_type == 4? '支付宝国际' : ($pay_type == 5? '支付宝当面付' : '')); + $payment = Payment::query()->with(['order', 'order.goods'])->where('status', 0)->where('order_sn', $msg['out_trade_no'])->first(); + if(!$payment){ + Log::info('【'.$pay_type_name.'】回调订单【'.$msg['out_trade_no'].'】不存在'); + + return FALSE; + } if($pay_type != 1){ Log::info('【'.$pay_type_name.'】支付成功,开始处理回调订单'); // 获取未完成状态的订单防止重复增加时间 - $payment = Payment::query()->with(['order', 'order.goods'])->where('status', 0)->where('order_sn', $msg['out_trade_no'])->first(); - if(!$payment){ - Log::info('【'.$pay_type_name.'】回调订单【'.$msg['out_trade_no'].'】不存在'); - - return FALSE; - } }else{ Log::info('【'.$pay_type_name.'】订单处理'); } // 处理订单 - DB::beginTransaction(); try{ + DB::beginTransaction(); if($pay_type != 1){ // 如果支付单中没有用户信息则创建一个用户 if(!$payment->user_id){ @@ -69,127 +69,138 @@ trait Callback // 更新订单 $order = Order::query()->where('order_sn', $msg['out_trade_no'])->first(); - // 提取商品信息 - $goods = Goods::query()->where('id', $order->goods_id)->first(); - // 取出用户信息 - $user = User::query()->where('id', $order->user_id)->first(); - // 商品为流量或者套餐 - switch($goods->type){ - case 1: - $order->status = 2; - $order->save(); - Helpers::addUserTrafficModifyLog($order->user_id, $order->oid, $user->transfer_enable, $user->transfer_enable+$goods->traffic*1048576, '[在线支付]加上用户购买的套餐流量'); - User::query()->where('id', $order->user_id)->increment('transfer_enable', $goods->traffic*1048576); - break; - case 2: - $activePlan = Order::query() - ->where('user_id', $order->user_id) - ->with(['goods']) - ->whereHas('goods', function($q){ - $q->where('type', 2); - }) - ->where('is_expire', 0) - ->where('status', 2) - ->exists(); - // 2为开始生效,3为预支付 - $order->status = $activePlan? 3 : 2; - $order->save(); - // 预支付不执行 - if(!$activePlan){ - // 如果买的是套餐,则先将之前购买的套餐都无效化,重置用户已用、可用流量为0 - Order::query() + + if($order->goods_id == -1){ + $order->status = 2; + $order->save(); + User::query()->where('id', $order->user_id)->increment('balance', $order->amount*100); + + // 余额变动记录日志 + $this->addUserBalanceLog($order->user_id, $order->oid, $order->user->balance, $order->user->balance+$order->amount, $order->amount, '用户在线充值'); + }else{ + + // 提取商品信息 + $goods = Goods::query()->where('id', $order->goods_id)->first(); + // 取出用户信息 + $user = User::query()->where('id', $order->user_id)->first(); + // 商品为流量或者套餐 + switch($goods->type){ + case 1: + $order->status = 2; + $order->save(); + Helpers::addUserTrafficModifyLog($order->user_id, $order->oid, $user->transfer_enable, $user->transfer_enable+$goods->traffic*1048576, '[在线支付]加上用户购买的套餐流量'); + User::query()->where('id', $order->user_id)->increment('transfer_enable', $goods->traffic*1048576); + break; + case 2: + $activePlan = Order::query() ->where('user_id', $order->user_id) ->with(['goods']) ->whereHas('goods', function($q){ - $q->where('type', '<=', 2); + $q->where('type', 2); }) ->where('is_expire', 0) ->where('status', 2) - ->where('oid', '<>', $order->oid) - ->update(['expire_at' => date('Y-m-d H:i:s'), 'is_expire' => 1]); + ->exists(); + // 2为开始生效,3为预支付 + $order->status = $activePlan? 3 : 2; + $order->save(); + // 预支付不执行 + if(!$activePlan){ + // 如果买的是套餐,则先将之前购买的套餐都无效化,重置用户已用、可用流量为0 + Order::query() + ->where('user_id', $order->user_id) + ->with(['goods']) + ->whereHas('goods', function($q){ + $q->where('type', '<=', 2); + }) + ->where('is_expire', 0) + ->where('status', 2) + ->where('oid', '<>', $order->oid) + ->update(['expire_at' => date('Y-m-d H:i:s'), 'is_expire' => 1]); - Helpers::addUserTrafficModifyLog($order->user_id, $order->oid, $user->transfer_enable, 0, '[在线支付]用户购买新套餐,先清空流量'); - User::query()->where('id', $order->user_id)->update(['u' => 0, 'd' => 0, 'transfer_enable' => 0]); + Helpers::addUserTrafficModifyLog($order->user_id, $order->oid, $user->transfer_enable, 0, '[在线支付]用户购买新套餐,先清空流量'); + User::query()->where('id', $order->user_id)->update(['u' => 0, 'd' => 0, 'transfer_enable' => 0]); - $userTraffic = $goods->traffic*1048576; - // 添加账号有效期 - $expireTime = date('Y-m-d', strtotime("+".$goods->days." days")); - //账号下一个重置时间 - $nextResetTime = date('Y-m-d', strtotime("+".$goods->period." days")); - if($nextResetTime >= $expireTime){ - $nextResetTime = NULL; - } - - // 写入用户标签 - if($goods->label){ - // 删除用户所有标签 - UserLabel::query()->where('user_id', $order->user_id)->delete(); - - //取出 商品默认标签 & 系统默认标签 去重 - $newUserLabels = array_values(array_unique(array_merge(GoodsLabel::query()->where('goods_id', $order->goods_id)->pluck('label_id')->toArray(), self::$systemConfig['initial_labels_for_user']? explode(',', self::$systemConfig['initial_labels_for_user']) : []))); - - // 生成标签 - foreach($newUserLabels as $vo){ - $obj = new UserLabel(); - $obj->user_id = $order->user_id; - $obj->label_id = $vo; - $obj->save(); + $userTraffic = $goods->traffic*1048576; + // 添加账号有效期 + $expireTime = date('Y-m-d', strtotime("+".$goods->days." days")); + //账号下一个重置时间 + $nextResetTime = date('Y-m-d', strtotime("+".$goods->period." days")); + if($nextResetTime >= $expireTime){ + $nextResetTime = NULL; } - } - // 写入返利日志 - if($order->user->referral_uid){ - $this->addReferralLog($order->user_id, $order->user->referral_uid, $order->oid, $order->amount, $order->amount*self::$systemConfig['referral_percent']); - // 邀请注册功能开启时,每成功邀请一名付费用户,返还邀请者邀请名额 - if(self::$systemConfig['is_invite_register']){ - User::query()->where('id', $order->user->referral_uid)->increment('invite_num', 1); + // 写入用户标签 + if($goods->label){ + // 删除用户所有标签 + UserLabel::query()->where('user_id', $order->user_id)->delete(); + + //取出 商品默认标签 & 系统默认标签 去重 + $newUserLabels = array_values(array_unique(array_merge(GoodsLabel::query()->where('goods_id', $order->goods_id)->pluck('label_id')->toArray(), self::$systemConfig['initial_labels_for_user']? explode(',', self::$systemConfig['initial_labels_for_user']) : []))); + + // 生成标签 + foreach($newUserLabels as $vo){ + $obj = new UserLabel(); + $obj->user_id = $order->user_id; + $obj->label_id = $vo; + $obj->save(); + } } + + // 写入返利日志 + if($order->user->referral_uid){ + $this->addReferralLog($order->user_id, $order->user->referral_uid, $order->oid, $order->amount, $order->amount*self::$systemConfig['referral_percent']); + // 邀请注册功能开启时,每成功邀请一名付费用户,返还邀请者邀请名额 + if(self::$systemConfig['is_invite_register']){ + User::query()->where('id', $order->user->referral_uid)->increment('invite_num', 1); + } + } + + Helpers::addUserTrafficModifyLog($order->user_id, $order->oid, $user->transfer_enable, $userTraffic, '[在线支付]加上用户购买的套餐流量'); + User::query()->where('id', $order->user_id)->increment('invite_num', $goods->invite_num? : 0, ['transfer_enable' => $userTraffic, 'reset_time' => $nextResetTime, 'expire_time' => $expireTime, 'enable' => 1]); + }else{ + //预支付订单先给上账号时间用于流量重置判断 + User::query()->where('id', $order->user_id)->update(['expire_time' => date('Y-m-d', strtotime("+".$goods->days." days", strtotime($user->expire_time)))]); } + break; + case 3: + $order->status = 2; + $order->save(); + User::query()->where('id', $order->user_id)->increment('balance', $goods->price*100); - Helpers::addUserTrafficModifyLog($order->user_id, $order->oid, $user->transfer_enable, $userTraffic, '[在线支付]加上用户购买的套餐流量'); - User::query()->where('id', $order->user_id)->increment('invite_num', $goods->invite_num? : 0, ['transfer_enable' => $userTraffic, 'reset_time' => $nextResetTime, 'expire_time' => $expireTime, 'enable' => 1]); - }else{ - //预支付订单先给上账号时间用于流量重置判断 - User::query()->where('id', $order->user_id)->update(['expire_time' => date('Y-m-d', strtotime("+".$goods->days." days", strtotime($user->expire_time)))]); - } - break; - case 3: - $order->status = 2; - $order->save(); - User::query()->where('id', $order->user_id)->increment('balance', $goods->price*100); + // 余额变动记录日志 + $this->addUserBalanceLog($order->user_id, $order->oid, $order->user->balance, $order->user->balance+$goods->price, $goods->price, '用户在线充值'); + break; + default: + Log::info('【处理订单】出现错误-未知套餐类型'); + } + // 自动提号机:如果order的email值不为空 + if($order->email){ + $title = '自动发送账号信息'; + $content = [ + 'order_sn' => $order->order_sn, + 'goods_name' => $order->goods->name, + 'goods_traffic' => flowAutoShow($order->goods->traffic*1048576), + 'port' => $order->user->port, + 'passwd' => $order->user->passwd, + 'method' => $order->user->method, + //'protocol' => $order->user->protocol, + //'protocol_param' => $order->user->protocol_param, + //'obfs' => $order->user->obfs, + //'obfs_param' => $order->user->obfs_param, + 'created_at' => $order->created_at->toDateTimeString(), + 'expire_at' => $order->expire_at + ]; - // 余额变动记录日志 - $this->addUserBalanceLog($order->user_id, $order->oid, $order->user->balance, $order->user->balance+$goods->price, $goods->price, '用户在线充值'); - break; - default: - Log::info('【处理订单】出现错误-未知套餐类型'); - } - // 自动提号机:如果order的email值不为空 - if($order->email){ - $title = '自动发送账号信息'; - $content = [ - 'order_sn' => $order->order_sn, - 'goods_name' => $order->goods->name, - 'goods_traffic' => flowAutoShow($order->goods->traffic*1048576), - 'port' => $order->user->port, - 'passwd' => $order->user->passwd, - 'method' => $order->user->method, - //'protocol' => $order->user->protocol, - //'protocol_param' => $order->user->protocol_param, - //'obfs' => $order->user->obfs, - //'obfs_param' => $order->user->obfs_param, - 'created_at' => $order->created_at->toDateTimeString(), - 'expire_at' => $order->expire_at - ]; + // 获取可用节点列表 + $labels = UserLabel::query()->where('user_id', $order->user_id)->get()->pluck('label_id'); + $nodeIds = SsNodeLabel::query()->whereIn('label_id', $labels)->get()->pluck('node_id'); + $nodeList = SsNode::query()->whereIn('id', $nodeIds)->orderBy('sort', 'desc')->orderBy('id', 'desc')->get()->toArray(); + $content['serverList'] = $nodeList; - // 获取可用节点列表 - $labels = UserLabel::query()->where('user_id', $order->user_id)->get()->pluck('label_id'); - $nodeIds = SsNodeLabel::query()->whereIn('label_id', $labels)->get()->pluck('node_id'); - $nodeList = SsNode::query()->whereIn('id', $nodeIds)->orderBy('sort', 'desc')->orderBy('id', 'desc')->get()->toArray(); - $content['serverList'] = $nodeList; - - $logId = Helpers::addEmailLog($order->email, $title, json_encode($content)); - Mail::to($order->email)->send(new sendUserInfo($logId, $content)); + $logId = Helpers::addEmailLog($order->email, $title, json_encode($content)); + Mail::to($order->email)->send(new sendUserInfo($logId, $content)); + } } DB::commit(); diff --git a/app/Components/Helpers.php b/app/Components/Helpers.php index ee16152e..2544aff6 100644 --- a/app/Components/Helpers.php +++ b/app/Components/Helpers.php @@ -60,17 +60,18 @@ class Helpers /** * 添加用户 * - * @param string $username 用户邮箱 + * @param string $email 用户邮箱 * @param string $password 用户密码 * @param string $transfer_enable 可用流量 * @param int $data 可使用天数 * @param int $referral_uid 邀请人 * @return int */ - public static function addUser($username, $password, $transfer_enable, $data, $referral_uid = 0) + public static function addUser($email, $password, $transfer_enable, $data, $referral_uid = 0) { $user = new User(); - $user->username = $username; + $user->username = $email; + $user->email = $email; $user->password = $password; // 生成一个可用端口 $user->port = self::systemConfig()['is_rand_port']? Helpers::getRandPort() : Helpers::getOnlyPort(); diff --git a/app/Components/NetworkDetection.php b/app/Components/NetworkDetection.php index fb7c5205..fd8a33e5 100644 --- a/app/Components/NetworkDetection.php +++ b/app/Components/NetworkDetection.php @@ -56,6 +56,37 @@ class NetworkDetection return "机器宕机"; // 服务器宕机 } } + + /** + * 用api.iiwl.cc进行Ping检测 + * + * @param string $ip 被检测的IP或者域名 + * + * @return bool|array + */ + public static function ping($ip) + { + $url = 'https://api.iiwl.cc/api/ping.php?url='.$ip; + + try{ + $ret = json_decode(Curl::send($url), TRUE); + if(!$ret){ + Log::warning("【PING】检测".$ip."时,接口返回异常访问链接:".$url); + + return FALSE; + }elseif($ret['code'] != 1 || $ret['msg'] != "检测成功!"){ + Log::warning("【PING】检测".$ip."时,返回".json_encode($ret)); + + return FALSE; + } + } catch(Exception $e){ + Log::warning("【Ping】检测".$ip."时,接口请求超时".$e); + + return FALSE; + } + + return $ret['data']; // 服务器宕机 + } } ?> \ No newline at end of file diff --git a/app/Components/QQInfo.php b/app/Components/QQInfo.php new file mode 100644 index 00000000..a3c7eddc --- /dev/null +++ b/app/Components/QQInfo.php @@ -0,0 +1,68 @@ +checkNodeStatus(); + // 检查 维护模式 + if(Helpers::systemConfig()['maintenance_mode']){ + if(strtotime(Helpers::systemConfig()['maintenance_time']) < time()){ + Config::query()->where('name', 'maintenance_mode')->update(['value' => 0]); + Config::query()->where('name', 'maintenance_time')->update(['value' => '']); + } + } + $jobEndTime = microtime(TRUE); $jobUsedTime = round(($jobEndTime-$jobStartTime), 4); diff --git a/app/Console/Commands/AutoPingNode.php b/app/Console/Commands/AutoPingNode.php new file mode 100644 index 00000000..92a675ea --- /dev/null +++ b/app/Console/Commands/AutoPingNode.php @@ -0,0 +1,57 @@ +where('is_transit', 0)->where('status', 1)->get(); + foreach($nodeList as $node){ + $this->pingNode($node->id, $node->is_ddns? $node->server : $node->ip); + } + + $jobEndTime = microtime(TRUE); + $jobUsedTime = round(($jobEndTime-$jobStartTime), 4); + + Log::info('---【'.$this->description.'】完成---,耗时'.$jobUsedTime.'秒'); + } + + // 节点Ping测速 + private function pingNode($nodeId, $ip) + { + $result = NetworkDetection::ping($ip); + + if($result){ + $obj = new SsNodePing(); + $obj->node_id = $nodeId; + $obj->ct = intval($result['China Telecom']['time']); + $obj->cu = intval($result['China Unicom']['time']); + $obj->cm = intval($result['China Mobile']['time']); + $obj->hk = intval($result['Hong Kong']['time']); + $obj->save(); + }else{ + Log::info("【".$ip."】Ping测速获取失败"); + } + + } +} diff --git a/app/Console/Commands/DailyJob.php b/app/Console/Commands/DailyJob.php index ee80b28e..c7297d89 100644 --- a/app/Console/Commands/DailyJob.php +++ b/app/Console/Commands/DailyJob.php @@ -165,7 +165,7 @@ class DailyJob extends Command } // 重置流量 User::query()->where('id', $user->id)->update(['u' => 0, 'd' => 0, 'transfer_enable' => $order->goods->traffic*1048576, 'reset_time' => $nextResetTime]); - Log::info('用户[ID:'.$user->id.' 邮箱: '.$user->username.'] 流量重置为 '.($order->goods->traffic*1048576).'. 重置日期为 '.($nextResetTime? : '【无】')); + Log::info('用户[ID:'.$user->id.' 昵称: '.$user->username.' 邮箱: '.$user->email.'] 流量重置为 '.($order->goods->traffic*1048576).'. 重置日期为 '.($nextResetTime? : '【无】')); } } } \ No newline at end of file diff --git a/app/Console/Commands/UserExpireAutoWarning.php b/app/Console/Commands/UserExpireAutoWarning.php index c7bef7c5..05336eb5 100644 --- a/app/Console/Commands/UserExpireAutoWarning.php +++ b/app/Console/Commands/UserExpireAutoWarning.php @@ -43,7 +43,7 @@ class UserExpireAutoWarning extends Command $userList = User::query()->where('enable', 1)->get(); foreach($userList as $user){ // 用户名不是邮箱的跳过 - if(FALSE === filter_var($user->username, FILTER_VALIDATE_EMAIL)){ + if(FALSE === filter_var($user->email, FILTER_VALIDATE_EMAIL)){ continue; } @@ -53,14 +53,14 @@ class UserExpireAutoWarning extends Command $title = '账号过期提醒'; $content = '您的账号将于今天晚上【24:00】过期。'; - $logId = Helpers::addEmailLog($user->username, $title, $content); - Mail::to($user->username)->send(new userExpireWarningToday($logId)); + $logId = Helpers::addEmailLog($user->email, $title, $content); + Mail::to($user->email)->send(new userExpireWarningToday($logId)); }elseif($lastCanUseDays > 0 && $lastCanUseDays <= self::$systemConfig['expire_days']){ $title = '账号过期提醒'; $content = '您的账号还剩'.$lastCanUseDays.'天即将过期。'; - $logId = Helpers::addEmailLog($user->username, $title, $content); - Mail::to($user->username)->send(new userExpireWarning($logId, $lastCanUseDays)); + $logId = Helpers::addEmailLog($user->email, $title, $content); + Mail::to($user->email)->send(new userExpireWarning($logId, $lastCanUseDays)); } } } diff --git a/app/Console/Commands/UserTrafficAbnormalAutoWarning.php b/app/Console/Commands/UserTrafficAbnormalAutoWarning.php index ce59d5d3..7ba37b34 100644 --- a/app/Console/Commands/UserTrafficAbnormalAutoWarning.php +++ b/app/Console/Commands/UserTrafficAbnormalAutoWarning.php @@ -49,7 +49,7 @@ class UserTrafficAbnormalAutoWarning extends Command if($vo->totalTraffic > (self::$systemConfig['traffic_ban_value']*1073741824)){ $traffic = UserTrafficHourly::query()->where('node_id', 0)->where('user_id', $vo->user_id)->where('created_at', '>=', date('Y-m-d H:i:s', time()-3900))->selectRaw("user_id, sum(`u`) as totalU, sum(`d`) as totalD, sum(total) as totalTraffic")->first(); - $content = "用户**{$user->username}(ID:{$user->id})**,最近1小时**上行流量:".flowAutoShow($traffic->totalU).",下行流量:".flowAutoShow($traffic->totalD).",共计:".flowAutoShow($traffic->totalTraffic)."**。"; + $content = "用户**{$user->email}(ID:{$user->id})**,最近1小时**上行流量:".flowAutoShow($traffic->totalU).",下行流量:".flowAutoShow($traffic->totalD).",共计:".flowAutoShow($traffic->totalTraffic)."**。"; ServerChan::send($title, $content); } diff --git a/app/Console/Commands/UserTrafficAutoWarning.php b/app/Console/Commands/UserTrafficAutoWarning.php index 24f07da1..f228bd8c 100644 --- a/app/Console/Commands/UserTrafficAutoWarning.php +++ b/app/Console/Commands/UserTrafficAutoWarning.php @@ -42,7 +42,7 @@ class UserTrafficAutoWarning extends Command $userList = User::query()->where('status', '>=', 0)->where('enable', 1)->where('transfer_enable', '>', 0)->get(); foreach($userList as $user){ // 用户名不是邮箱的跳过 - if(FALSE === filter_var($user->username, FILTER_VALIDATE_EMAIL)){ + if(FALSE === filter_var($user->email, FILTER_VALIDATE_EMAIL)){ continue; } @@ -51,8 +51,8 @@ class UserTrafficAutoWarning extends Command $title = '流量提醒'; $content = '流量已使用:'.$usedPercent.'%,请保持关注。'; - $logId = Helpers::addEmailLog($user->username, $title, $content); - Mail::to($user->username)->send(new userTrafficWarning($logId, $usedPercent)); + $logId = Helpers::addEmailLog($user->email, $title, $content); + Mail::to($user->email)->send(new userTrafficWarning($logId, $usedPercent)); } } } diff --git a/app/Console/Commands/updateUserName.php b/app/Console/Commands/updateUserName.php new file mode 100644 index 00000000..12113ea0 --- /dev/null +++ b/app/Console/Commands/updateUserName.php @@ -0,0 +1,77 @@ +get(); + foreach($userList as $user){ + $name = process($user->id); + User::query()->whereKey($user->id)->update(['username' => $name]); + + Log::info('---用户[ID:'.$user->id.' - '.$user->email.'] :'.$user->username.'---'); + } + + foreach($userList as $user){ + if($user->email == $user->username){ + $name = process($user->id); + + User::query()->whereKey($user->id)->update(['username' => $name]); + + Log::info('---用户[ID:'.$user->id.' - '.$user->email.'] :'.$user->username.'---'); + } + } + + Log::info('----------------------------【升级用户昵称】结束----------------------------'); + } +} + +function process($id) +{ + $user = User::query()->whereKey($id)->first(); + // 先设个默认值 + $name = $user->email; + // 用户是否设置了QQ号 + if($user->qq){ + $name = QQInfo::getName3($user->qq); + // 检测用户注册是否为QQ邮箱 + }elseif(strpos(strtolower($user->email), '@qq') != FALSE){ + // 分离QQ邮箱后缀 + $email = explode('@', $user->email); + if(is_numeric($email[0])){ + $name = QQInfo::getName3($email[0]); + }else{ + // 分离www前缀 + if(strpos($email[0], '.') != FALSE){ + $temp = explode('.', $email[0]); + if(is_numeric($temp[1])){ + $name = QQInfo::getName3($temp[1]); + }else{ + print_r($user->email.PHP_EOL); + } + } + } + } + if($name == FALSE){ + $name = $user->email; + } + + return $name; +} diff --git a/app/Console/Commands/upgradeUserResetTime.php b/app/Console/Commands/upgradeUserResetTime.php index ae0143fe..b7da9cdb 100644 --- a/app/Console/Commands/upgradeUserResetTime.php +++ b/app/Console/Commands/upgradeUserResetTime.php @@ -56,7 +56,7 @@ class upgradeUserResetTime extends Command User::query()->where('id', $user->id)->update(['reset_time' => $reset_time]); } - Log::info('---用户[ID:'.$user->id.' - '.$user->username.']的新重置日期为'.($reset_time != NULL? '【'.$reset_time.'】' : '【无】').'---'); + Log::info('---用户[ID:'.$user->id.' - '.$user->username.' ('.$user->email.')]的新重置日期为'.($reset_time != NULL? '【'.$reset_time.'】' : '【无】').'---'); } Log::info('----------------------------【升级用户重置日期】结束----------------------------'); diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 3c3a279f..b1461610 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -4,6 +4,7 @@ namespace App\Console; use App\Console\Commands\AutoClearLog; use App\Console\Commands\AutoJob; +use App\Console\Commands\AutoPingNode; use App\Console\Commands\AutoReportNode; use App\Console\Commands\AutoStatisticsNodeDailyTraffic; use App\Console\Commands\AutoStatisticsNodeHourlyTraffic; @@ -29,6 +30,7 @@ class Kernel extends ConsoleKernel protected $commands = [ AutoClearLog::class, AutoJob::class, + AutoPingNode::class, AutoReportNode::class, AutoStatisticsNodeDailyTraffic::class, AutoStatisticsNodeHourlyTraffic::class, @@ -59,6 +61,7 @@ class Kernel extends ConsoleKernel $schedule->command('autoStatisticsNodeHourlyTraffic')->hourly(); $schedule->command('autoStatisticsUserHourlyTraffic')->hourly(); $schedule->command('userTrafficAbnormalAutoWarning')->hourly(); + $schedule->command('autoPingNode')->twiceDaily(); $schedule->command('dailyJob')->daily(); $schedule->command('autoReportNode')->dailyAt('09:00'); $schedule->command('userTrafficAutoWarning')->dailyAt('10:30'); diff --git a/app/Http/Controllers/AdminController.php b/app/Http/Controllers/AdminController.php index 3cb23df3..972b1461 100644 --- a/app/Http/Controllers/AdminController.php +++ b/app/Http/Controllers/AdminController.php @@ -24,6 +24,7 @@ use App\Http\Models\SsNodeInfo; use App\Http\Models\SsNodeIp; use App\Http\Models\SsNodeLabel; use App\Http\Models\SsNodeOnlineLog; +use App\Http\Models\SsNodePing; use App\Http\Models\SsNodeTrafficDaily; use App\Http\Models\SsNodeTrafficHourly; use App\Http\Models\User; @@ -110,7 +111,7 @@ class AdminController extends Controller public function userList(Request $request) { $id = $request->input('id'); - $username = $request->input('username'); + $email = $request->input('email'); $wechat = $request->input('wechat'); $qq = $request->input('qq'); $port = $request->input('port'); @@ -128,8 +129,8 @@ class AdminController extends Controller $query->where('id', $id); } - if(isset($username)){ - $query->where('username', 'like', '%'.$username.'%'); + if(isset($email)){ + $query->where('email', 'like', '%'.$email.'%'); } if(isset($wechat)){ @@ -222,8 +223,8 @@ class AdminController extends Controller public function addUser(Request $request) { if($request->isMethod('POST')){ - // 校验username是否已存在 - $exists = User::query()->where('username', $request->input('username'))->first(); + // 校验email是否已存在 + $exists = User::query()->where('email', $request->input('email'))->first(); if($exists){ return Response::json(['status' => 'fail', 'data' => '', 'message' => '用户名已存在,请重新输入']); } @@ -233,7 +234,7 @@ class AdminController extends Controller } $user = new User(); - $user->username = trim($request->input('username')); + $user->email = trim($request->input('email')); $user->password = Hash::make(trim($request->input('password'))? : makeRandStr()); $user->port = $request->input('port'); $user->passwd = empty($request->input('passwd'))? makeRandStr() : $request->input('passwd'); @@ -355,6 +356,7 @@ class AdminController extends Controller { if($request->isMethod('POST')){ $username = trim($request->input('username')); + $email = trim($request->input('email')); $password = $request->input('password'); $port = $request->input('port'); $passwd = $request->input('passwd'); @@ -381,8 +383,8 @@ class AdminController extends Controller $is_admin = $request->input('is_admin'); $reset_time = $request->input('reset_time'); - // 校验username是否已存在 - $exists = User::query()->where('id', '<>', $id)->where('username', $username)->first(); + // 校验email是否已存在 + $exists = User::query()->where('id', '<>', $id)->where('email', $email)->first(); if($exists){ return Response::json(['status' => 'fail', 'data' => '', 'message' => '用户名已存在,请重新输入']); } @@ -409,6 +411,7 @@ class AdminController extends Controller try{ $data = [ 'username' => $username, + 'email' => $email, 'port' => $port, 'passwd' => $passwd, 'vmess_id' => $vmess_id, @@ -842,6 +845,7 @@ class AdminController extends Controller SsNodeOnlineLog::query()->where('node_id', $id)->delete(); SsNodeTrafficDaily::query()->where('node_id', $id)->delete(); SsNodeTrafficHourly::query()->where('node_id', $id)->delete(); + SsNodePing::query()->where('node_id', $id)->delete(); UserTrafficDaily::query()->where('node_id', $id)->delete(); UserTrafficHourly::query()->where('node_id', $id)->delete(); UserTrafficLog::query()->where('node_id', $id)->delete(); @@ -917,6 +921,44 @@ class AdminController extends Controller return Response::view('admin.nodeMonitor', $view); } + // Ping节点延迟 + public function pingNode(Request $request) + { + $node = SsNode::query()->where('id', $request->input('id'))->first(); + if(!$node){ + return Response::json(['status' => 'fail', 'message' => '节点不存在,请重试']); + } + + $result = NetworkDetection::ping($node->is_ddns? $node->server : $node->ip); + + if($result){ + $data[0] = $result['China Telecom']['time']? : '无'; + $data[1] = $result['China Unicom']['time']? : '无'; + $data[2] = $result['China Mobile']['time']? : '无'; + $data[3] = $result['Hong Kong']['time']? : '无'; + + return Response::json(['status' => 'success', 'message' => $data]); + }else{ + return Response::json(['status' => 'fail', 'message' => 'Ping访问失败']); + } + } + + public function nodePingLog(Request $request) + { + + $node_id = $request->input('nodeId'); + $query = SsNodePing::query(); + if(isset($node_id)){ + $query->where('node_id', $node_id); + } + + $view['nodeList'] = SsNode::query()->orderBy('id', 'asc')->get(); + $view['pingLogs'] = $query->orderBy('id', 'asc')->paginate(15)->appends($request->except('page')); + + return Response::view('admin.nodePingLog', $view); + } + + // 文章列表 public function articleList(Request $request) { @@ -1124,7 +1166,7 @@ class AdminController extends Controller { $port = $request->input('port'); $user_id = $request->input('user_id'); - $username = $request->input('username'); + $email = $request->input('email'); $nodeId = $request->input('nodeId'); $startTime = $request->input('startTime'); $endTime = $request->input('endTime'); @@ -1141,9 +1183,9 @@ class AdminController extends Controller $query->where('user_id', $user_id); } - if(isset($username)){ - $query->whereHas('user', function($q) use ($username){ - $q->where('username', 'like', '%'.$username.'%'); + if(isset($email)){ + $query->whereHas('user', function($q) use ($email){ + $q->where('email', 'like', '%'.$email.'%'); }); } @@ -1317,7 +1359,7 @@ class AdminController extends Controller DB::beginTransaction(); foreach($data as $user){ $obj = new User(); - $obj->username = $user->user; + $obj->email = $user->user; $obj->password = Hash::make('123456'); $obj->port = $user->port; $obj->passwd = $user->passwd; @@ -1514,7 +1556,7 @@ EOF; $view['trafficHourly'] = "'".implode("','", $hourlyData)."'"; $view['monthDays'] = "'".implode("','", $monthDays)."'"; $view['dayHours'] = "'".implode("','", $dayHours)."'"; - $view['username'] = $user->username; + $view['email'] = $user->email; return Response::view('admin.userMonitor', $view); } @@ -2041,13 +2083,13 @@ EOF; // 提现申请列表 public function applyList(Request $request) { - $username = $request->input('username'); + $email = $request->input('email'); $status = $request->input('status'); $query = ReferralApply::with('user'); - if(isset($username)){ - $query->whereHas('user', function($q) use ($username){ - $q->where('username', 'like', '%'.$username.'%'); + if(isset($email)){ + $query->whereHas('user', function($q) use ($email){ + $q->where('email', 'like', '%'.$email.'%'); }); } @@ -2081,7 +2123,7 @@ EOF; // 订单列表 public function orderList(Request $request) { - $username = $request->input('username'); + $email = $request->input('email'); $order_sn = $request->input('order_sn'); $is_coupon = $request->input('is_coupon'); $is_expire = $request->input('is_expire'); @@ -2093,9 +2135,9 @@ EOF; $query = Order::query()->with(['user', 'goods', 'coupon']); - if(isset($username)){ - $query->whereHas('user', function($q) use ($username){ - $q->where('username', 'like', '%'.$username.'%'); + if(isset($email)){ + $query->whereHas('user', function($q) use ($email){ + $q->where('email', 'like', '%'.$email.'%'); }); } if(isset($order_sn)){ @@ -2214,13 +2256,13 @@ EOF; // 用户余额变动记录 public function userBalanceLogList(Request $request) { - $username = $request->input('username'); + $email = $request->input('email'); $query = UserBalanceLog::query()->with(['user'])->orderBy('id', 'desc'); - if(isset($username)){ - $query->whereHas('user', function($q) use ($username){ - $q->where('username', 'like', '%'.$username.'%'); + if(isset($email)){ + $query->whereHas('user', function($q) use ($email){ + $q->where('email', 'like', '%'.$email.'%'); }); } @@ -2232,13 +2274,13 @@ EOF; // 用户封禁记录 public function userBanLogList(Request $request) { - $username = $request->input('username'); + $email = $request->input('email'); $query = UserBanLog::query()->with(['user'])->orderBy('id', 'desc'); - if(isset($username)){ - $query->whereHas('user', function($q) use ($username){ - $q->where('username', 'like', '%'.$username.'%'); + if(isset($email)){ + $query->whereHas('user', function($q) use ($email){ + $q->where('email', 'like', '%'.$email.'%'); }); } @@ -2250,13 +2292,13 @@ EOF; // 用户流量变动记录 public function userTrafficLogList(Request $request) { - $username = $request->input('username'); + $email = $request->input('email'); $query = UserTrafficModifyLog::query()->with(['user', 'order', 'order.goods']); - if(isset($username)){ - $query->whereHas('user', function($q) use ($username){ - $q->where('username', 'like', '%'.$username.'%'); + if(isset($email)){ + $query->whereHas('user', function($q) use ($email){ + $q->where('email', 'like', '%'.$email.'%'); }); } @@ -2268,21 +2310,21 @@ EOF; // 用户返利流水记录 public function userRebateList(Request $request) { - $username = $request->input('username'); - $ref_username = $request->input('ref_username'); + $email = $request->input('email'); + $ref_email = $request->input('ref_email'); $status = $request->input('status'); $query = ReferralLog::query()->with(['user', 'order'])->orderBy('status', 'asc')->orderBy('id', 'desc'); - if(isset($username)){ - $query->whereHas('user', function($q) use ($username){ - $q->where('username', 'like', '%'.$username.'%'); + if(isset($email)){ + $query->whereHas('user', function($q) use ($email){ + $q->where('email', 'like', '%'.$email.'%'); }); } - if(isset($ref_username)){ - $query->whereHas('ref_user', function($q) use ($ref_username){ - $q->where('username', 'like', '%'.$ref_username.'%'); + if(isset($ref_email)){ + $query->whereHas('ref_user', function($q) use ($ref_email){ + $q->where('email', 'like', '%'.$ref_email.'%'); }); } @@ -2298,15 +2340,15 @@ EOF; // 用户在线IP记录 public function userOnlineIPList(Request $request) { - $username = $request->input('username'); + $email = $request->input('email'); $port = $request->input('port'); $wechat = $request->input('wechat'); $qq = $request->input('qq'); $query = User::query()->where('status', '>=', 0)->where('enable', 1); - if(isset($username)){ - $query->where('username', 'like', '%'.$username.'%'); + if(isset($email)){ + $query->where('email', 'like', '%'.$email.'%'); } if(isset($wechat)){ @@ -2426,13 +2468,13 @@ EOF; // 邮件发送日志列表 public function emailLog(Request $request) { - $username = $request->input('username'); + $email = $request->input('email'); $type = $request->input('type'); $query = EmailLog::query(); - if(isset($username)){ - $query->where('address', 'like', '%'.$username.'%'); + if(isset($email)){ + $query->where('address', 'like', '%'.$email.'%'); } if(isset($type)){ @@ -2448,7 +2490,7 @@ EOF; public function onlineIPMonitor(Request $request) { $ip = $request->input('ip'); - $username = $request->input('username'); + $email = $request->input('email'); $port = $request->input('port'); $nodeId = $request->input('nodeId'); $userId = $request->input('id'); @@ -2459,9 +2501,9 @@ EOF; $query->where('ip', $ip); } - if(isset($username)){ - $query->whereHas('user', function($q) use ($username){ - $q->where('username', 'like', '%'.$username.'%'); + if(isset($email)){ + $query->whereHas('user', function($q) use ($email){ + $q->where('email', 'like', '%'.$email.'%'); }); } diff --git a/app/Http/Controllers/Api/LoginController.php b/app/Http/Controllers/Api/LoginController.php index 4e1fc279..0a980940 100644 --- a/app/Http/Controllers/Api/LoginController.php +++ b/app/Http/Controllers/Api/LoginController.php @@ -33,11 +33,11 @@ class LoginController extends Controller // 登录返回订阅信息 public function login(Request $request) { - $username = trim($request->input('username')); + $email = trim($request->input('email')); $password = trim($request->input('password')); $cacheKey = 'request_times_'.md5(getClientIp()); - if(!$username || !$password){ + if(!$email || !$password){ Cache::increment($cacheKey); return Response::json(['status' => 'fail', 'data' => [], 'message' => '请输入用户名和密码']); @@ -52,7 +52,7 @@ class LoginController extends Controller Cache::put($cacheKey, 1, 3600); } - $user = User::query()->where('username', $username)->where('status', '>=', 0)->first(); + $user = User::query()->where('email', $email)->where('status', '>=', 0)->first(); if(!$user){ Cache::increment($cacheKey); diff --git a/app/Http/Controllers/Api/PayJsController.php b/app/Http/Controllers/Api/PayJsController.php new file mode 100644 index 00000000..b0a57da4 --- /dev/null +++ b/app/Http/Controllers/Api/PayJsController.php @@ -0,0 +1,58 @@ +all(), TRUE).'['.getClientIp().']'); + exit("【PayJs】接口正常"); + } + + // 接收POST请求 + public function store(Request $request) + { + Log::info("【PayJs】回调接口[POST]:".var_export($request->all(), TRUE)); + $config = [ + 'mchid' => self::$systemConfig['payjs_mch_id'], + 'key' => self::$systemConfig['payjs_key'], + ]; + + // 初始化 + $payjs = new Payjs($config); + $notify_info = $payjs->notify(); + + // 使用 + + $result = "fail"; + if($notify_info['return_code'] == 1){ // 验证成功 + $result = "success"; + // 商户订单号 + $data = []; + $data['out_trade_no'] = $request->input('out_trade_no'); + // 接口交易号 + $data['trade_no'] = $request->input('payjs_order_id'); + // 交易状态 + $data['trade_status'] = $request->input('return_code'); + // 交易金额(这里是按照结算货币汇率的金额,和rmb_fee不相等) + $data['total_amount'] = $request->input('total_fee'); + + $this->tradePaid($data, 6); + }else{ + Log::info('PayJs-POST:验证失败['.getClientIp().']'); + } + + // 返回验证结果 + exit($result); + } +} diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php index 32942dd8..838c6a82 100644 --- a/app/Http/Controllers/AuthController.php +++ b/app/Http/Controllers/AuthController.php @@ -50,14 +50,14 @@ class AuthController extends Controller { if($request->isMethod('POST')){ $this->validate($request, [ - 'username' => 'required', + 'email' => 'required', 'password' => 'required' ], [ - 'username.required' => trans('auth.email_null'), + 'email.required' => trans('auth.email_null'), 'password.required' => trans('auth.password_null') ]); - $username = $request->input('username'); + $email = $request->input('email'); $captcha = $request->input('captcha'); $password = $request->input('password'); $remember = $request->input('remember'); @@ -94,7 +94,7 @@ class AuthController extends Controller } // 验证账号并创建会话 - if(!Auth::attempt(['username' => $username, 'password' => $password], $remember)){ + if(!Auth::attempt(['email' => $email, 'password' => $password], $remember)){ return Redirect::back()->withInput()->withErrors(trans('auth.login_error')); } @@ -107,7 +107,7 @@ class AuthController extends Controller }elseif(Auth::user()->status == 0 && (self::$systemConfig['is_active_register'] || self::$systemConfig['is_verify_register'])){ Auth::logout(); // 强制销毁会话,因为Auth::attempt的时候会产生会话 - return Redirect::back()->withInput()->withErrors(trans('auth.active_tip').'【'.trans('auth.active_account').'】'); + return Redirect::back()->withInput()->withErrors(trans('auth.active_tip').'【'.trans('auth.active_account').'】'); } } @@ -199,14 +199,16 @@ class AuthController extends Controller if($request->isMethod('POST')){ $this->validate($request, [ - 'username' => 'required|email|unique:user', + 'username' => 'required', + 'email' => 'required|email|unique:user', 'password' => 'required|min:6', 'confirmPassword' => 'required|same:password', 'term' => 'accepted' ], [ 'username.required' => trans('auth.email_null'), - 'username.email' => trans('auth.email_legitimate'), - 'username.unique' => trans('auth.email_exist'), + 'email.required' => trans('auth.email_null'), + 'email.email' => trans('auth.email_legitimate'), + 'email.unique' => trans('auth.email_exist'), 'password.required' => trans('auth.password_null'), 'password.min' => trans('auth.password_limit'), 'confirmPassword.required' => trans('auth.confirm_password'), @@ -215,6 +217,7 @@ class AuthController extends Controller ]); $username = $request->input('username'); + $email = $request->input('email'); $password = $request->input('password'); $register_token = $request->input('register_token'); $code = $request->input('code'); @@ -238,14 +241,14 @@ class AuthController extends Controller if(self::$systemConfig['sensitiveType']){ // 校验域名邮箱是否在黑名单中 $sensitiveWords = $this->sensitiveWords(1); - $usernameSuffix = explode('@', $username); // 提取邮箱后缀 - if(in_array(strtolower($usernameSuffix[1]), $sensitiveWords)){ + $emailSuffix = explode('@', $email); // 提取邮箱后缀 + if(in_array(strtolower($emailSuffix[1]), $sensitiveWords)){ return Redirect::back()->withInput()->withErrors(trans('auth.email_banned')); } }else{ $sensitiveWords = $this->sensitiveWords(2); - $usernameSuffix = explode('@', $username); // 提取邮箱后缀 - if(!in_array(strtolower($usernameSuffix[1]), $sensitiveWords)){ + $emailSuffix = explode('@', $email); // 提取邮箱后缀 + if(!in_array(strtolower($emailSuffix[1]), $sensitiveWords)){ return Redirect::back()->withInput()->withErrors(trans('auth.email_invalid')); } } @@ -271,7 +274,7 @@ class AuthController extends Controller if(!$verify_code){ return Redirect::back()->withInput($request->except(['verify_code']))->withErrors(trans('auth.captcha_null')); }else{ - $verifyCode = VerifyCode::query()->where('username', $username)->where('code', $verify_code)->where('status', 0)->first(); + $verifyCode = VerifyCode::query()->where('address', $email)->where('code', $verify_code)->where('status', 0)->firstOrFail(); if(!$verifyCode){ return Redirect::back()->withInput($request->except(['verify_code']))->withErrors(trans('auth.captcha_overtime')); } @@ -335,12 +338,14 @@ class AuthController extends Controller $transfer_enable = 1048576*(self::$systemConfig['default_traffic']+($referral_uid? self::$systemConfig['referral_traffic'] : 0)); // 创建新用户 - $uid = Helpers::addUser($username, Hash::make($password), $transfer_enable, self::$systemConfig['default_days'], $referral_uid); + $uid = Helpers::addUser($email, Hash::make($password), $transfer_enable, self::$systemConfig['default_days'], $referral_uid); // 注册失败,抛出异常 if(!$uid){ return Redirect::back()->withInput()->withErrors(trans('auth.register_fail')); } + // 更新昵称 + User::query()->whereKey($uid)->update(['username' => $username]); // 生成订阅码 $subscribe = new UserSubscribe(); @@ -378,11 +383,11 @@ class AuthController extends Controller // 邮箱验证码关闭情况下,发送激活邮件 if(!self::$systemConfig['is_verify_register'] && self::$systemConfig['is_active_register']){ // 生成激活账号的地址 - $token = $this->addVerifyUrl($uid, $username); + $token = $this->addVerifyUrl($uid, $email); $activeUserUrl = self::$systemConfig['website_url'].'/active/'.$token; - $logId = Helpers::addEmailLog($username, '注册激活', '请求地址:'.$activeUserUrl); - Mail::to($username)->send(new activeUser($logId, $activeUserUrl)); + $logId = Helpers::addEmailLog($email, '注册激活', '请求地址:'.$activeUserUrl); + Mail::to($email)->send(new activeUser($logId, $activeUserUrl)); Session::flash('regSuccessMsg', trans('auth.register_active_tip')); }else{ @@ -454,9 +459,9 @@ class AuthController extends Controller } // 生成申请的请求地址 - private function addVerifyUrl($uid, $username) + private function addVerifyUrl($uid, $email) { - $token = md5(self::$systemConfig['website_name'].$username.microtime()); + $token = md5(self::$systemConfig['website_name'].$email.microtime()); $verify = new Verify(); $verify->type = 1; $verify->user_id = $uid; @@ -473,13 +478,13 @@ class AuthController extends Controller if($request->isMethod('POST')){ // 校验请求 $this->validate($request, [ - 'username' => 'required|email' + 'email' => 'required|email' ], [ - 'username.required' => trans('auth.email_null'), - 'username.email' => trans('auth.email_legitimate') + 'email.required' => trans('auth.email_null'), + 'email.email' => trans('auth.email_legitimate') ]); - $username = $request->input('username'); + $email = $request->input('email'); // 是否开启重设密码 if(!self::$systemConfig['is_reset_password']){ @@ -487,30 +492,30 @@ class AuthController extends Controller } // 查找账号 - $user = User::query()->where('username', $username)->first(); + $user = User::query()->where('email', $email)->first(); if(!$user){ return Redirect::back()->withErrors(trans('auth.email_notExist')); } // 24小时内重设密码次数限制 $resetTimes = 0; - if(Cache::has('resetPassword_'.md5($username))){ - $resetTimes = Cache::get('resetPassword_'.md5($username)); + if(Cache::has('resetPassword_'.md5($email))){ + $resetTimes = Cache::get('resetPassword_'.md5($email)); if($resetTimes >= self::$systemConfig['reset_password_times']){ return Redirect::back()->withErrors(trans('auth.reset_password_limit', ['time' => self::$systemConfig['reset_password_times']])); } } // 生成取回密码的地址 - $token = $this->addVerifyUrl($user->id, $username); + $token = $this->addVerifyUrl($user->id, $email); // 发送邮件 $resetPasswordUrl = self::$systemConfig['website_url'].'/reset/'.$token; - $logId = Helpers::addEmailLog($username, '重置密码', '请求地址:'.$resetPasswordUrl); - Mail::to($username)->send(new resetPassword($logId, $resetPasswordUrl)); + $logId = Helpers::addEmailLog($email, '重置密码', '请求地址:'.$resetPasswordUrl); + Mail::to($email)->send(new resetPassword($logId, $resetPasswordUrl)); - Cache::put('resetPassword_'.md5($username), $resetTimes+1, 86400); + Cache::put('resetPassword_'.md5($email), $resetTimes+1, 86400); return Redirect::back()->with('successMsg', trans('auth.reset_password_success_tip')); }else{ @@ -582,13 +587,13 @@ class AuthController extends Controller { if($request->isMethod('POST')){ $this->validate($request, [ - 'username' => 'required|email|exists:user,username' + 'email' => 'required|email|exists:user,email' ], [ - 'username.required' => trans('auth.email_null'), - 'username.email' => trans('auth.email_legitimate'), - 'username.exists' => trans('auth.email_notExist') + 'email.required' => trans('auth.email_null'), + 'email.email' => trans('auth.email_legitimate'), + 'email.exists' => trans('auth.email_notExist') ]); - $username = $request->input('username'); + $email = $request->input('email'); // 是否开启账号激活 if(!self::$systemConfig['is_active_register']){ @@ -596,7 +601,7 @@ class AuthController extends Controller } // 查找账号 - $user = User::query()->where('username', $username)->first(); + $user = User::query()->where('email', $email)->first(); if($user->status < 0){ return Redirect::back()->withErrors(trans('auth.login_ban', ['email' => self::$systemConfig['webmaster_email']])); }elseif($user->status > 0){ @@ -605,23 +610,23 @@ class AuthController extends Controller // 24小时内激活次数限制 $activeTimes = 0; - if(Cache::has('activeUser_'.md5($username))){ - $activeTimes = Cache::get('activeUser_'.md5($username)); + if(Cache::has('activeUser_'.md5($email))){ + $activeTimes = Cache::get('activeUser_'.md5($email)); if($activeTimes >= self::$systemConfig['active_times']){ return Redirect::back()->withErrors(trans('auth.active_limit', ['time' => self::$systemConfig['webmaster_email']])); } } // 生成激活账号的地址 - $token = $this->addVerifyUrl($user->id, $username); + $token = $this->addVerifyUrl($user->id, $email); // 发送邮件 $activeUserUrl = self::$systemConfig['website_url'].'/active/'.$token; - $logId = Helpers::addEmailLog($username, '激活账号', '请求地址:'.$activeUserUrl); - Mail::to($username)->send(new activeUser($logId, $activeUserUrl)); + $logId = Helpers::addEmailLog($email, '激活账号', '请求地址:'.$activeUserUrl); + Mail::to($email)->send(new activeUser($logId, $activeUserUrl)); - Cache::put('activeUser_'.md5($username), $activeTimes+1, 86400); + Cache::put('activeUser_'.md5($email), $activeTimes+1, 86400); return Redirect::back()->with('successMsg', trans('auth.register_active_tip')); }else{ @@ -689,14 +694,14 @@ class AuthController extends Controller public function sendCode(Request $request) { $validator = Validator::make($request->all(), [ - 'username' => 'required|email|unique:user' + 'email' => 'required|email|unique:user' ], [ - 'username.required' => trans('auth.email_null'), - 'username.email' => trans('auth.email_legitimate'), - 'username.unique' => trans('auth.email_exist') + 'email.required' => trans('auth.email_null'), + 'email.email' => trans('auth.email_legitimate'), + 'email.unique' => trans('auth.email_exist') ]); - $username = $request->input('username'); + $email = $request->input('email'); if($validator->fails()){ return Response::json(['status' => 'fail', 'data' => '', 'message' => $validator->getMessageBag()->first()]); @@ -706,14 +711,14 @@ class AuthController extends Controller if(self::$systemConfig['sensitiveType']){ // 校验域名邮箱是否在黑名单中 $sensitiveWords = $this->sensitiveWords(1); - $usernameSuffix = explode('@', $username); // 提取邮箱后缀 - if(in_array(strtolower($usernameSuffix[1]), $sensitiveWords)){ + $emailSuffix = explode('@', $email); // 提取邮箱后缀 + if(in_array(strtolower($emailSuffix[1]), $sensitiveWords)){ return Response::json(['status' => 'fail', 'data' => '', 'message' => trans('auth.email_banned')]); } }else{ $sensitiveWords = $this->sensitiveWords(2); - $usernameSuffix = explode('@', $username); // 提取邮箱后缀 - if(!in_array(strtolower($usernameSuffix[1]), $sensitiveWords)){ + $emailSuffix = explode('@', $email); // 提取邮箱后缀 + if(!in_array(strtolower($emailSuffix[1]), $sensitiveWords)){ return Response::json(['status' => 'fail', 'data' => '', 'message' => trans('auth.email_invalid')]); } } @@ -730,10 +735,10 @@ class AuthController extends Controller // 发送邮件 $code = makeRandStr(6, TRUE); - $logId = Helpers::addEmailLog($username, '发送注册验证码', '验证码:'.$code); - Mail::to($username)->send(new sendVerifyCode($logId, $code)); + $logId = Helpers::addEmailLog($email, '发送注册验证码', '验证码:'.$code); + Mail::to($email)->send(new sendVerifyCode($logId, $code)); - $this->addVerifyCode($username, $code); + $this->addVerifyCode($email, $code); Cache::put('send_verify_code_'.md5(getClientIP()), getClientIP(), 60); @@ -741,10 +746,10 @@ class AuthController extends Controller } // 生成注册验证码 - private function addVerifyCode($username, $code) + private function addVerifyCode($email, $code) { $verify = new VerifyCode(); - $verify->username = $username; + $verify->address = $email; $verify->code = $code; $verify->status = 0; $verify->save(); diff --git a/app/Http/Controllers/PaymentController.php b/app/Http/Controllers/PaymentController.php index ddf01fad..af3c6c0d 100644 --- a/app/Http/Controllers/PaymentController.php +++ b/app/Http/Controllers/PaymentController.php @@ -22,6 +22,7 @@ use Payment\Exceptions\ClassNotFoundException; use Payment\Exceptions\GatewayException; use Response; use Validator; +use Xhat\Payjs\Payjs; /** * 支付控制器 @@ -40,82 +41,88 @@ class PaymentController extends Controller $goods_id = $request->input('goods_id'); $coupon_sn = $request->input('coupon_sn'); $pay_type = $request->input('pay_type'); - - + $balance = $request->input('amount'); $goods = Goods::query()->where('status', 1)->where('id', $goods_id)->first(); - if(!$goods){ - return Response::json(['status' => 'fail', 'data' => '', 'message' => '订单创建失败:商品或服务已下架']); - } - // 是否有生效的套餐 - $activePlan = Order::uid()->with(['goods'])->whereHas('goods', function($q){ $q->where('type', 2); })->where('status', 2)->where('is_expire', 0)->doesntExist(); - //无生效套餐,禁止购买加油包 - if($goods->type == 1 && $activePlan){ - return Response::json(['status' => 'fail', 'data' => '', 'message' => '购买加油包前,请先购买套餐']); - } - - //非余额付款下,检查对应的在线支付是否开启 - if($pay_type != 1){ - // 判断是否开启在线支付 - if(!self::$systemConfig['is_alipay'] && !self::$systemConfig['is_f2fpay']){ - return Response::json(['status' => 'fail', 'data' => '', 'message' => '订单创建失败:系统并未开启在线支付功能']); + if(isset($balance)){ + if(!is_numeric($balance) || $balance <= 0){ + return Response::json(['status' => 'fail', 'data' => '', 'message' => '充值余额不合规']); + } + $amount = $balance; + }elseif(isset($goods_id) && isset($pay_type)){ + if(!$goods){ + return Response::json(['status' => 'fail', 'data' => '', 'message' => '订单创建失败:商品或服务已下架']); + } + // 是否有生效的套餐 + $activePlan = Order::uid()->with(['goods'])->whereHas('goods', function($q){ $q->where('type', 2); })->where('status', 2)->where('is_expire', 0)->doesntExist(); + //无生效套餐,禁止购买加油包 + if($goods->type == 1 && $activePlan){ + return Response::json(['status' => 'fail', 'data' => '', 'message' => '购买加油包前,请先购买套餐']); } - // 判断是否存在同个商品的未支付订单 - $existsOrder = Order::uid()->where('status', 0)->where('goods_id', $goods_id)->exists(); - if($existsOrder){ - return Response::json(['status' => 'fail', 'data' => '', 'message' => '订单创建失败:尚有未支付的订单,请先去支付']); + //非余额付款下,检查对应的在线支付是否开启 + if($pay_type != 1){ + // 判断是否开启在线支付 + if(!self::$systemConfig['is_alipay'] && !self::$systemConfig['is_f2fpay']){ + return Response::json(['status' => 'fail', 'data' => '', 'message' => '订单创建失败:系统并未开启在线支付功能']); + } + + // 判断是否存在同个商品的未支付订单 + $existsOrder = Order::uid()->where('status', 0)->where('goods_id', $goods_id)->exists(); + if($existsOrder){ + return Response::json(['status' => 'fail', 'data' => '', 'message' => '订单创建失败:尚有未支付的订单,请先去支付']); + } + } + + // 单个商品限购 + if($goods->limit_num){ + $count = Order::uid()->where('status', '>=', 0)->where('goods_id', $goods_id)->count(); + if($count >= $goods->limit_num){ + return Response::json(['status' => 'fail', 'data' => '', 'message' => '此商品/服务限购'.$goods->limit_num.'次,您已购买'.$count.'次']); + } + } + + // 使用优惠券 + if($coupon_sn){ + $coupon = Coupon::query()->where('status', 0)->whereIn('type', [1, 2])->where('sn', $coupon_sn)->first(); + if(!$coupon){ + return Response::json(['status' => 'fail', 'data' => '', 'message' => '订单创建失败:优惠券不存在']); + } + + // 计算实际应支付总价 + $amount = $coupon->type == 2? $goods->price*$coupon->discount/10 : $goods->price-$coupon->amount; + $amount = $amount > 0? round($amount, 2) : 0; // 四舍五入保留2位小数,避免无法正常创建订单 + }else{ + $amount = $goods->price; + } + + // 价格异常判断 + if($amount < 0){ + return Response::json(['status' => 'fail', 'data' => '', 'message' => '订单创建失败:订单总价异常']); + }elseif($amount == 0 && $pay_type != 1){ + return Response::json(['status' => 'fail', 'data' => '', 'message' => '订单创建失败:订单总价为0,无需使用在线支付']); + } + + // 验证账号余额是否充足 + if($pay_type == 1 && Auth::user()->balance < $amount){ + return Response::json(['status' => 'fail', 'data' => '', 'message' => '您的余额不足,请先充值']); } } - // 单个商品限购 - if($goods->limit_num){ - $count = Order::uid()->where('status', '>=', 0)->where('goods_id', $goods_id)->count(); - if($count >= $goods->limit_num){ - return Response::json(['status' => 'fail', 'data' => '', 'message' => '此商品/服务限购'.$goods->limit_num.'次,您已购买'.$count.'次']); - } - } - - // 使用优惠券 - if($coupon_sn){ - $coupon = Coupon::query()->where('status', 0)->whereIn('type', [1, 2])->where('sn', $coupon_sn)->first(); - if(!$coupon){ - return Response::json(['status' => 'fail', 'data' => '', 'message' => '订单创建失败:优惠券不存在']); - } - - // 计算实际应支付总价 - $amount = $coupon->type == 2? $goods->price*$coupon->discount/10 : $goods->price-$coupon->amount; - $amount = $amount > 0? round($amount, 2) : 0; // 四舍五入保留2位小数,避免无法正常创建订单 - }else{ - $amount = $goods->price; - } - - // 价格异常判断 - if($amount < 0){ - return Response::json(['status' => 'fail', 'data' => '', 'message' => '订单创建失败:订单总价异常']); - }elseif($amount == 0 && $pay_type != 1){ - return Response::json(['status' => 'fail', 'data' => '', 'message' => '订单创建失败:订单总价为0,无需使用在线支付']); - } - - // 验证账号余额是否充足 - if($pay_type == 1 && Auth::user()->balance < $amount){ - return Response::json(['status' => 'fail', 'data' => '', 'message' => '您的余额不足,请先充值']); - } - - DB::beginTransaction(); try{ + DB::beginTransaction(); $orderSn = date('ymdHis').mt_rand(100000, 999999); // 生成订单 $order = new Order(); $order->order_sn = $orderSn; $order->user_id = Auth::user()->id; - $order->goods_id = $goods_id; + $order->goods_id = $balance? -1 : $goods_id; $order->coupon_id = !empty($coupon)? $coupon->id : 0; - $order->origin_amount = $goods->price; + $order->origin_amount = $balance? : $goods->price; $order->amount = $amount; - $order->expire_at = date("Y-m-d H:i:s", strtotime("+".$goods->days." days")); + $order->expire_at = $balance? NULL : date("Y-m-d H:i:s", strtotime("+".$goods->days." days")); $order->is_expire = 0; - $order->pay_way = $pay_type; + $order->pay_way = $balance? 0 : $pay_type; $order->status = 0; $order->save(); // 生成支付单 @@ -200,6 +207,31 @@ class PaymentController extends Controller exit; } + }elseif($pay_type == 6){ + $pay_way = 1; + // 配置通信参数 + $config = [ + 'mchid' => self::$systemConfig['payjs_mch_id'], + 'key' => self::$systemConfig['payjs_key'], + ]; + + // 初始化 + $payjs = new Payjs($config); + + $data = [ + 'body' => '', + 'total_fee' => $amount, + 'out_trade_no' => $orderSn, + 'notify_url' => self::$systemConfig['website_url']."/api/payjs", + ]; + + $result = $payjs->native($data); + if(!$result['return_code']){ + Log::error("【PayJs】错误: ".$result['return_msg']); + + return Response::json(['status' => 'fail', 'data' => '', 'message' => '创建支付单失败:支付渠道暂时无法提供支付信息!']); + } + }else{ return Response::json(['status' => 'fail', 'data' => '', 'message' => '创建支付单失败:未知支付类型']); } @@ -211,12 +243,16 @@ class PaymentController extends Controller $payment->order_sn = $orderSn; $payment->pay_way = $pay_way? : 1; $payment->amount = $amount; - if(self::$systemConfig['is_alipay'] && $pay_type == 4){ + if($pay_type == 4){ $payment->qr_code = $result; - }elseif(self::$systemConfig['is_f2fpay'] && $pay_type == 5){ + }elseif($pay_type == 5){ $payment->qr_code = $result['qr_code']; $payment->qr_url = 'http://qr.topscan.com/api.php?text='.$result['qr_code'].'&bg=ffffff&fg=000000&pt=1c73bd&m=10&w=400&el=1&inpt=1eabfc&logo=https://t.alipayobjects.com/tfscom/T1Z5XfXdxmXXXXXXXX.png'; //后备:https://cli.im/api/qrcode/code?text=".$result['qr_code']."&mhid=5EfGCwztyckhMHcmI9ZcOKs $payment->qr_local_url = $payment->qr_url; + }elseif($pay_type == 6){ + $payment->qr_code = $result['code_url']; + $payment->qr_url = $result['qrcode']; + $payment->qr_local_url = $payment->qr_url; } $payment->status = 0; $payment->save(); @@ -254,7 +290,10 @@ class PaymentController extends Controller // 支付单详情 public function detail($sn) { - $view['payment'] = Payment::uid()->with(['order', 'order.goods'])->where('sn', $sn)->firstOrFail(); + $payment = Payment::uid()->with(['order', 'order.goods'])->where('sn', $sn)->firstOrFail(); + $view['payment'] = $payment; + $view['name'] = $payment->order->goods? $payment->order->goods->name : '余额充值'; + $view['days'] = $payment->order->goods? $payment->order->goods->days : 0; return Response::view('payment.detail', $view); } diff --git a/app/Http/Controllers/SubscribeController.php b/app/Http/Controllers/SubscribeController.php index 9b90262b..6b6ab0d1 100644 --- a/app/Http/Controllers/SubscribeController.php +++ b/app/Http/Controllers/SubscribeController.php @@ -33,18 +33,18 @@ class SubscribeController extends Controller public function subscribeList(Request $request) { $user_id = $request->input('user_id'); - $username = $request->input('username'); + $email = $request->input('email'); $status = $request->input('status'); - $query = UserSubscribe::with(['user:id,username']); + $query = UserSubscribe::with(['user:id,email']); if(isset($user_id)){ $query->where('user_id', $user_id); } - if(isset($username)){ - $query->whereHas('user', function($q) use ($username){ - $q->where('username', 'like', '%'.$username.'%'); + if(isset($email)){ + $query->whereHas('user', function($q) use ($email){ + $q->where('email', 'like', '%'.$email.'%'); }); } @@ -61,7 +61,7 @@ class SubscribeController extends Controller public function subscribeLog(Request $request) { $id = $request->input('id'); - $query = UserSubscribeLog::with('user:username'); + $query = UserSubscribeLog::with('user:email'); if(isset($id)){ $query->where('sid', $id); diff --git a/app/Http/Controllers/TicketController.php b/app/Http/Controllers/TicketController.php index 838fd02a..06da51ec 100644 --- a/app/Http/Controllers/TicketController.php +++ b/app/Http/Controllers/TicketController.php @@ -32,13 +32,13 @@ class TicketController extends Controller // 工单列表 public function ticketList(Request $request) { - $username = $request->input('username'); + $email = $request->input('email'); $query = Ticket::query(); - if(isset($username)){ - $query->whereHas('user', function($q) use ($username){ - $q->where('username', 'like', '%'.$username.'%'); + if(isset($email)){ + $query->whereHas('user', function($q) use ($email){ + $q->where('email', 'like', '%'.$email.'%'); }); } @@ -80,8 +80,8 @@ class TicketController extends Controller Mail::to(self::$systemConfig['webmaster_email'])->send(new replyTicket($logId, $title, $content)); } }else{ - $logId = Helpers::addEmailLog($ticket->user->username, $title, $content); - Mail::to($ticket->user->username)->send(new replyTicket($logId, $title, $content)); + $logId = Helpers::addEmailLog($ticket->user->email, $title, $content); + Mail::to($ticket->user->email)->send(new replyTicket($logId, $title, $content)); } // 通过ServerChan发微信消息提醒管理员 @@ -121,8 +121,8 @@ class TicketController extends Controller $content = "工单【".$ticket->title."】已关闭"; // 发邮件通知用户 - $logId = Helpers::addEmailLog($ticket->user->username, $title, $content); - Mail::to($ticket->user->username)->send(new closeTicket($logId, $title, $content)); + $logId = Helpers::addEmailLog($ticket->user->email, $title, $content); + Mail::to($ticket->user->email)->send(new closeTicket($logId, $title, $content)); return Response::json(['status' => 'success', 'data' => '', 'message' => '关闭成功']); } diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index ef3cafbe..9643075e 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -15,6 +15,7 @@ use App\Http\Models\ReferralLog; use App\Http\Models\SsNode; use App\Http\Models\SsNodeInfo; use App\Http\Models\SsNodeLabel; +use App\Http\Models\SsNodePing; use App\Http\Models\Ticket; use App\Http\Models\TicketReply; use App\Http\Models\User; @@ -135,7 +136,7 @@ class UserController extends Controller return Response::json(['status' => 'fail', 'message' => '已经签到过了,明天再来吧']); } - $traffic = mt_rand((int)self::$systemConfig['min_rand_traffic'], (int)self::$systemConfig['max_rand_traffic']) * 1048576; + $traffic = mt_rand((int)self::$systemConfig['min_rand_traffic'], (int)self::$systemConfig['max_rand_traffic'])*1048576; $ret = User::uid()->increment('transfer_enable', $traffic); if(!$ret){ return Response::json(['status' => 'fail', 'message' => '签到失败,系统异常']); @@ -171,6 +172,11 @@ class UserController extends Controller $nodeList = SsNode::query()->selectRaw('ss_node.*')->leftJoin('ss_node_label', 'ss_node.id', '=', 'ss_node_label.node_id')->whereIn('ss_node_label.label_id', $userLabelIds)->where('ss_node.status', 1)->groupBy('ss_node.id')->orderBy('ss_node.sort', 'desc')->orderBy('ss_node.id', 'asc')->get(); foreach($nodeList as $node){ + $node->ct = number_format(SsNodePing::query()->where('node_id', $node->id)->where('ct', '>', '0')->avg('ct'), 1, '.', ''); + $node->cu = number_format(SsNodePing::query()->where('node_id', $node->id)->where('cu', '>', '0')->avg('cu'), 1, '.', ''); + $node->cm = number_format(SsNodePing::query()->where('node_id', $node->id)->where('cm', '>', '0')->avg('cm'), 1, '.', ''); + $node->hk = number_format(SsNodePing::query()->where('node_id', $node->id)->where('hk', '>', '0')->avg('hk'), 1, '.', ''); + // 节点在线状态 $node->offline = SsNodeInfo::query()->where('node_id', $node->id)->where('log_time', '>=', strtotime("-10 minutes"))->orderBy('id', 'desc')->doesntExist(); // 节点标签 @@ -197,6 +203,7 @@ class UserController extends Controller if($request->isMethod('POST')){ $old_password = trim($request->input('old_password')); $new_password = trim($request->input('new_password')); + $username = trim($request->input('username')); $wechat = trim($request->input('wechat')); $qq = trim($request->input('qq')); $passwd = trim($request->input('passwd')); @@ -220,33 +227,27 @@ class UserController extends Controller }else{ return Redirect::to('profile#tab_1')->with('successMsg', '修改成功'); } - } - - // 修改联系方式 - if($wechat || $qq){ - if(empty(clean($wechat)) && empty(clean($qq))){ - return Redirect::to('profile#tab_2')->withErrors('修改失败'); - } - - $ret = User::uid()->update(['wechat' => $wechat, 'qq' => $qq]); - if(!$ret){ - return Redirect::to('profile#tab_2')->withErrors('修改失败'); - }else{ - return Redirect::to('profile#tab_2')->with('successMsg', '修改成功'); - } - } - - // 修改代理密码 - if($passwd){ + // 修改代理密码 + }elseif($passwd){ $ret = User::uid()->update(['passwd' => $passwd]); if(!$ret){ return Redirect::to('profile#tab_3')->withErrors('修改失败'); }else{ return Redirect::to('profile#tab_3')->with('successMsg', '修改成功'); } - } + }else{ + // 修改联系方式 + if(empty($username)){ + return Redirect::to('profile#tab_2')->withErrors('修改失败,昵称不能为空值'); + } - return Redirect::to('profile#tab_1')->withErrors('非法请求'); + $ret = User::uid()->update(['username' => $username, 'wechat' => $wechat, 'qq' => $qq]); + if(!$ret){ + return Redirect::to('profile#tab_2')->withErrors('修改失败'); + }else{ + return Redirect::to('profile#tab_2')->with('successMsg', '修改成功'); + } + } }else{ return Response::view('user.profile'); } @@ -347,7 +348,7 @@ class UserController extends Controller if($obj->id){ $emailTitle = "新工单提醒"; - $content = "标题:【".$title."】
用户:".Auth::user()->username."
内容:".$content; + $content = "标题:【".$title."】
用户:".Auth::user()->email."
内容:".$content; // 发邮件通知管理员 if(self::$systemConfig['webmaster_email']){ @@ -531,7 +532,7 @@ class UserController extends Controller $view['link'] = self::$systemConfig['website_url'].'/register?aff='.Auth::user()->id; $view['referralLogList'] = ReferralLog::uid()->with('user')->orderBy('id', 'desc')->paginate(10, ['*'], 'log_page'); $view['referralApplyList'] = ReferralApply::uid()->with('user')->orderBy('id', 'desc')->paginate(10, ['*'], 'apply_page'); - $view['referralUserList'] = User::query()->select(['username', 'created_at'])->where('referral_uid', Auth::user()->id)->orderBy('id', 'desc')->paginate(10, ['*'], 'user_page'); + $view['referralUserList'] = User::query()->select(['email', 'created_at'])->where('referral_uid', Auth::user()->id)->orderBy('id', 'desc')->paginate(10, ['*'], 'user_page'); return Response::view('user.referral', $view); } @@ -651,8 +652,8 @@ class UserController extends Controller $coupon = Coupon::query()->where('sn', $request->input('coupon_sn'))->first(); - DB::beginTransaction(); try{ + DB::beginTransaction(); // 写入日志 $this->addUserBalanceLog(Auth::user()->id, 0, Auth::user()->balance, Auth::user()->balance+$coupon->amount, $coupon->amount, '用户手动充值 - [充值券:'.$request->input('coupon_sn').']'); diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index ea24a4e3..e33503c3 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -6,8 +6,10 @@ use App\Http\Middleware\Affiliate; use App\Http\Middleware\CheckForMaintenanceMode; use App\Http\Middleware\EncryptCookies; use App\Http\Middleware\isAdmin; +use App\Http\Middleware\isAdminlogin; use App\Http\Middleware\isForbidden; use App\Http\Middleware\isLogin; +use App\Http\Middleware\isMaintenance; use App\Http\Middleware\isSecurity; use App\Http\Middleware\RedirectIfAuthenticated; use App\Http\Middleware\SetLocale; @@ -85,7 +87,9 @@ class Kernel extends HttpKernel 'signed' => ValidateSignature::class, 'throttle' => ThrottleRequests::class, 'isAdmin' => isAdmin::class, + 'isAdminLogin' => isAdminLogin::class, 'isLogin' => isLogin::class, + 'isMaintenance' => isMaintenance::class, 'isSecurity' => isSecurity::class, 'isForbidden' => isForbidden::class, 'affiliate' => Affiliate::class, diff --git a/app/Http/Middleware/isAdminlogin.php b/app/Http/Middleware/isAdminlogin.php new file mode 100644 index 00000000..4971977f --- /dev/null +++ b/app/Http/Middleware/isAdminlogin.php @@ -0,0 +1,26 @@ +guest()){ + return Redirect::to('admin/login'); + } + + return $next($request); + } +} diff --git a/app/Http/Middleware/isMaintenance.php b/app/Http/Middleware/isMaintenance.php new file mode 100644 index 00000000..b7d8339b --- /dev/null +++ b/app/Http/Middleware/isMaintenance.php @@ -0,0 +1,27 @@ +view('auth.maintenance', ['message' => Helpers::systemConfig()['maintenance_content'], 'time' => Helpers::systemConfig()['maintenance_time']? : '0']); + } + + return $next($request); + } +} \ No newline at end of file diff --git a/app/Http/Models/SsNodePing.php b/app/Http/Models/SsNodePing.php new file mode 100644 index 00000000..a9caba6e --- /dev/null +++ b/app/Http/Models/SsNodePing.php @@ -0,0 +1,46 @@ +hasOne(SsNode::class, 'id', 'node_id'); + } +} diff --git a/app/Http/Models/User.php b/app/Http/Models/User.php index ccd04f19..af913706 100644 --- a/app/Http/Models/User.php +++ b/app/Http/Models/User.php @@ -19,6 +19,7 @@ use Illuminate\Support\Carbon; * @package App\Http\Models * @mixin Eloquent * @property int $id + * @property string $email 邮箱 * @property string $username 用户名 * @property string $password 密码 * @property int $port 代理端口 @@ -70,6 +71,7 @@ use Illuminate\Support\Carbon; * @method static Builder|User newQuery() * @method static Builder|User query() * @method static Builder|User uid() + * @method static Builder|User whereEmail($value) * @method static Builder|User whereBalance($value) * @method static Builder|User whereBanTime($value) * @method static Builder|User whereCreatedAt($value) diff --git a/app/Http/Models/VerifyCode.php b/app/Http/Models/VerifyCode.php index 37215f3a..4edf5e23 100644 --- a/app/Http/Models/VerifyCode.php +++ b/app/Http/Models/VerifyCode.php @@ -14,7 +14,7 @@ use Illuminate\Support\Carbon; * @package App\Http\Models * @mixin Eloquent * @property int $id - * @property string $username 用户邮箱 + * @property string $address 用户邮箱 * @property string $code 验证码 * @property int $status 状态:0-未使用、1-已使用、2-已失效 * @property Carbon|null $created_at 创建时间 @@ -28,6 +28,7 @@ use Illuminate\Support\Carbon; * @method static Builder|VerifyCode whereStatus($value) * @method static Builder|VerifyCode whereUpdatedAt($value) * @method static Builder|VerifyCode whereUsername($value) + * @method static Builder|VerifyCode whereAddress($value) */ class VerifyCode extends Model { diff --git a/composer.json b/composer.json index 6c021e0b..7f678780 100644 --- a/composer.json +++ b/composer.json @@ -10,9 +10,9 @@ "require": { "php": "^7.2", "ext-curl": "*", + "ext-dom": "*", "ext-json": "*", "ext-openssl": "*", - "ext-dom": "*", "barryvdh/laravel-debugbar": "^3.2", "barryvdh/laravel-ide-helper": "^2.6", "fideloper/proxy": "^4.2", @@ -32,7 +32,8 @@ "predis/predis": "^1.1", "rap2hpoutre/laravel-log-viewer": "^1.3", "riverslei/payment": "*", - "spatie/laravel-permission": "^3.4" + "spatie/laravel-permission": "^3.4", + "xhat/payjs": "^1.4" }, "require-dev": { "filp/whoops": "^2.7", diff --git a/composer.lock b/composer.lock index 5dd43cf1..748f2411 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "dd0a90c52ce518345ffab5a1c54f7be8", + "content-hash": "7dcdad19274c70ff2e5617fcd6f1780f", "packages": [ { "name": "barryvdh/laravel-debugbar", @@ -214,16 +214,16 @@ }, { "name": "caouecs/laravel-lang", - "version": "4.0.10", + "version": "4.0.11", "source": { "type": "git", "url": "https://github.com/caouecs/Laravel-lang.git", - "reference": "db23833785bb4e675ed1d06582f375ccbb8d4e6a" + "reference": "134e1cbf9be14d97fc7937d7df784eae2d4bfa3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/caouecs/Laravel-lang/zipball/db23833785bb4e675ed1d06582f375ccbb8d4e6a", - "reference": "db23833785bb4e675ed1d06582f375ccbb8d4e6a", + "url": "https://api.github.com/repos/caouecs/Laravel-lang/zipball/134e1cbf9be14d97fc7937d7df784eae2d4bfa3c", + "reference": "134e1cbf9be14d97fc7937d7df784eae2d4bfa3c", "shasum": "", "mirrors": [ { @@ -235,9 +235,6 @@ "require": { "ext-json": "*" }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.10" - }, "suggest": { "ablunier/laravel-lang-installer": "Command for easily add languages to a Laravel project", "andrey-helldar/laravel-lang-publisher": "Easy installation and update of translation files for your project", @@ -262,7 +259,7 @@ "laravel", "lpm" ], - "time": "2020-03-01T14:11:14+00:00" + "time": "2020-03-17T15:24:26+00:00" }, { "name": "composer/ca-bundle", @@ -328,16 +325,16 @@ }, { "name": "composer/composer", - "version": "1.9.3", + "version": "1.10.1", "source": { "type": "git", "url": "https://github.com/composer/composer.git", - "reference": "1291a16ce3f48bfdeca39d64fca4875098af4d7b" + "reference": "b912a45da3e2b22f5cb5a23e441b697a295ba011" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/1291a16ce3f48bfdeca39d64fca4875098af4d7b", - "reference": "1291a16ce3f48bfdeca39d64fca4875098af4d7b", + "url": "https://api.github.com/repos/composer/composer/zipball/b912a45da3e2b22f5cb5a23e441b697a295ba011", + "reference": "b912a45da3e2b22f5cb5a23e441b697a295ba011", "shasum": "", "mirrors": [ { @@ -356,17 +353,17 @@ "psr/log": "^1.0", "seld/jsonlint": "^1.4", "seld/phar-utils": "^1.0", - "symfony/console": "^2.7 || ^3.0 || ^4.0", - "symfony/filesystem": "^2.7 || ^3.0 || ^4.0", - "symfony/finder": "^2.7 || ^3.0 || ^4.0", - "symfony/process": "^2.7 || ^3.0 || ^4.0" + "symfony/console": "^2.7 || ^3.0 || ^4.0 || ^5.0", + "symfony/filesystem": "^2.7 || ^3.0 || ^4.0 || ^5.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0 || ^5.0", + "symfony/process": "^2.7 || ^3.0 || ^4.0 || ^5.0" }, "conflict": { "symfony/console": "2.8.38" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7", - "phpunit/phpunit-mock-objects": "^2.3 || ^3.0" + "phpspec/prophecy": "^1.10", + "symfony/phpunit-bridge": "^3.4" }, "suggest": { "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages", @@ -379,7 +376,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.9-dev" + "dev-master": "1.10-dev" } }, "autoload": { @@ -410,7 +407,7 @@ "dependency", "package" ], - "time": "2020-02-04T11:58:49+00:00" + "time": "2020-03-13T19:34:27+00:00" }, { "name": "composer/semver", @@ -1771,6 +1768,7 @@ "email": "jakub.onderka@gmail.com" } ], + "abandoned": "php-parallel-lint/php-console-color", "time": "2018-09-29T17:23:10+00:00" }, { @@ -1823,6 +1821,7 @@ } ], "description": "Highlight PHP code in terminal", + "abandoned": "php-parallel-lint/php-console-highlighter", "time": "2018-09-29T18:48:56+00:00" }, { @@ -2252,16 +2251,16 @@ }, { "name": "league/flysystem", - "version": "1.0.64", + "version": "1.0.66", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "d13c43dbd4b791f815215959105a008515d1a2e0" + "reference": "021569195e15f8209b1c4bebb78bd66aa4f08c21" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/d13c43dbd4b791f815215959105a008515d1a2e0", - "reference": "d13c43dbd4b791f815215959105a008515d1a2e0", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/021569195e15f8209b1c4bebb78bd66aa4f08c21", + "reference": "021569195e15f8209b1c4bebb78bd66aa4f08c21", "shasum": "", "mirrors": [ { @@ -2338,20 +2337,20 @@ "sftp", "storage" ], - "time": "2020-02-05T18:14:17+00:00" + "time": "2020-03-17T18:58:12+00:00" }, { "name": "markbaker/complex", - "version": "1.4.7", + "version": "1.4.8", "source": { "type": "git", "url": "https://github.com/MarkBaker/PHPComplex.git", - "reference": "1ea674a8308baf547cbcbd30c5fcd6d301b7c000" + "reference": "8eaa40cceec7bf0518187530b2e63871be661b72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/MarkBaker/PHPComplex/zipball/1ea674a8308baf547cbcbd30c5fcd6d301b7c000", - "reference": "1ea674a8308baf547cbcbd30c5fcd6d301b7c000", + "url": "https://api.github.com/repos/MarkBaker/PHPComplex/zipball/8eaa40cceec7bf0518187530b2e63871be661b72", + "reference": "8eaa40cceec7bf0518187530b2e63871be661b72", "shasum": "", "mirrors": [ { @@ -2364,14 +2363,14 @@ "php": "^5.6.0|^7.0.0" }, "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.4.3", - "phpcompatibility/php-compatibility": "^8.0", + "dealerdirect/phpcodesniffer-composer-installer": "^0.5.0", + "phpcompatibility/php-compatibility": "^9.0", "phpdocumentor/phpdocumentor": "2.*", "phploc/phploc": "2.*", "phpmd/phpmd": "2.*", "phpunit/phpunit": "^4.8.35|^5.4.0", "sebastian/phpcpd": "2.*", - "squizlabs/php_codesniffer": "^3.3.0" + "squizlabs/php_codesniffer": "^3.4.0" }, "type": "library", "autoload": { @@ -2439,7 +2438,7 @@ "complex", "mathematics" ], - "time": "2018-10-13T23:28:42+00:00" + "time": "2020-03-11T20:15:49+00:00" }, { "name": "markbaker/matrix", @@ -2585,16 +2584,16 @@ }, { "name": "mews/captcha", - "version": "3.0.2", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/mewebstudio/captcha.git", - "reference": "0fa11e098549ceb8f99f93dcf24719622d8c8078" + "reference": "cc4d745c4f7506be0b73ac70324f71408c7e3a80" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mewebstudio/captcha/zipball/0fa11e098549ceb8f99f93dcf24719622d8c8078", - "reference": "0fa11e098549ceb8f99f93dcf24719622d8c8078", + "url": "https://api.github.com/repos/mewebstudio/captcha/zipball/cc4d745c4f7506be0b73ac70324f71408c7e3a80", + "reference": "cc4d745c4f7506be0b73ac70324f71408c7e3a80", "shasum": "", "mirrors": [ { @@ -2605,17 +2604,17 @@ }, "require": { "ext-gd": "*", - "illuminate/config": "~5.0|^6.0", - "illuminate/filesystem": "~5.0|^6.0", - "illuminate/hashing": "~5.0|^6.0", - "illuminate/session": "~5.0|^6.0", - "illuminate/support": "~5.0|^6.0", + "illuminate/config": "~5.0|^6.0|^7.0", + "illuminate/filesystem": "~5.0|^6.0|^7.0", + "illuminate/hashing": "~5.0|^6.0|^7.0", + "illuminate/session": "~5.0|^6.0|^7.0", + "illuminate/support": "~5.0|^6.0|^7.0", "intervention/image": "~2.5", "php": "^7.2" }, "require-dev": { "mockery/mockery": "^1.0", - "phpunit/phpunit": "^8.0" + "phpunit/phpunit": "^8.5" }, "type": "package", "extra": { @@ -2656,20 +2655,20 @@ "laravel6 Captcha", "laravel6 Security" ], - "time": "2019-12-05T11:15:51+00:00" + "time": "2020-03-21T08:52:58+00:00" }, { "name": "mews/purifier", - "version": "3.2.0", + "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/mewebstudio/Purifier.git", - "reference": "261ac8abb0298e853af22ca4ef57bc2a5a723d22" + "reference": "c70be34e78848ab1771223a771ce7397ddab8c6e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mewebstudio/Purifier/zipball/261ac8abb0298e853af22ca4ef57bc2a5a723d22", - "reference": "261ac8abb0298e853af22ca4ef57bc2a5a723d22", + "url": "https://api.github.com/repos/mewebstudio/Purifier/zipball/c70be34e78848ab1771223a771ce7397ddab8c6e", + "reference": "c70be34e78848ab1771223a771ce7397ddab8c6e", "shasum": "", "mirrors": [ { @@ -2740,7 +2739,7 @@ "security", "xss" ], - "time": "2020-03-06T00:05:13+00:00" + "time": "2020-03-21T08:50:37+00:00" }, { "name": "misechow/geetest", @@ -2998,16 +2997,16 @@ }, { "name": "nesbot/carbon", - "version": "2.31.0", + "version": "2.32.2", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "bbc0ab53f41a4c6f223c18efcdbd9bc725eb5d2d" + "reference": "f10e22cf546704fab1db4ad4b9dedbc5c797a0dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/bbc0ab53f41a4c6f223c18efcdbd9bc725eb5d2d", - "reference": "bbc0ab53f41a4c6f223c18efcdbd9bc725eb5d2d", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/f10e22cf546704fab1db4ad4b9dedbc5c797a0dc", + "reference": "f10e22cf546704fab1db4ad4b9dedbc5c797a0dc", "shasum": "", "mirrors": [ { @@ -3022,6 +3021,7 @@ "symfony/translation": "^3.4 || ^4.0 || ^5.0" }, "require-dev": { + "doctrine/orm": "^2.7", "friendsofphp/php-cs-fixer": "^2.14 || ^3.0", "kylekatarnls/multi-tester": "^1.1", "phpmd/phpmd": "^2.8", @@ -3070,7 +3070,7 @@ "datetime", "time" ], - "time": "2020-03-01T11:11:58+00:00" + "time": "2020-03-31T13:43:19+00:00" }, { "name": "nikic/php-parser", @@ -3455,16 +3455,16 @@ }, { "name": "phpoption/phpoption", - "version": "1.7.2", + "version": "1.7.3", "source": { "type": "git", "url": "https://github.com/schmittjoh/php-option.git", - "reference": "77f7c4d2e65413aff5b5a8cc8b3caf7a28d81959" + "reference": "4acfd6a4b33a509d8c88f50e5222f734b6aeebae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/77f7c4d2e65413aff5b5a8cc8b3caf7a28d81959", - "reference": "77f7c4d2e65413aff5b5a8cc8b3caf7a28d81959", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/4acfd6a4b33a509d8c88f50e5222f734b6aeebae", + "reference": "4acfd6a4b33a509d8c88f50e5222f734b6aeebae", "shasum": "", "mirrors": [ { @@ -3474,7 +3474,7 @@ ] }, "require": { - "php": "^5.5.9 || ^7.0" + "php": "^5.5.9 || ^7.0 || ^8.0" }, "require-dev": { "bamarni/composer-bin-plugin": "^1.3", @@ -3512,7 +3512,7 @@ "php", "type" ], - "time": "2019-12-15T19:35:24+00:00" + "time": "2020-03-21T18:07:53+00:00" }, { "name": "predis/predis", @@ -3683,16 +3683,16 @@ }, { "name": "psr/log", - "version": "1.1.2", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801" + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801", - "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801", + "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", "shasum": "", "mirrors": [ { @@ -3732,7 +3732,7 @@ "psr", "psr-3" ], - "time": "2019-11-01T11:05:21+00:00" + "time": "2020-03-23T09:12:05+00:00" }, { "name": "psr/simple-cache", @@ -4384,16 +4384,16 @@ }, { "name": "symfony/console", - "version": "v4.4.5", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "4fa15ae7be74e53f6ec8c83ed403b97e23b665e9" + "reference": "10bb3ee3c97308869d53b3e3d03f6ac23ff985f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/4fa15ae7be74e53f6ec8c83ed403b97e23b665e9", - "reference": "4fa15ae7be74e53f6ec8c83ed403b97e23b665e9", + "url": "https://api.github.com/repos/symfony/console/zipball/10bb3ee3c97308869d53b3e3d03f6ac23ff985f7", + "reference": "10bb3ee3c97308869d53b3e3d03f6ac23ff985f7", "shasum": "", "mirrors": [ { @@ -4462,20 +4462,20 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2020-02-24T13:10:00+00:00" + "time": "2020-03-30T11:41:10+00:00" }, { "name": "symfony/css-selector", - "version": "v5.0.5", + "version": "v5.0.7", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "a0b51ba9938ccc206d9284de7eb527c2d4550b44" + "reference": "5f8d5271303dad260692ba73dfa21777d38e124e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/a0b51ba9938ccc206d9284de7eb527c2d4550b44", - "reference": "a0b51ba9938ccc206d9284de7eb527c2d4550b44", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/5f8d5271303dad260692ba73dfa21777d38e124e", + "reference": "5f8d5271303dad260692ba73dfa21777d38e124e", "shasum": "", "mirrors": [ { @@ -4521,20 +4521,20 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2020-02-04T09:41:09+00:00" + "time": "2020-03-27T16:56:45+00:00" }, { "name": "symfony/debug", - "version": "v4.4.5", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "a980d87a659648980d89193fd8b7a7ca89d97d21" + "reference": "346636d2cae417992ecfd761979b2ab98b339a45" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/a980d87a659648980d89193fd8b7a7ca89d97d21", - "reference": "a980d87a659648980d89193fd8b7a7ca89d97d21", + "url": "https://api.github.com/repos/symfony/debug/zipball/346636d2cae417992ecfd761979b2ab98b339a45", + "reference": "346636d2cae417992ecfd761979b2ab98b339a45", "shasum": "", "mirrors": [ { @@ -4583,20 +4583,20 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2020-02-23T14:41:43+00:00" + "time": "2020-03-27T16:54:36+00:00" }, { "name": "symfony/error-handler", - "version": "v4.4.5", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "89aa4b9ac6f1f35171b8621b24f60477312085be" + "reference": "7e9828fc98aa1cf27b422fe478a84f5b0abb7358" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/89aa4b9ac6f1f35171b8621b24f60477312085be", - "reference": "89aa4b9ac6f1f35171b8621b24f60477312085be", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/7e9828fc98aa1cf27b422fe478a84f5b0abb7358", + "reference": "7e9828fc98aa1cf27b422fe478a84f5b0abb7358", "shasum": "", "mirrors": [ { @@ -4645,20 +4645,20 @@ ], "description": "Symfony ErrorHandler Component", "homepage": "https://symfony.com", - "time": "2020-02-26T11:45:31+00:00" + "time": "2020-03-30T14:07:33+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v4.4.5", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "4ad8e149799d3128621a3a1f70e92b9897a8930d" + "reference": "abc8e3618bfdb55e44c8c6a00abd333f831bbfed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/4ad8e149799d3128621a3a1f70e92b9897a8930d", - "reference": "4ad8e149799d3128621a3a1f70e92b9897a8930d", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/abc8e3618bfdb55e44c8c6a00abd333f831bbfed", + "reference": "abc8e3618bfdb55e44c8c6a00abd333f831bbfed", "shasum": "", "mirrors": [ { @@ -4721,7 +4721,7 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2020-02-04T09:32:40+00:00" + "time": "2020-03-27T16:54:36+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -4789,16 +4789,16 @@ }, { "name": "symfony/filesystem", - "version": "v4.4.5", + "version": "v5.0.7", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "266c9540b475f26122b61ef8b23dd9198f5d1cfd" + "reference": "ca3b87dd09fff9b771731637f5379965fbfab420" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/266c9540b475f26122b61ef8b23dd9198f5d1cfd", - "reference": "266c9540b475f26122b61ef8b23dd9198f5d1cfd", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/ca3b87dd09fff9b771731637f5379965fbfab420", + "reference": "ca3b87dd09fff9b771731637f5379965fbfab420", "shasum": "", "mirrors": [ { @@ -4808,13 +4808,13 @@ ] }, "require": { - "php": "^7.1.3", + "php": "^7.2.5", "symfony/polyfill-ctype": "~1.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.4-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -4841,20 +4841,20 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2020-01-21T08:20:44+00:00" + "time": "2020-03-27T16:56:45+00:00" }, { "name": "symfony/finder", - "version": "v4.4.5", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "ea69c129aed9fdeca781d4b77eb20b62cf5d5357" + "reference": "5729f943f9854c5781984ed4907bbb817735776b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/ea69c129aed9fdeca781d4b77eb20b62cf5d5357", - "reference": "ea69c129aed9fdeca781d4b77eb20b62cf5d5357", + "url": "https://api.github.com/repos/symfony/finder/zipball/5729f943f9854c5781984ed4907bbb817735776b", + "reference": "5729f943f9854c5781984ed4907bbb817735776b", "shasum": "", "mirrors": [ { @@ -4896,20 +4896,20 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2020-02-14T07:42:58+00:00" + "time": "2020-03-27T16:54:36+00:00" }, { "name": "symfony/http-foundation", - "version": "v4.4.5", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "7e41b4fcad4619535f45f8bfa7744c4f384e1648" + "reference": "62f92509c9abfd1f73e17b8cf1b72c0bdac6611b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/7e41b4fcad4619535f45f8bfa7744c4f384e1648", - "reference": "7e41b4fcad4619535f45f8bfa7744c4f384e1648", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/62f92509c9abfd1f73e17b8cf1b72c0bdac6611b", + "reference": "62f92509c9abfd1f73e17b8cf1b72c0bdac6611b", "shasum": "", "mirrors": [ { @@ -4957,20 +4957,20 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2020-02-13T19:40:01+00:00" + "time": "2020-03-30T14:07:33+00:00" }, { "name": "symfony/http-kernel", - "version": "v4.4.5", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "8c8734486dada83a6041ab744709bdc1651a8462" + "reference": "f356a489e51856b99908005eb7f2c51a1dfc95dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/8c8734486dada83a6041ab744709bdc1651a8462", - "reference": "8c8734486dada83a6041ab744709bdc1651a8462", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/f356a489e51856b99908005eb7f2c51a1dfc95dc", + "reference": "f356a489e51856b99908005eb7f2c51a1dfc95dc", "shasum": "", "mirrors": [ { @@ -5053,20 +5053,20 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2020-02-29T10:31:38+00:00" + "time": "2020-03-30T14:59:15+00:00" }, { "name": "symfony/mime", - "version": "v5.0.5", + "version": "v5.0.7", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "9b3e5b5e58c56bbd76628c952d2b78556d305f3c" + "reference": "481b7d6da88922fb1e0d86a943987722b08f3955" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/9b3e5b5e58c56bbd76628c952d2b78556d305f3c", - "reference": "9b3e5b5e58c56bbd76628c952d2b78556d305f3c", + "url": "https://api.github.com/repos/symfony/mime/zipball/481b7d6da88922fb1e0d86a943987722b08f3955", + "reference": "481b7d6da88922fb1e0d86a943987722b08f3955", "shasum": "", "mirrors": [ { @@ -5121,20 +5121,20 @@ "mime", "mime-type" ], - "time": "2020-02-04T09:41:09+00:00" + "time": "2020-03-27T16:56:45+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.14.0", + "version": "v1.15.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "fbdeaec0df06cf3d51c93de80c7eb76e271f5a38" + "reference": "4719fa9c18b0464d399f1a63bf624b42b6fa8d14" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/fbdeaec0df06cf3d51c93de80c7eb76e271f5a38", - "reference": "fbdeaec0df06cf3d51c93de80c7eb76e271f5a38", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/4719fa9c18b0464d399f1a63bf624b42b6fa8d14", + "reference": "4719fa9c18b0464d399f1a63bf624b42b6fa8d14", "shasum": "", "mirrors": [ { @@ -5152,7 +5152,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.14-dev" + "dev-master": "1.15-dev" } }, "autoload": { @@ -5185,20 +5185,20 @@ "polyfill", "portable" ], - "time": "2020-01-13T11:15:53+00:00" + "time": "2020-02-27T09:26:54+00:00" }, { "name": "symfony/polyfill-iconv", - "version": "v1.14.0", + "version": "v1.15.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "926832ce51059bb58211b7b2080a88e0c3b5328e" + "reference": "ad6d62792bfbcfc385dd34b424d4fcf9712a32c8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/926832ce51059bb58211b7b2080a88e0c3b5328e", - "reference": "926832ce51059bb58211b7b2080a88e0c3b5328e", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/ad6d62792bfbcfc385dd34b424d4fcf9712a32c8", + "reference": "ad6d62792bfbcfc385dd34b424d4fcf9712a32c8", "shasum": "", "mirrors": [ { @@ -5216,7 +5216,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.14-dev" + "dev-master": "1.15-dev" } }, "autoload": { @@ -5250,20 +5250,20 @@ "portable", "shim" ], - "time": "2020-01-13T11:15:53+00:00" + "time": "2020-03-09T19:04:49+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.14.0", + "version": "v1.15.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "6842f1a39cf7d580655688069a03dd7cd83d244a" + "reference": "47bd6aa45beb1cd7c6a16b7d1810133b728bdfcf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/6842f1a39cf7d580655688069a03dd7cd83d244a", - "reference": "6842f1a39cf7d580655688069a03dd7cd83d244a", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/47bd6aa45beb1cd7c6a16b7d1810133b728bdfcf", + "reference": "47bd6aa45beb1cd7c6a16b7d1810133b728bdfcf", "shasum": "", "mirrors": [ { @@ -5283,7 +5283,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.14-dev" + "dev-master": "1.15-dev" } }, "autoload": { @@ -5318,20 +5318,20 @@ "portable", "shim" ], - "time": "2020-01-17T12:01:36+00:00" + "time": "2020-03-09T19:04:49+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.14.0", + "version": "v1.15.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "34094cfa9abe1f0f14f48f490772db7a775559f2" + "reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/34094cfa9abe1f0f14f48f490772db7a775559f2", - "reference": "34094cfa9abe1f0f14f48f490772db7a775559f2", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/81ffd3a9c6d707be22e3012b827de1c9775fc5ac", + "reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac", "shasum": "", "mirrors": [ { @@ -5349,7 +5349,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.14-dev" + "dev-master": "1.15-dev" } }, "autoload": { @@ -5383,20 +5383,20 @@ "portable", "shim" ], - "time": "2020-01-13T11:15:53+00:00" + "time": "2020-03-09T19:04:49+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.14.0", + "version": "v1.15.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "46ecacf4751dd0dc81e4f6bf01dbf9da1dc1dadf" + "reference": "37b0976c78b94856543260ce09b460a7bc852747" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/46ecacf4751dd0dc81e4f6bf01dbf9da1dc1dadf", - "reference": "46ecacf4751dd0dc81e4f6bf01dbf9da1dc1dadf", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/37b0976c78b94856543260ce09b460a7bc852747", + "reference": "37b0976c78b94856543260ce09b460a7bc852747", "shasum": "", "mirrors": [ { @@ -5411,7 +5411,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.14-dev" + "dev-master": "1.15-dev" } }, "autoload": { @@ -5444,20 +5444,20 @@ "portable", "shim" ], - "time": "2020-01-13T11:15:53+00:00" + "time": "2020-02-27T09:26:54+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.14.0", + "version": "v1.15.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "5e66a0fa1070bf46bec4bea7962d285108edd675" + "reference": "0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/5e66a0fa1070bf46bec4bea7962d285108edd675", - "reference": "5e66a0fa1070bf46bec4bea7962d285108edd675", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7", + "reference": "0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7", "shasum": "", "mirrors": [ { @@ -5472,7 +5472,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.14-dev" + "dev-master": "1.15-dev" } }, "autoload": { @@ -5508,20 +5508,20 @@ "portable", "shim" ], - "time": "2020-01-13T11:15:53+00:00" + "time": "2020-02-27T09:26:54+00:00" }, { "name": "symfony/process", - "version": "v4.4.5", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "bf9166bac906c9e69fb7a11d94875e7ced97bcd7" + "reference": "3e40e87a20eaf83a1db825e1fa5097ae89042db3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/bf9166bac906c9e69fb7a11d94875e7ced97bcd7", - "reference": "bf9166bac906c9e69fb7a11d94875e7ced97bcd7", + "url": "https://api.github.com/repos/symfony/process/zipball/3e40e87a20eaf83a1db825e1fa5097ae89042db3", + "reference": "3e40e87a20eaf83a1db825e1fa5097ae89042db3", "shasum": "", "mirrors": [ { @@ -5563,20 +5563,20 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2020-02-07T20:06:44+00:00" + "time": "2020-03-27T16:54:36+00:00" }, { "name": "symfony/routing", - "version": "v4.4.5", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "4124d621d0e445732520037f888a0456951bde8c" + "reference": "0f562fa613e288d7dbae6c63abbc9b33ed75a8f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/4124d621d0e445732520037f888a0456951bde8c", - "reference": "4124d621d0e445732520037f888a0456951bde8c", + "url": "https://api.github.com/repos/symfony/routing/zipball/0f562fa613e288d7dbae6c63abbc9b33ed75a8f8", + "reference": "0f562fa613e288d7dbae6c63abbc9b33ed75a8f8", "shasum": "", "mirrors": [ { @@ -5645,7 +5645,7 @@ "uri", "url" ], - "time": "2020-02-25T12:41:09+00:00" + "time": "2020-03-30T11:41:10+00:00" }, { "name": "symfony/service-contracts", @@ -5713,16 +5713,16 @@ }, { "name": "symfony/translation", - "version": "v4.4.5", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "0a19a77fba20818a969ef03fdaf1602de0546353" + "reference": "4e54d336f2eca5facad449d0b0118bb449375b76" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/0a19a77fba20818a969ef03fdaf1602de0546353", - "reference": "0a19a77fba20818a969ef03fdaf1602de0546353", + "url": "https://api.github.com/repos/symfony/translation/zipball/4e54d336f2eca5facad449d0b0118bb449375b76", + "reference": "4e54d336f2eca5facad449d0b0118bb449375b76", "shasum": "", "mirrors": [ { @@ -5791,7 +5791,7 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2020-02-04T09:32:40+00:00" + "time": "2020-03-27T16:54:36+00:00" }, { "name": "symfony/translation-contracts", @@ -5858,16 +5858,16 @@ }, { "name": "symfony/var-dumper", - "version": "v4.4.5", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "2572839911702b0405479410ea7a1334bfab0b96" + "reference": "5a0c2d93006131a36cf6f767d10e2ca8333b0d4a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/2572839911702b0405479410ea7a1334bfab0b96", - "reference": "2572839911702b0405479410ea7a1334bfab0b96", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/5a0c2d93006131a36cf6f767d10e2ca8333b0d4a", + "reference": "5a0c2d93006131a36cf6f767d10e2ca8333b0d4a", "shasum": "", "mirrors": [ { @@ -5936,7 +5936,7 @@ "debug", "dump" ], - "time": "2020-02-24T13:10:00+00:00" + "time": "2020-03-27T16:54:36+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -5995,16 +5995,16 @@ }, { "name": "vlucas/phpdotenv", - "version": "v3.6.0", + "version": "v3.6.2", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "1bdf24f065975594f6a117f0f1f6cabf1333b156" + "reference": "786a947e57086cf236cefdee80784634224b99fa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/1bdf24f065975594f6a117f0f1f6cabf1333b156", - "reference": "1bdf24f065975594f6a117f0f1f6cabf1333b156", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/786a947e57086cf236cefdee80784634224b99fa", + "reference": "786a947e57086cf236cefdee80784634224b99fa", "shasum": "", "mirrors": [ { @@ -6019,8 +6019,14 @@ "symfony/polyfill-ctype": "^1.9" }, "require-dev": { + "ext-filter": "*", + "ext-pcre": "*", "phpunit/phpunit": "^4.8.35 || ^5.0 || ^6.0 || ^7.0" }, + "suggest": { + "ext-filter": "Required to use the boolean validator.", + "ext-pcre": "Required to use most of the library." + }, "type": "library", "extra": { "branch-alias": { @@ -6054,7 +6060,46 @@ "env", "environment" ], - "time": "2019-09-10T21:37:39+00:00" + "time": "2020-03-27T23:36:02+00:00" + }, + { + "name": "xhat/payjs", + "version": "1.4.3", + "source": { + "type": "git", + "url": "https://github.com/xhat/payjs.git", + "reference": "3d19cbd88abbd7081738b016ce9c04a1cb9edad5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/xhat/payjs/zipball/3d19cbd88abbd7081738b016ce9c04a1cb9edad5", + "reference": "3d19cbd88abbd7081738b016ce9c04a1cb9edad5", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "type": "library", + "autoload": { + "psr-4": { + "Xhat\\Payjs\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "andy", + "email": "andy@popfeng.com" + } + ], + "description": "本项目是基于 PAYJS 的 API 开发的 Composer Package,可直接用于生产环境 https://payjs.cn", + "time": "2019-08-13T04:58:08+00:00" } ], "packages-dev": [ @@ -7128,16 +7173,16 @@ }, { "name": "phpunit/phpunit", - "version": "8.5.2", + "version": "8.5.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "018b6ac3c8ab20916db85fa91bf6465acb64d1e0" + "reference": "67750516bc02f300e2742fed2f50177f8f37bedf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/018b6ac3c8ab20916db85fa91bf6465acb64d1e0", - "reference": "018b6ac3c8ab20916db85fa91bf6465acb64d1e0", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/67750516bc02f300e2742fed2f50177f8f37bedf", + "reference": "67750516bc02f300e2742fed2f50177f8f37bedf", "shasum": "", "mirrors": [ { @@ -7213,7 +7258,7 @@ "testing", "xunit" ], - "time": "2020-01-08T08:49:49+00:00" + "time": "2020-03-31T08:52:04+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", @@ -8011,9 +8056,9 @@ "platform": { "php": "^7.2", "ext-curl": "*", + "ext-dom": "*", "ext-json": "*", - "ext-openssl": "*", - "ext-dom": "*" + "ext-openssl": "*" }, "platform-dev": [] } diff --git a/resources/lang/en/auth.php b/resources/lang/en/auth.php index 925673ba..72defc16 100644 --- a/resources/lang/en/auth.php +++ b/resources/lang/en/auth.php @@ -1,6 +1,7 @@ 'Username', 'active' => 'Activate', 'active_account' => 'Activate account', 'active_tip' => 'Account is not active yet, Please ', @@ -10,7 +11,7 @@ return [ 'register' => 'Sign Up', 'send' => 'Send', 'tip' => 'Tip', - 'username' => 'Email', + 'email' => 'Email', 'password' => 'Password', 'confirm_password' => 'Please renter your password', 'back' => 'Back', @@ -45,6 +46,7 @@ return [ 'captcha_close' => 'Verification code registration is disable', 'captcha_send' => 'Verification code sent', 'code_error' => 'The invitation code is invalid! Please try again', + 'username_null' => 'Please enter your username', 'email_null' => 'Please enter your email address', 'email_normal' => 'Your account has been activated', 'email_legitimate' => 'Account must be a legitimate email', diff --git a/resources/lang/en/home.php b/resources/lang/en/home.php index ac9404fc..4c0b1c6c 100644 --- a/resources/lang/en/home.php +++ b/resources/lang/en/home.php @@ -8,7 +8,7 @@ return [ 'exchange_subscribe' => 'Exchange Address', 'subscribe_warning' => 'Warning: This subscription address is for personal use only. Do not propagate the address.', 'reset_password_title' => 'Reset Password', - 'username_placeholder' => 'Please Enter Email', + 'email_placeholder' => 'Please Enter Email', 'system_down' => 'The system is being maintained', 'subscribe_baned' => 'Your subscription function has been banned. Please contact the administrator.', 'download' => 'Download', @@ -199,6 +199,6 @@ return [ 'promote_link' => 'With your promotion link registration and activation, both of you will receive :traffic traffic awards; when they are consumed, you will receive :referral_percent% of their consumption amount as a reward.', 'promote_invite_code' => 'With your invite code registration and activation, both of you will receive :traffic traffic awards; when they are consumed, you will receive :referral_percent% of their consumption amount as a reward.', 'invite_user_title' => 'Invitation record', - 'invite_user_username' => 'Username', + 'invite_user_email' => 'email', 'invite_user_created_at' => 'Registration time', ]; diff --git a/resources/lang/ja/auth.php b/resources/lang/ja/auth.php index 1a573e92..6431bbf5 100644 --- a/resources/lang/ja/auth.php +++ b/resources/lang/ja/auth.php @@ -1,35 +1,35 @@  'アカウントを有効にする', - 'login_button' => 'ログイン', - 'username_placeholder' => 'アカウントを入力してください', - 'tips' => 'システムメンテナンス中に、アカウントを有効にする必要がある場合は、管理者に連絡してください', - 'back' => '戻る', - 'submit' => '有効化', - 'username' => 'アカウント', - 'password' => 'パスワード', - 'captcha' => '認証コード', - 'remember' => 'ログイン状態を保持', - 'forget_password' => 'パスワードを忘れた', - 'login' => 'ログイン', - 'register' => '登録する', - 'register_tip' => 'まだアカウントはありませんか?してください', - 'loading_captcha' => '確認コードを読み込んでいます...', - 'required_captcha' => '確認コードの操作を正しく完了してください', - 'fail_captcha' => 'サーバーの確認に失敗しました。もう一度お試しください', - 'confirm_password' => 'パスワードの確認', - 'code' => '招待コード', - 'send' => '送 信', - 'tnc_button' => '私はすでに読んで守ることに同意した', - 'tnc_link' => '私は利用規約を読み、同意した', - 'tos' => '利用規約', - 'aup' => '許容される使用ポリシー', - 'register_alter' => 'システムはメンテナンス中です', - 'get_free_code' => 'クリックすると無料の招待状コードが表示されます', - 'tnc_title' => '私は読んだことがあります', - 'tnc_content' => '現地法令を遵守してください。', - 'overtime' => 'リンクは有効期限切れです', + 'title' => 'アカウントを有効にする', + 'login_button' => 'ログイン', + 'email_placeholder' => 'アカウントを入力してください', + 'tips' => 'システムメンテナンス中に、アカウントを有効にする必要がある場合は、管理者に連絡してください', + 'back' => '戻る', + 'submit' => '有効化', + 'email' => 'アカウント', + 'password' => 'パスワード', + 'captcha' => '認証コード', + 'remember' => 'ログイン状態を保持', + 'forget_password' => 'パスワードを忘れた', + 'login' => 'ログイン', + 'register' => '登録する', + 'register_tip' => 'まだアカウントはありませんか?してください', + 'loading_captcha' => '確認コードを読み込んでいます...', + 'required_captcha' => '確認コードの操作を正しく完了してください', + 'fail_captcha' => 'サーバーの確認に失敗しました。もう一度お試しください', + 'confirm_password' => 'パスワードの確認', + 'code' => '招待コード', + 'send' => '送 信', + 'tnc_button' => '私はすでに読んで守ることに同意した', + 'tnc_link' => '私は利用規約を読み、同意した', + 'tos' => '利用規約', + 'aup' => '許容される使用ポリシー', + 'register_alter' => 'システムはメンテナンス中です', + 'get_free_code' => 'クリックすると無料の招待状コードが表示されます', + 'tnc_title' => '私は読んだことがあります', + 'tnc_content' => '現地法令を遵守してください。', + 'overtime' => 'リンクは有効期限切れです', 'active' => 'Activate', 'active_account' => 'Activate account', @@ -38,7 +38,7 @@ return [ 'code' => 'Invite Code', 'login' => 'Sign In', 'register' => 'ログイン', - 'username' => 'メール', + 'email' => 'メール', 'password' => 'パスワード', 'confirm_password' => 'パスワードの確認', 'back' => 'Back', diff --git a/resources/lang/ja/home.php b/resources/lang/ja/home.php index 7b11c769..fc4f8c22 100644 --- a/resources/lang/ja/home.php +++ b/resources/lang/ja/home.php @@ -7,7 +7,7 @@ return [ 'exchange_subscribe' => '変更', 'subscribe_warning' => '警告:この購読URLは個人用です。このURLは拡散しないでください。それ以外の場合は、アカウントのデータ通信量が異常である可能性があります。', 'reset_password_title' => 'パスワードを再設定する', - 'username_placeholder' => 'アカウントを入力してください', + 'email_placeholder' => 'アカウントを入力してください', 'system_down' => 'システムはメンテナンス中です', 'subscribe_baned' => '購読が無効になっています。管理者にお問い合わせください。', 'download' => 'ダウンロード', @@ -196,6 +196,6 @@ return [ 'promote_link' => 'あなたの普及のリンクを通じて登録してアクティブにして、あなたたちの双方はすべて :traffic の流量の奨励を獲得します;彼らが消費する時、あなたは彼らの消費金額の :referral_percent% を獲得することを奨励します。', 'promote_invite_code' => 'お客様の招待コードの登録をアクティブにして、あなた達の双方は獲得して :traffic 流量奨励;彼らが消费の時、あなたは獲得して彼らの消費金額の :referral_percent% ご褒美として。', 'invite_user_title' => '招待状', - 'invite_user_username' => 'ユーザー名', + 'invite_user_email' => 'ユーザー名', 'invite_user_created_at' => '登録時間', ]; diff --git a/resources/lang/ko/auth.php b/resources/lang/ko/auth.php index 7165dcb0..f322e0a7 100644 --- a/resources/lang/ko/auth.php +++ b/resources/lang/ko/auth.php @@ -1,33 +1,33 @@ '아이디 활성화', - 'login_button' => '로그인', - 'username_placeholder' => '아이디를 입력하세요', - 'tips' => '서버 점검중입니다,아이디 활성화 하실려면 관리자에게 문의하세요', - 'back' => '돌아가기', - 'submit' => '활성화 하기', - 'username' => '아이디', - 'password' => '비밀번호', - 'captcha' => '인증코드', - 'remember' => '로그인 상태 유지', - 'forget_password' => '비밀번호 찾기', - 'login' => '로그인', - 'register' => '회원가입', - 'register_tip' => '아직 계정이 없습니까? 제발 가라', - 'loading_captcha' => '인증 코드로드 중 ...', - 'required_captcha' => '인증 코드 작업을 올바르게 완료하십시오.', - 'fail_captcha' => '서버 확인에 실패했습니다. 다시 시도하십시오.', - 'confirm_password' => '비밀번호 재확인', - 'code' => '처청코드', - 'send' => '보내기', - 'tnc_button' => '이용약관에 됭의합니다', - 'tos' => '이용 약관', - 'aup' => '이용 목적 제한 방침', - 'register_alter' => '서버 점검중입니다', - 'get_free_code' => '무료 초대 코드를 받으려면 클릭하십시오.', - 'tnc_title' => '이용약관에 됭의합니다', - 'tnc_content' => '현지의 법률 법규를 준수하시오.', - 'overtime' => '링크가 만료되었습니다.', + 'title' => '아이디 활성화', + 'login_button' => '로그인', + 'email_placeholder' => '아이디를 입력하세요', + 'tips' => '서버 점검중입니다,아이디 활성화 하실려면 관리자에게 문의하세요', + 'back' => '돌아가기', + 'submit' => '활성화 하기', + 'email' => '아이디', + 'password' => '비밀번호', + 'captcha' => '인증코드', + 'remember' => '로그인 상태 유지', + 'forget_password' => '비밀번호 찾기', + 'login' => '로그인', + 'register' => '회원가입', + 'register_tip' => '아직 계정이 없습니까? 제발 가라', + 'loading_captcha' => '인증 코드로드 중 ...', + 'required_captcha' => '인증 코드 작업을 올바르게 완료하십시오.', + 'fail_captcha' => '서버 확인에 실패했습니다. 다시 시도하십시오.', + 'confirm_password' => '비밀번호 재확인', + 'code' => '처청코드', + 'send' => '보내기', + 'tnc_button' => '이용약관에 됭의합니다', + 'tos' => '이용 약관', + 'aup' => '이용 목적 제한 방침', + 'register_alter' => '서버 점검중입니다', + 'get_free_code' => '무료 초대 코드를 받으려면 클릭하십시오.', + 'tnc_title' => '이용약관에 됭의합니다', + 'tnc_content' => '현지의 법률 법규를 준수하시오.', + 'overtime' => '링크가 만료되었습니다.', ]; \ No newline at end of file diff --git a/resources/lang/ko/home.php b/resources/lang/ko/home.php index abc56b78..a504b86a 100644 --- a/resources/lang/ko/home.php +++ b/resources/lang/ko/home.php @@ -7,7 +7,7 @@ return [ 'exchange_subscribe' => '주소변경', 'subscribe_warning' => '경고: 구독 주소 는 개인적 으로 사용 되 지 말고 이 주소 를 전파 하지 마시오', 'reset_password_title' => '비번리셋', - 'username_placeholder' => '아이디를 입력하세요', + 'email_placeholder' => '아이디를 입력하세요', 'system_down' => '서비스 점금중', 'subscribe_baned' => '구독주소가 금지되였습니다,관리자에게 문의해주세요', 'download' => '다운로드', @@ -193,6 +193,6 @@ return [ 'promote_link' => '보급 링크 등록을 통해 활성화, 양측 모두 :traffic 유량에 장려합니다; 그들이 소비할 때, 그들의 소비 금액을 얻을 수 있는 :referral_percent% 를 장려합니다.', 'promote_invite_code' => '요청을 통해 등록 및 활성화, 양측 모두 :traffic 유량에 장려합니다, 그들이 소비할 때, 그들의 소비 금액을 얻을 수 있습니다 :referral_percent% 를 장려합니다', 'invite_user_title' => '초대장', - 'invite_user_username' => '사용자 이름', + 'invite_user_email' => '사용자 이름', 'invite_user_created_at' => '등록 시간', ]; diff --git a/resources/lang/zh-CN/auth.php b/resources/lang/zh-CN/auth.php index a6a6f919..fae4d984 100644 --- a/resources/lang/zh-CN/auth.php +++ b/resources/lang/zh-CN/auth.php @@ -10,7 +10,7 @@ return [ 'register' => '注 册', 'send' => '发送', 'tip' => '提示', - 'username' => '邮箱', + 'email' => '邮箱', 'password' => '密码', 'confirm_password' => '请再次输入密码', 'back' => '返 回', @@ -44,6 +44,7 @@ return [ 'captcha_close' => '本站关闭了通过验证码注册', 'captcha_send' => '验证码已发送至您的邮箱,请稍作等待或查看垃圾箱', 'code_error' => '邀请码不可用,请重试', + 'username_null' => '请输入昵称', 'email_null' => '请输入邮箱账号', 'email_normal' => '账号状态正常,无需激活', 'email_legitimate' => '邮箱地址不合规', @@ -69,5 +70,6 @@ return [ 'reset_password_fail' => '重设密码失败', 'reset_password_new' => '新密码设置成功,请自行登录', 'request_error' => '请求异常,请刷新页面后重试', + 'username' => '昵称', 'unaccepted' => '请阅读用户条款和可接受使用条款,并同意' ]; \ No newline at end of file diff --git a/resources/lang/zh-CN/home.php b/resources/lang/zh-CN/home.php index ab405240..4559c0a6 100644 --- a/resources/lang/zh-CN/home.php +++ b/resources/lang/zh-CN/home.php @@ -8,7 +8,7 @@ return [ 'exchange_subscribe' => '更换', 'subscribe_warning' => '警告:该订阅链接仅限个人使用,请勿传播该链接,否则会导致您的账号流量使用情况异常触发自动封号机制。', 'reset_password_title' => '重置密码', - 'username_placeholder' => '请输入用户名', + 'email_placeholder' => '请输入用户名', 'system_down' => '系统维护中', 'subscribe_baned' => '您的订阅功能被禁用,请联系管理员恢复', 'download' => '下载', @@ -204,6 +204,6 @@ return [ 'promote_link' => '通过您的推广链接注册并激活,你们双方都将获得:traffic流量奖励;当他们消费时,您将获得他们消费金额的:referral_percent%作为奖励。', 'promote_invite_code' => '通过您的邀请码注册并激活,你们双方都将获得:traffic流量奖励;当他们消费时,您将获得他们消费金额的:referral_percent%作为奖励。', 'invite_user_title' => '邀请记录', - 'invite_user_username' => '用户名', + 'invite_user_email' => '邮箱', 'invite_user_created_at' => '注册时间', ]; diff --git a/resources/lang/zh-tw/auth.php b/resources/lang/zh-tw/auth.php index bca41071..08d101a6 100644 --- a/resources/lang/zh-tw/auth.php +++ b/resources/lang/zh-tw/auth.php @@ -10,7 +10,7 @@ return [ 'register' => '注 冊', 'send' => '發送', 'tip' => '提示', - 'username' => '郵箱', + 'email' => '郵箱', 'password' => '密碼', 'confirm_password' => '請再次輸入密碼', 'back' => '返 回', @@ -68,5 +68,6 @@ return [ 'reset_password_same_fail' => '新舊密碼一樣,請重新輸入', 'reset_password_fail' => '重設密碼失敗', 'reset_password_new' => '新密碼設置成功,請自行登錄', - 'request_error' => '請求異常,請刷新頁面後重試' + 'request_error' => '請求異常,請刷新頁面後重試', + 'username' => '昵稱' ]; \ No newline at end of file diff --git a/resources/lang/zh-tw/home.php b/resources/lang/zh-tw/home.php index 73bba442..2503c790 100644 --- a/resources/lang/zh-tw/home.php +++ b/resources/lang/zh-tw/home.php @@ -3,12 +3,12 @@ return [ 'panel' => '用戶中心', 'subscribe_help' => '互動式教程', - 'subscribe_help' => '訂閱鏈接', + 'subscribe_link' => '訂閱鏈接', 'copy_subscribe_address' => '複製', 'exchange_subscribe' => '更換', 'subscribe_warning' => '注意:該訂閱鏈接僅限個人使用,請勿傳播該鏈接,這會導致您的帳號流量使用情况异常。', 'reset_password_title' => '重置密碼', - 'username_placeholder' => '請輸入用戶名', + 'email_placeholder' => '請輸入用戶名', 'system_down' => '系統維護中', 'subscribe_baned' => '您的訂閱功能被暫時禁用,請聯系管理員恢復', 'download' => '下載', @@ -197,6 +197,6 @@ return [ 'promote_link' => '通過您的推廣連結注册並啟動,您和新用戶都會獲得 :traffic 流量獎勵;當他們消費時,您將獲得他們消費金額的 :referral_percent% 作為獎勵。', 'promote_invite_code' => '通過您的邀請碼注册並啟動,您和新用戶都會獲得 :traffic 流量獎勵;當他們消費時,您將獲得他們消費金額的 :referral_percent% 作為獎勵。', 'invite_user_title' => '邀請記錄', - 'invite_user_username' => '用戶名', + 'invite_user_email' => '郵箱', 'invite_user_created_at' => '註冊時間', ]; diff --git a/resources/views/admin/addUser.blade.php b/resources/views/admin/addUser.blade.php index 758fd332..6e7e70a4 100644 --- a/resources/views/admin/addUser.blade.php +++ b/resources/views/admin/addUser.blade.php @@ -15,9 +15,9 @@

账号信息

- +
- +
@@ -351,7 +351,7 @@ async: false, data: { _token: '{{csrf_token()}}', - username: $('#username').val(), + email: $('#email').val(), password: $('#password').val(), usage: usage.substring(0, usage.length - 1), pay_way: $("input:radio[name='pay_way']:checked").val(), diff --git a/resources/views/admin/applyDetail.blade.php b/resources/views/admin/applyDetail.blade.php index 2757c548..2f23f9dd 100644 --- a/resources/views/admin/applyDetail.blade.php +++ b/resources/views/admin/applyDetail.blade.php @@ -21,7 +21,7 @@ - + @@ -41,7 +41,7 @@ @foreach($list as $vo) - + diff --git a/resources/views/admin/applyList.blade.php b/resources/views/admin/applyList.blade.php index 6a94d81e..362ab3ad 100644 --- a/resources/views/admin/applyList.blade.php +++ b/resources/views/admin/applyList.blade.php @@ -11,7 +11,7 @@
- +
@@ -116,7 +116,7 @@ // 搜索 function Search() { - window.location.href = '/admin/applyList?username=' + $("#username").val() + '&status=' + $("#status option:selected").val(); + window.location.href = '/admin/applyList?email=' + $("#email").val() + '&status=' + $("#status option:selected").val(); } // 更改状态 diff --git a/resources/views/admin/editUser.blade.php b/resources/views/admin/editUser.blade.php index e93e0515..d1b48339 100644 --- a/resources/views/admin/editUser.blade.php +++ b/resources/views/admin/editUser.blade.php @@ -18,9 +18,15 @@

账号信息

- +
- + +
+
+
+ +
+
@@ -224,7 +230,7 @@
-

{{empty($user->referral) ? '无邀请人' : $user->referral->username}}

+

{{empty($user->referral) ? '无邀请人' : $user->referral->email}}

@@ -435,6 +441,7 @@ data: { _token: '{{csrf_token()}}', username: $('#username').val(), + email: $('#email').val(), password: $('#password').val(), usage: usage.substring(0, usage.length - 1), pay_way: $("input:radio[name='pay_way']:checked").val(), diff --git a/resources/views/admin/emailLog.blade.php b/resources/views/admin/emailLog.blade.php index 0e95049c..475c480a 100644 --- a/resources/views/admin/emailLog.blade.php +++ b/resources/views/admin/emailLog.blade.php @@ -11,7 +11,7 @@
- +
申请单ID:{{$info->id}} | 申请人:{{$info->user->username}} | 申请提现金额:¥{{$info->amount}} | 申请时间:{{$info->created_at}}申请单ID:{{$info->id}} | 申请人:{{$info->user->email}} | 申请提现金额:¥{{$info->amount}} | 申请时间:{{$info->created_at}}
#
{{$vo->id}} {{empty($vo->user) ? '【账号已删除】' : $vo->user->username}} {{empty($vo->user) ? '【账号已删除】' : $vo->user->email}} {{$vo->order->goods->name}} ¥{{$apply->amount}}
diff --git a/resources/views/admin/inviteList.blade.php b/resources/views/admin/inviteList.blade.php index e16b70a0..1fbf41cb 100644 --- a/resources/views/admin/inviteList.blade.php +++ b/resources/views/admin/inviteList.blade.php @@ -54,13 +54,13 @@ @endforeach diff --git a/resources/views/admin/layouts.blade.php b/resources/views/admin/layouts.blade.php index 93e40825..2366d08d 100644 --- a/resources/views/admin/layouts.blade.php +++ b/resources/views/admin/layouts.blade.php @@ -145,11 +145,21 @@ 客服系统 + @if(\App\Http\Models\Ticket::query()->where('status','=','0')->count() > 0 ) + + @endif - + - @if($nodeList->isEmpty()) + @forelse($nodeList as $node) + + + + + + + + + + + + + + + @empty - @else - @foreach($nodeList as $node) - - - - - - - - - - - - - - - @endforeach - @endif + @endforelse
{{$invite->dateline}} - {{$invite->uid == 0 ? '系统生成' : (empty($invite->generator) ? '【账号已删除】' : $invite->generator->username)}} + {{$invite->uid == 0 ? '系统生成' : (empty($invite->generator) ? '【账号已删除】' : $invite->generator->email)}} {!!$invite->status_label!!} - {{$invite->status == 1 ? (empty($invite->user) ? '【账号已删除】' : $invite->user->username) : ''}} + {{$invite->status == 1 ? (empty($invite->user) ? '【账号已删除】' : $invite->user->email) : ''}}
+ {{$node->id}} + + @if($node->is_transit) + 中转 + @else + {{$node->type == 2 ? 'V2' : 'SSR'}} + @endif + {{$node->name}} {{$node->is_ddns ? 'DDNS' : $node->ip}} {{$node->server}} {{$node->uptime}} {{$node->status? $node->load : '维护'}} {{$node->online_users}} {{$node->transfer}} {{$node->traffic_rate}} + @if($node->compatible) @endif + @if($node->single) @endif + @if(!$node->is_subscribe) @endif + +
+ + + + + +
+
暂无数据
- {{$node->id}} - - @if($node->is_transit) - 中转 - @else - {{$node->type == 2 ? 'V2' : 'SSR'}} - @endif - {{$node->name}} {{$node->is_ddns ? 'DDNS' : $node->ip}} {{$node->server}} {{$node->uptime}} {{$node->status? $node->load : '维护'}} {{$node->online_users}} {{$node->transfer}} {{$node->traffic_rate}} - @if($node->compatible) @endif - @if($node->single) @endif - @if(!$node->is_subscribe) @endif - -
- - - - -
-
@@ -120,6 +119,28 @@ }); } + //Ping 节点获取延迟 + function pingNode(id) { + $.ajax({ + type: "POST", + url: '/admin/pingNode', + data: {_token: '{{csrf_token()}}', id: id}, + beforeSend: function () { + $("#ping" + id).removeClass("wb-order").addClass("wb-loop icon-spin"); + }, + success: function (ret) { + if (ret.status === 'success') { + swal.fire({type: 'info', html: '
电信 联通 移动 香港
' + ret.message[0] + '' + ret.message[1] + '' + ret.message[2] + '' + ret.message[3] + '
', showConfirmButton: false}) + } else { + swal.fire({title: ret.title, type: "error"}) + } + }, + complete: function () { + $("#ping" + id).removeClass("wb-loop icon-spin").addClass("wb-order"); + } + }); + } + // 删除节点 function delNode(id, name) { swal.fire({ diff --git a/resources/views/admin/nodePingLog.blade.php b/resources/views/admin/nodePingLog.blade.php new file mode 100644 index 00000000..fbe14858 --- /dev/null +++ b/resources/views/admin/nodePingLog.blade.php @@ -0,0 +1,84 @@ +@extends('admin.layouts') +@section('css') + +@endsection +@section('content') +
+
+
+

线路Ping测速日志

+
+
+
+
+ +
+
+ + 重 置 +
+
+ + + + + + + + + + + + + + + + @if($pingLogs->isEmpty()) + + + + @else + @foreach($pingLogs as $log) + + + + + + + + + @endforeach + @endif + +
# 节点 速度
电信联通移动香港
暂无数据
{{$log->id}} {{$log->node->name}} {{$log->ct? $log->ct.' ms': '无'}} {{$log->cu? $log->cu.' ms': '无'}} {{$log->cm? $log->cm.' ms': '无'}} {{$log->hk? $log->hk.' ms': '无'}}
+
+ +
+
+@endsection +@section('script') + + + +@endsection diff --git a/resources/views/admin/onlineIPMonitor.blade.php b/resources/views/admin/onlineIPMonitor.blade.php index 97bcf2d4..6ff256ca 100644 --- a/resources/views/admin/onlineIPMonitor.blade.php +++ b/resources/views/admin/onlineIPMonitor.blade.php @@ -16,7 +16,7 @@
- +
@@ -62,7 +62,7 @@ {{$vo->created_at}} {{$vo->type}} {{$vo->node ? $vo->node->name : '【节点已删除】'}} - {{$vo->user ? $vo->user->username : '【用户已删除】'}} + {{$vo->user ? $vo->user->email : '【用户已删除】'}} {{$vo->user ? $vo->user->address : '【用户已删除】'}} @if (strpos($vo->ip, ',') == TRUE) @@ -110,7 +110,7 @@ // 搜索 function Search() { - window.location.href = '/admin/onlineIPMonitor?id=' + $("#id").val() + '&ip=' + $("#ip").val() + '&username=' + $("#username").val() + '&port=' + $("#port").val() + '&nodeId=' + $("#nodeId option:selected").val(); + window.location.href = '/admin/onlineIPMonitor?id=' + $("#id").val() + '&ip=' + $("#ip").val() + '&email=' + $("#email").val() + '&port=' + $("#port").val() + '&nodeId=' + $("#nodeId option:selected").val(); } @endsection diff --git a/resources/views/admin/orderList.blade.php b/resources/views/admin/orderList.blade.php index 2838634b..354322a9 100644 --- a/resources/views/admin/orderList.blade.php +++ b/resources/views/admin/orderList.blade.php @@ -12,7 +12,7 @@
- +
@@ -107,7 +107,7 @@ @if(empty($order->user) ) 【账号不存在】 @else - {{$order->user->username}} + {{$order->user->email}} @endif {{$order->order_sn}} @@ -183,7 +183,7 @@ // 搜索 function Search() { - window.location.href = '/admin/orderList?username=' + $("#username").val() + '&order_sn=' + $("#order_sn").val() + '&is_expire=' + $("#is_expire").val() + '&is_coupon=' + $("#is_coupon").val() + '&pay_way=' + $("#pay_way").val() + '&status=' + $("#status").val() + '&sort=' + $("input:radio[name='sort']:checked").val() + '&range_time=' + [$("#start").val(), $("#end").val()]; + window.location.href = '/admin/orderList?email=' + $("#email").val() + '&order_sn=' + $("#order_sn").val() + '&is_expire=' + $("#is_expire").val() + '&is_coupon=' + $("#is_coupon").val() + '&pay_way=' + $("#pay_way").val() + '&status=' + $("#status").val() + '&sort=' + $("input:radio[name='sort']:checked").val() + '&range_time=' + [$("#start").val(), $("#end").val()]; } @endsection diff --git a/resources/views/admin/system.blade.php b/resources/views/admin/system.blade.php index 6d8f205b..b7666fa4 100644 --- a/resources/views/admin/system.blade.php +++ b/resources/views/admin/system.blade.php @@ -164,6 +164,37 @@ 如果是机器人、爬虫、代理访问网站则会抛出404错误
+
+
+ + + 启用后,用户访问将转移至维护界面 +
+
+
+
+ +
+
+ + +
+
+ 用于维护界面倒计时 +
+
+
+
+ +
+
+ + +
+
+ 自定义维护内容信息 +
+
diff --git a/resources/views/admin/trafficLog.blade.php b/resources/views/admin/trafficLog.blade.php index 62c92c65..d93ff36d 100644 --- a/resources/views/admin/trafficLog.blade.php +++ b/resources/views/admin/trafficLog.blade.php @@ -15,7 +15,7 @@
- +
@@ -71,7 +71,7 @@ @if(empty($vo->user)) 【账号已删除】 @else - {{$vo->user->username}} + {{$vo->user->email}} @endif {{$vo->node ? $vo->node->name : '【节点已删除】'}} @@ -121,7 +121,7 @@ // 搜索 function Search() { - window.location.href = '/admin/trafficLog' + '?port=' + $("#port").val() + '&user_id=' + $("#user_id").val() + '&username=' + $("#username").val() + '&nodeId=' + $("#nodeId option:selected").val() + '&startTime=' +$("#start").val() + '&endTime=' + $("#end").val(); + window.location.href = '/admin/trafficLog' + '?port=' + $("#port").val() + '&user_id=' + $("#user_id").val() + '&email=' + $("#email").val() + '&nodeId=' + $("#nodeId option:selected").val() + '&startTime=' + $("#start").val() + '&endTime=' + $("#end").val(); } @endsection diff --git a/resources/views/admin/userBalanceLogList.blade.php b/resources/views/admin/userBalanceLogList.blade.php index ec7bc0c3..6f3f86ed 100644 --- a/resources/views/admin/userBalanceLogList.blade.php +++ b/resources/views/admin/userBalanceLogList.blade.php @@ -11,7 +11,7 @@
- +
@@ -44,7 +44,7 @@ @if(empty($vo->user)) 【账号已删除】 @else - {{$vo->user->username}} + {{$vo->user->email}} @endif {{$vo->order_id}} @@ -88,7 +88,7 @@ // 搜索 function Search() { - window.location.href = '/admin/userBalanceLogList?username=' + $("#username").val(); + window.location.href = '/admin/userBalanceLogList?email=' + $("#email").val(); } @endsection diff --git a/resources/views/admin/userBanLogList.blade.php b/resources/views/admin/userBanLogList.blade.php index bb877598..a450fd48 100644 --- a/resources/views/admin/userBanLogList.blade.php +++ b/resources/views/admin/userBanLogList.blade.php @@ -11,7 +11,7 @@
- +
@@ -38,9 +38,9 @@ @foreach($list as $vo) - {{$vo->id}} + {{$vo->id}} - {{empty($vo->user) ? '【账号已删除】' : $vo->user->username}} + {{empty($vo->user) ? '【账号已删除】' : $vo->user->email}} {{$vo->minutes}}分钟 {{$vo->desc}} {{$vo->created_at}} @@ -80,7 +80,7 @@ // 搜索 function Search() { - window.location.href = '/admin/userBanLogList?username=' + $("#username").val(); + window.location.href = '/admin/userBanLogList?email=' + $("#email").val(); } @endsection diff --git a/resources/views/admin/userList.blade.php b/resources/views/admin/userList.blade.php index 370471f8..197de00f 100644 --- a/resources/views/admin/userList.blade.php +++ b/resources/views/admin/userList.blade.php @@ -26,7 +26,7 @@
- +
@@ -92,7 +92,7 @@ @foreach ($userList as $user) {{$user->id}} - {{$user->username}} + {{$user->email}} {{$user->balance}} {!!$user->port? : ' 未分配 '!!} @@ -129,11 +129,11 @@
- + - +
@@ -212,14 +212,14 @@ // 搜索 function Search() { - window.location.href = '/admin/userList' + '?id=' + $("#id").val() + '&username=' + $("#username").val() + '&wechat=' + $("#wechat").val() + '&qq=' + $("#qq").val() + '&port=' + $("#port").val() + '&pay_way=' + $("#pay_way option:selected").val() + '&status=' + $("#status option:selected").val() + '&enable=' + $("#enable option:selected").val(); + window.location.href = '/admin/userList' + '?id=' + $("#id").val() + '&email=' + $("#email").val() + '&wechat=' + $("#wechat").val() + '&qq=' + $("#qq").val() + '&port=' + $("#port").val() + '&pay_way=' + $("#pay_way option:selected").val() + '&status=' + $("#status option:selected").val() + '&enable=' + $("#enable option:selected").val(); } // 删除账号 - function delUser(id, username) { + function delUser(id, email) { swal.fire({ title: '警告', - text: '确定删除用户 【' + username + '】 ?', + text: '确定删除用户 【' + email + '】 ?', type: 'warning', showCancelButton: true, cancelButtonText: '{{trans('home.ticket_close')}}', @@ -239,10 +239,10 @@ } // 重置流量 - function resetTraffic(id, username) { + function resetTraffic(id, email) { swal.fire({ title: '警告', - text: '确定重置 【' + username + '】 流量吗?', + text: '确定重置 【' + email + '】 流量吗?', type: 'warning', showCancelButton: true, cancelButtonText: '{{trans('home.ticket_close')}}', diff --git a/resources/views/admin/userMonitor.blade.php b/resources/views/admin/userMonitor.blade.php index d8e67be6..af12b65b 100644 --- a/resources/views/admin/userMonitor.blade.php +++ b/resources/views/admin/userMonitor.blade.php @@ -7,7 +7,7 @@
-

{{$username}}

+

{{$email}}

提示: 月流量统计不会统计当天,日流量统计不会统计当前小时;如果无统计数据,请检查定时任务是否正常。(每月1日和每日0时因为没有统计流量,不显示流量)
diff --git a/resources/views/admin/userOnlineIPList.blade.php b/resources/views/admin/userOnlineIPList.blade.php index bdf62aac..ece03ce4 100644 --- a/resources/views/admin/userOnlineIPList.blade.php +++ b/resources/views/admin/userOnlineIPList.blade.php @@ -16,7 +16,7 @@
- +
@@ -52,7 +52,7 @@ @foreach ($userList as $user) {{$user->id}} - {{$user->username}} + {{$user->email}} {{$user->port}} @if ($user->status > 0) @@ -131,7 +131,7 @@ // 搜索 function Search() { - window.location.href = '/admin/userOnlineIPList' + '?id' + $("#id").val() + '&username=' + $("#username").val() + '&wechat=' + $("#wechat").val() + '&qq=' + $("#qq").val() + '&port=' + $("#port").val(); + window.location.href = '/admin/userOnlineIPList' + '?id' + $("#id").val() + '&email=' + $("#email").val() + '&wechat=' + $("#wechat").val() + '&qq=' + $("#qq").val() + '&port=' + $("#port").val(); } @endsection diff --git a/resources/views/admin/userRebateList.blade.php b/resources/views/admin/userRebateList.blade.php index b9eb4505..5163a96b 100644 --- a/resources/views/admin/userRebateList.blade.php +++ b/resources/views/admin/userRebateList.blade.php @@ -11,10 +11,10 @@
- +
- +
+
@@ -43,7 +43,7 @@ @if(empty($vo->user)) 【账号已删除】 @else - {{$vo->user->username}} + {{$vo->user->email}} @endif @@ -94,7 +94,7 @@ // 搜索 function Search() { - window.location.href = '/admin/userTrafficLogList' + '?username=' + $("#username").val(); + window.location.href = '/admin/userTrafficLogList' + '?email=' + $("#email").val(); } @endsection diff --git a/resources/views/auth/activeUser.blade.php b/resources/views/auth/activeUser.blade.php index 44b42deb..6f353d0f 100644 --- a/resources/views/auth/activeUser.blade.php +++ b/resources/views/auth/activeUser.blade.php @@ -19,8 +19,8 @@ {{trans('auth.active_account')}}
- - + + {{csrf_field()}}
@else diff --git a/resources/views/auth/layouts.blade.php b/resources/views/auth/layouts.blade.php index b2becc3d..7877a6bd 100644 --- a/resources/views/auth/layouts.blade.php +++ b/resources/views/auth/layouts.blade.php @@ -7,7 +7,7 @@ - + @@ -136,7 +136,6 @@ - diff --git a/resources/views/auth/login.blade.php b/resources/views/auth/login.blade.php index d2d217d3..f59e7eea 100644 --- a/resources/views/auth/login.blade.php +++ b/resources/views/auth/login.blade.php @@ -16,8 +16,8 @@
@endif
- - + +
diff --git a/resources/views/auth/maintenance.blade.php b/resources/views/auth/maintenance.blade.php new file mode 100644 index 00000000..2e47aca3 --- /dev/null +++ b/resources/views/auth/maintenance.blade.php @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + 维护 | Maintenance + + + + + + + + + + + + + + + + + + + + + + + + + + +
> +
+ +

维护建设中

+ {!! $message !!} +
+

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/views/auth/register.blade.php b/resources/views/auth/register.blade.php index bb830d14..775a5bab 100644 --- a/resources/views/auth/register.blade.php +++ b/resources/views/auth/register.blade.php @@ -6,23 +6,27 @@ @endsection @section('content')
- {{csrf_field()}} - - @if(\App\Components\Helpers::systemConfig()['is_register']) @if($errors->any())
{{$errors->first()}}
@endif + @csrf + + +
+ + +
@if(\App\Components\Helpers::systemConfig()['sensitiveType']) - - + + @else
- +
@
@@ -33,7 +37,7 @@ @endforeach @endif - +
@endif
@@ -43,9 +47,9 @@ - +
@@ -124,145 +128,7 @@
- - + + {{csrf_field()}}
@else diff --git a/resources/views/docs/aup.blade.php b/resources/views/docs/aup.blade.php new file mode 100644 index 00000000..22b9d77f --- /dev/null +++ b/resources/views/docs/aup.blade.php @@ -0,0 +1 @@ +
不得通过本站提供的服务发布、转载、传送含有下列内容之一的信息:
1.违反宪法确定的基本原则的;
2.危害国家安全,泄漏国家机密,颠覆国家政权,破坏国家统一的;
3.损害国家荣誉和利益的;
4.煽动民族仇恨、民族歧视,破坏民族团结的;
5.破坏国家宗教政策,宣扬邪教和封建迷信的;
6.散布谣言,扰乱社会秩序,破坏社会稳定的;
7.散布淫秽、色情、赌博、暴力、恐怖或者教唆犯罪的;
8.侮辱或者诽谤他人,侵害他人合法权益的;
9.煽动非法集会、结社、游行、示威、聚众扰乱社会秩序的;
10.以非法民间组织名义活动的;
11.含有法律、行政法规禁止的其他内容的。
\ No newline at end of file diff --git a/resources/views/docs/tos.blade.php b/resources/views/docs/tos.blade.php new file mode 100644 index 00000000..22b9d77f --- /dev/null +++ b/resources/views/docs/tos.blade.php @@ -0,0 +1 @@ +
不得通过本站提供的服务发布、转载、传送含有下列内容之一的信息:
1.违反宪法确定的基本原则的;
2.危害国家安全,泄漏国家机密,颠覆国家政权,破坏国家统一的;
3.损害国家荣誉和利益的;
4.煽动民族仇恨、民族歧视,破坏民族团结的;
5.破坏国家宗教政策,宣扬邪教和封建迷信的;
6.散布谣言,扰乱社会秩序,破坏社会稳定的;
7.散布淫秽、色情、赌博、暴力、恐怖或者教唆犯罪的;
8.侮辱或者诽谤他人,侵害他人合法权益的;
9.煽动非法集会、结社、游行、示威、聚众扰乱社会秩序的;
10.以非法民间组织名义活动的;
11.含有法律、行政法规禁止的其他内容的。
\ No newline at end of file diff --git a/resources/views/payment/detail.blade.php b/resources/views/payment/detail.blade.php index fc2d0f14..d175555b 100644 --- a/resources/views/payment/detail.blade.php +++ b/resources/views/payment/detail.blade.php @@ -17,9 +17,11 @@
    -
  • 服务名称:{{$payment->order->goods->name}}
  • +
  • 服务名称:{{$name}}
  • 支付金额:{{$payment->amount}}元
  • -
  • 有效期:{{$payment->order->goods->days}} 天
  • + @if($days != 0) +
  • 有效期:{{$days}} 天
  • + @endif
  • 请在15分钟内完成支付,否者订单将会自动关闭
@@ -46,24 +48,31 @@ document.body.innerHTML += unescapeHTML("{{$payment->qr_code}}"); document.forms['alipaySubmit'].submit(); @endif - getStatus(); }); // 检查支付单状态 - function getStatus() { - $.get("/payment/getStatus", {sn: '{{$payment->sn}}'}, function (ret) { - if (ret.status === 'success') { - swal.fire({title: ret.message, type: 'success', timer: 1000, showConfirmButton: false}) - .then(() => window.location.href = '/invoices') - } else if (ret.status === 'error') { - swal.fire({title: ret.message, type: "error", timer: 1000, showConfirmButton: false}) - .then(() => window.location.href = '/invoices') - } else { - // 无结果时,每2秒查询一次订单状态 - setInterval("getStatus()", 2000); + const r = window.setInterval(function () { + $.ajax({ + type: 'GET', + url: '/payment/getStatus', + data: {sn: '{{$payment->sn}}'}, + dataType: 'json', + success: function (ret) { + window.clearInterval(); + if (ret.status === 'success') { + swal.fire({title: ret.message, type: 'success', timer: 1500, showConfirmButton: false}) + .then(() => { + window.location.href = '/invoices' + }); + } else if (ret.status === 'error') { + swal.fire({title: ret.message, type: "error", timer: 1500, showConfirmButton: false}) + .then(() => { + window.location.href = '/invoices' + }) + } } }); - } + }, 3000); // 还原html脚本 < > & " ' function unescapeHTML(str) { diff --git a/resources/views/shop/addGoods.blade.php b/resources/views/shop/addGoods.blade.php index 08e4ab64..c8b3152a 100644 --- a/resources/views/shop/addGoods.blade.php +++ b/resources/views/shop/addGoods.blade.php @@ -27,15 +27,6 @@ {{$errors->first()}}
@endif -
{{csrf_field()}} @@ -52,10 +43,6 @@
-
- - -
套餐与账号有效期有关,流量包只扣可用流量,不影响有效期
@@ -65,7 +52,7 @@
-
+
@@ -80,7 +67,7 @@
-