user = Auth::getUser();
}
public function index($request, $response, $args)
{
$user = $this->user;
$ios_token = LinkController::GenerateIosCode("smart", 0, $this->user->id, 0, "smart");
$acl_token = LinkController::GenerateAclCode("smart", 0, $this->user->id, 0, "smart");
$router_token = LinkController::GenerateRouterCode($this->user->id, 0);
$router_token_without_mu = LinkController::GenerateRouterCode($this->user->id, 1);
$ssr_sub_token = LinkController::GenerateSSRSubCode($this->user->id, 0);
$uid = time().rand(1, 10000) ;
if (Config::get('enable_geetest_checkin') == 'true') {
$GtSdk = Geetest::get($uid);
} else {
$GtSdk = null;
}
$Ann = Ann::orderBy('date', 'desc')->first();
return $this->view()->assign("ssr_sub_token", $ssr_sub_token)->assign("router_token", $router_token)
->assign("router_token_without_mu", $router_token_without_mu)->assign("acl_token", $acl_token)
->assign('ann', $Ann)->assign('geetest_html', $GtSdk)->assign("ios_token", $ios_token)
->assign('enable_duoshuo', Config::get('enable_duoshuo'))->assign('duoshuo_shortname', Config::get('duoshuo_shortname'))
->assign("user", $this->user)->registerClass("URL", "App\Utils\URL")->assign('baseUrl', Config::get('baseUrl'))->display('user/index.tpl');
}
public function panel($request, $response, $args)
{
$user = $this->user;
$ios_token = LinkController::GenerateIosCode("smart", 0, $this->user->id, 0, "smart");
$acl_token = LinkController::GenerateAclCode("smart", 0, $this->user->id, 0, "smart");
$router_token = LinkController::GenerateRouterCode($this->user->id, 0);
$router_token_without_mu = LinkController::GenerateRouterCode($this->user->id, 1);
$ssr_sub_token = LinkController::GenerateSSRSubCode($this->user->id, 0);
$uid = time().rand(1, 10000) ;
if (Config::get('enable_geetest_checkin') == 'true') {
$GtSdk = Geetest::get($uid);
} else {
$GtSdk = null;
}
$Ann = Ann::orderBy('date', 'desc')->first();
return $this->view()->assign("ssr_sub_token", $ssr_sub_token)->assign("router_token", $router_token)
->assign("router_token_without_mu", $router_token_without_mu)->assign("acl_token", $acl_token)
->assign('ann', $Ann)->assign('geetest_html', $GtSdk)->assign("ios_token", $ios_token)
->assign('enable_duoshuo', Config::get('enable_duoshuo'))->assign('duoshuo_shortname', Config::get('duoshuo_shortname'))
->assign("user", $this->user)->registerClass("URL", "App\Utils\URL")->assign('baseUrl', Config::get('baseUrl'))->display('user/panel.tpl');
}
public function lookingglass($request, $response, $args)
{
$Speedtest=Speedtest::where("datetime", ">", time()-Config::get('Speedtest_duration')*3600)->orderBy('datetime', 'desc')->get();
return $this->view()->assign('speedtest', $Speedtest)->assign('hour', Config::get('Speedtest_duration'))->display('user/lookingglass.tpl');
}
public function node_admin($request, $response, $args)
{
$user = Auth::getUser();
if ($user->is_admin) {
$nodes = Node::where('type', 1)->orderBy('name')->get();
} else {
$nodes = Node::where(
function ($query) {
$query->Where("node_group", "=", $this->user->node_group)
->orWhere("node_group", "=", 0);
}
)->where('type', 1)->where("node_class", "<=", $this->user->class)->orderBy('name')->get();
}
$relay_rules = Relay::where('user_id', $this->user->id)->orwhere('user_id', 0)->orderBy('id', 'asc')->get();
if (!Tools::is_protocol_relay($user)) {
$relay_rules = array();
}
$node_prefix=array();
$node_method=array();
$a=0;
$node_order=array();
$node_alive=array();
$node_prealive=array();
$node_heartbeat=array();
$node_bandwidth=array();
$node_muport=array();
$node_isv6=array();
if ($user->is_admin) {
$ports_count = Node::where('type', 1)->where('sort', 9)->orderBy('name')->count();
} else {
$ports_count = Node::where(
function ($query) use ($user) {
$query->Where("node_group", "=", $user->node_group)
->orWhere("node_group", "=", 0);
}
)->where('type', 1)->where('sort', 9)->where("node_class", "<=", $user->class)->orderBy('name')->count();
}
$ports_count += 1;
foreach ($nodes as $node) {
if ((($user->class>=$node->node_class&&($user->node_group==$node->node_group||$node->node_group==0))||$user->is_admin)&&(!$node->isNodeTrafficOut())) {
if ($node->sort==9) {
$mu_user=User::where('port', '=', $node->server)->first();
$mu_user->obfs_param=$this->user->getMuMd5();
array_push($node_muport, array('server'=>$node,'user'=>$mu_user));
continue;
}
$temp=explode(" - ", $node->name);
$node_isv6[$temp[0]]=$node->isv6;
if (!isset($node_prefix[$temp[0]])) {
$node_prefix[$temp[0]]=array();
$node_order[$temp[0]]=$a;
$node_alive[$temp[0]]=0;
if (isset($temp[1])) {
$node_method[$temp[0]]=$temp[1];
} else {
$node_method[$temp[0]]="";
}
$a++;
}
if ($node->sort==0||$node->sort==7||$node->sort==8||$node->sort==10) {
$node_tempalive=$node->getOnlineUserCount();
$node_prealive[$node->id]=$node_tempalive;
if ($node->isNodeOnline() !== null) {
if ($node->isNodeOnline() === false) {
$node_heartbeat[$temp[0]]="离线";
} else {
$node_heartbeat[$temp[0]]="在线";
}
} else {
if (!isset($node_heartbeat[$temp[0]])) {
$node_heartbeat[$temp[0]]="暂无数据";
}
}
if ($node->node_bandwidth_limit==0) {
$node_bandwidth[$temp[0]]=(int)($node->node_bandwidth/1024/1024/1024)." GB / 不限";
} else {
$node_bandwidth[$temp[0]]=(int)($node->node_bandwidth/1024/1024/1024)." GB / ".(int)($node->node_bandwidth_limit/1024/1024/1024)." GB - ".$node->bandwidthlimit_resetday." 日重置";
}
if ($node_tempalive!="暂无数据") {
$node_alive[$temp[0]]=$node_alive[$temp[0]]+$node_tempalive;
}
} else {
$node_prealive[$node->id]="暂无数据";
if (!isset($node_heartbeat[$temp[0]])) {
$node_heartbeat[$temp[0]]="暂无数据";
}
}
if (isset($temp[1])) {
if (strpos($node_method[$temp[0]], $temp[1])===false) {
$node_method[$temp[0]]=$node_method[$temp[0]]." ".$temp[1];
}
}
array_push($node_prefix[$temp[0]], $node);
}
}
$node_prefix=(object)$node_prefix;
$node_order=(object)$node_order;
$tools = new Tools();
return $this->view()->assign('relay_rules', $relay_rules)->assign('node_isv6', $node_isv6)->assign('tools', $tools)->assign('node_method', $node_method)->assign('node_muport', $node_muport)->assign('node_bandwidth', $node_bandwidth)->assign('node_heartbeat', $node_heartbeat)->assign('node_prefix', $node_prefix)->assign('node_prealive', $node_prealive)->assign('node_order', $node_order)->assign('user', $user)->assign('node_alive', $node_alive)->display('user/node_admin.tpl');
}
public function code($request, $response, $args)
{
$pageNum = 1;
if (isset($request->getQueryParams()["page"])) {
$pageNum = $request->getQueryParams()["page"];
}
$codes = Code::where('type', '<>', '-2')->where('userid', '=', $this->user->id)->orderBy('id', 'desc')->paginate(15, ['*'], 'page', $pageNum);
$codes->setPath('/user/code');
return $this->view()->assign('codes', $codes)->assign('pmw', Pay::getHTML($this->user))->display('user/code.tpl');
}
public function donate($request, $response, $args)
{
if (Config::get('enable_donate') != 'true') {
exit(0);
}
$pageNum = 1;
if (isset($request->getQueryParams()["page"])) {
$pageNum = $request->getQueryParams()["page"];
}
$codes = Code::where(
function ($query) {
$query->where("type", "=", -1)
->orWhere("type", "=", -2);
}
)->where("isused", 1)->orderBy('id', 'desc')->paginate(15, ['*'], 'page', $pageNum);
$codes->setPath('/user/donate');
return $this->view()->assign('codes', $codes)->assign('total_in', Code::where('isused', 1)->where('type', -1)->sum('number'))->assign('total_out', Code::where('isused', 1)->where('type', -2)->sum('number'))->display('user/donate.tpl');
}
public function code_check($request, $response, $args)
{
$time = $request->getQueryParams()["time"];
$codes = Code::where('userid', '=', $this->user->id)->where('usedatetime', '>', date('Y-m-d H:i:s', $time))->first();
if ($codes!=null && strpos($codes->code, "充值") !== false) {
$res['ret'] = 1;
return $response->getBody()->write(json_encode($res));
} else {
$res['ret'] = 0;
return $response->getBody()->write(json_encode($res));
}
}
public function f2fpayget($request, $response, $args)
{
$time = $request->getQueryParams()["time"];
$res['ret'] = 1;
return $response->getBody()->write(json_encode($res));
}
public function f2fpay($request, $response, $args)
{
$amount = $request->getParam('amount');
if ($amount == "") {
$res['ret'] = 0;
$res['msg'] = "订单金额错误:".$amount;
return $response->getBody()->write(json_encode($res));
}
$user = $this->user;
//生成二维码
$qrPayResult = Pay::alipay_get_qrcode($user, $amount, $qrPay);
// 根据状态值进行业务处理
switch ($qrPayResult->getTradeStatus()){
case "SUCCESS":
$aliresponse = $qrPayResult->getResponse();
$res['ret'] = 1;
$res['msg'] = "二维码生成成功";
$res['amount'] = $amount;
$res['qrcode'] = $qrPay->create_erweima($aliresponse->qr_code);
break;
case "FAILED":
$res['ret'] = 0;
$res['msg'] = "支付宝创建订单二维码失败!!! 请使用其他方式付款。";
break;
case "UNKNOWN":
$res['ret'] = 0;
$res['msg'] = "系统异常,状态未知!!!!!! 请使用其他方式付款。";
break;
default:
$res['ret'] = 0;
$res['msg'] = "创建订单二维码返回异常!!!!!! 请使用其他方式付款。";
break;
}
return $response->getBody()->write(json_encode($res));
}
public function alipay($request, $response, $args)
{
$amount = $request->getQueryParams()["amount"];
Pay::getGen($this->user, $amount);
}
public function codepost($request, $response, $args)
{
$code = $request->getParam('code');
$user = $this->user;
if ($code == "") {
$res['ret'] = 0;
$res['msg'] = "请填好充值码";
return $response->getBody()->write(json_encode($res));
}
$codeq=Code::where("code", "=", $code)->where("isused", "=", 0)->first();
if ($codeq == null) {
$res['ret'] = 0;
$res['msg'] = "此充值码错误";
return $response->getBody()->write(json_encode($res));
}
$codeq->isused=1;
$codeq->usedatetime=date("Y-m-d H:i:s");
$codeq->userid=$user->id;
$codeq->save();
if ($codeq->type==-1) {
$user->money=($user->money+$codeq->number);
$user->save();
if ($user->ref_by!=""&&$user->ref_by!=0&&$user->ref_by!=null) {
$gift_user=User::where("id", "=", $user->ref_by)->first();
$gift_user->money=($gift_user->money+($codeq->number*(Config::get('code_payback')/100)));
$gift_user->save();
$Payback=new Payback();
$Payback->total=$codeq->number;
$Payback->userid=$this->user->id;
$Payback->ref_by=$this->user->ref_by;
$Payback->ref_get=$codeq->number*(Config::get('code_payback')/100);
$Payback->datetime=time();
$Payback->save();
}
$res['ret'] = 1;
$res['msg'] = "充值成功,充值的金额为".$codeq->number."元。";
if (Config::get('enable_donate') == 'true') {
if ($this->user->is_hide == 1) {
Telegram::Send("姐姐姐姐,一位不愿透露姓名的大老爷给我们捐了 ".$codeq->number." 元呢~");
} else {
Telegram::Send("姐姐姐姐,".$this->user->user_name." 大老爷给我们捐了 ".$codeq->number." 元呢~");
}
}
return $response->getBody()->write(json_encode($res));
}
if ($codeq->type==10001) {
$user->transfer_enable=$user->transfer_enable+$codeq->number*1024*1024*1024;
$user->save();
}
if ($codeq->type==10002) {
if (time()>strtotime($user->expire_in)) {
$user->expire_in=date("Y-m-d H:i:s", time()+$codeq->number*86400);
} else {
$user->expire_in=date("Y-m-d H:i:s", strtotime($user->expire_in)+$codeq->number*86400);
}
$user->save();
}
if ($codeq->type>=1&&$codeq->type<=10000) {
if ($user->class==0||$user->class!=$codeq->type) {
$user->class_expire=date("Y-m-d H:i:s", time());
$user->save();
}
$user->class_expire=date("Y-m-d H:i:s", strtotime($user->class_expire)+$codeq->number*86400);
$user->class=$codeq->type;
$user->save();
}
}
public function GaCheck($request, $response, $args)
{
$code = $request->getParam('code');
$user = $this->user;
if ($code == "") {
$res['ret'] = 0;
$res['msg'] = "悟空别闹";
return $response->getBody()->write(json_encode($res));
}
$ga = new GA();
$rcode = $ga->verifyCode($user->ga_token, $code);
if (!$rcode) {
$res['ret'] = 0;
$res['msg'] = "测试错误";
return $response->getBody()->write(json_encode($res));
}
$res['ret'] = 1;
$res['msg'] = "测试成功";
return $response->getBody()->write(json_encode($res));
}
public function GaSet($request, $response, $args)
{
$enable = $request->getParam('enable');
$user = $this->user;
if ($enable == "") {
$res['ret'] = 0;
$res['msg'] = "悟空别闹";
return $response->getBody()->write(json_encode($res));
}
$user->ga_enable=$enable;
$user->save();
$res['ret'] = 1;
$res['msg'] = "设置成功";
return $response->getBody()->write(json_encode($res));
}
public function ResetPort($request, $response, $args)
{
$user = $this->user;
$origin_port = $user->port;
$user->port = Tools::getAvPort();
$user->save();
$relay_rules = Relay::where('user_id', $user->id)->where('port', $origin_port)->get();
foreach ($relay_rules as $rule) {
$rule->port = $user->port;
$rule->save();
}
$res['ret'] = 1;
$res['msg'] = "设置成功,新端口是".$user->port;
return $response->getBody()->write(json_encode($res));
}
public function GaReset($request, $response, $args)
{
$user = $this->user;
$ga = new GA();
$secret = $ga->createSecret();
$user->ga_token=$secret;
$user->save();
$newResponse = $response->withStatus(302)->withHeader('Location', '/user/edit');
return $newResponse;
}
public function nodeAjax($request, $response, $args)
{
$id = $args['id'];
$point_node=Node::find($id);
$prefix=explode(" - ", $point_node->name);
return $this->view()->assign('point_node', $point_node)->assign('prefix', $prefix[0])->assign('id', $id)->display('user/nodeajax.tpl');
}
public function node($request, $response, $args)
{
$user = Auth::getUser();
$nodes = Node::where('type', 1)->orderBy('name')->get();
$relay_rules = Relay::where('user_id', $this->user->id)->orwhere('user_id', 0)->orderBy('id', 'asc')->get();
if (!Tools::is_protocol_relay($user)) {
$relay_rules = array();
}
$node_prefix=array();
$node_method=array();
$a=0;
$node_order=array();
$node_alive=array();
$node_prealive=array();
$node_heartbeat=array();
$node_bandwidth=array();
$node_muport=array();
$node_isv6=array();
$node_class=array();
$ports_count = Node::where('type', 1)->where('sort', 9)->orderBy('name')->count();
$ports_count += 1;
foreach ($nodes as $node) {
if (((($user->node_group==$node->node_group||$node->node_group==0))||$user->is_admin)&&(!$node->isNodeTrafficOut())) {
if ($node->sort==9) {
$mu_user=User::where('port', '=', $node->server)->first();
$mu_user->obfs_param=$this->user->getMuMd5();
array_push($node_muport, array('server'=>$node,'user'=>$mu_user));
continue;
}
$temp=explode(" - ", $node->name);
$node_isv6[$temp[0]]=$node->isv6;
$node_class[$temp[0]]=$node->node_class;
if (!isset($node_prefix[$temp[0]])) {
$node_prefix[$temp[0]]=array();
$node_order[$temp[0]]=$a;
$node_alive[$temp[0]]=0;
if (isset($temp[1])) {
$node_method[$temp[0]]=$temp[1];
} else {
$node_method[$temp[0]]="";
}
$a++;
}
if ($node->sort==0||$node->sort==7||$node->sort==8||$node->sort==10) {
$node_tempalive=$node->getOnlineUserCount();
$node_prealive[$node->id]=$node_tempalive;
if ($node->isNodeOnline() !== null) {
if ($node->isNodeOnline() === false) {
$node_heartbeat[$temp[0]]="离线";
} else {
$node_heartbeat[$temp[0]]="在线";
}
} else {
if (!isset($node_heartbeat[$temp[0]])) {
$node_heartbeat[$temp[0]]="暂无数据";
}
}
if ($node->node_bandwidth_limit==0) {
$node_bandwidth[$temp[0]]=(int)($node->node_bandwidth/1024/1024/1024)." GB 已用";
} else {
$node_bandwidth[$temp[0]]=(int)($node->node_bandwidth/1024/1024/1024)." GB / ".(int)($node->node_bandwidth_limit/1024/1024/1024)." GB - ".$node->bandwidthlimit_resetday." 日重置";
}
if ($node_tempalive!="暂无数据") {
$node_alive[$temp[0]]=$node_alive[$temp[0]]+$node_tempalive;
}
} else {
$node_prealive[$node->id]="暂无数据";
if (!isset($node_heartbeat[$temp[0]])) {
$node_heartbeat[$temp[0]]="暂无数据";
}
}
if (isset($temp[1])) {
if (strpos($node_method[$temp[0]], $temp[1])===false) {
$node_method[$temp[0]]=$node_method[$temp[0]]." ".$temp[1];
}
}
array_push($node_prefix[$temp[0]], $node);
}
}
$node_prefix=(object)$node_prefix;
$node_order=(object)$node_order;
$tools = new Tools();
return $this->view()->assign('relay_rules', $relay_rules)->assign('node_class', $node_class)->assign('node_isv6', $node_isv6)->assign('tools', $tools)->assign('node_method', $node_method)->assign('node_muport', $node_muport)->assign('node_bandwidth', $node_bandwidth)->assign('node_heartbeat', $node_heartbeat)->assign('node_prefix', $node_prefix)->assign('node_prealive', $node_prealive)->assign('node_order', $node_order)->assign('user', $user)->assign('node_alive', $node_alive)->display('user/node.tpl');
}
public function nodeInfo($request, $response, $args)
{
$user = Auth::getUser();
$id = $args['id'];
$mu = $request->getQueryParams()["ismu"];
$relay_rule_id = $request->getQueryParams()["relay_rule"];
$node = Node::find($id);
if ($node == null) {
return null;
}
switch ($node->sort) {
case 0:
if ((($user->class>=$node->node_class&&($user->node_group==$node->node_group||$node->node_group==0))||$user->is_admin)&&($node->node_bandwidth_limit==0||$node->node_bandwidth<$node->node_bandwidth_limit)) {
return $this->view()->assign('node', $node)->assign('user', $user)->assign('mu', $mu)->assign('relay_rule_id', $relay_rule_id)->registerClass("URL", "App\Utils\URL")->display('user/nodeinfo.tpl');
}
break;
case 1:
if ($user->class>=$node->node_class&&($user->node_group==$node->node_group||$node->node_group==0)) {
$email=$this->user->email;
$email=Radius::GetUserName($email);
$json_show="VPN 信息
地址:".$node->server."
"."用户名:".$email."
密码:".$this->user->passwd."
支持方式:".$node->method."
备注:".$node->info;
return $this->view()->assign('json_show', $json_show)->display('user/nodeinfovpn.tpl');
}
break;
case 2:
if ($user->class>=$node->node_class&&($user->node_group==$node->node_group||$node->node_group==0)) {
$email=$this->user->email;
$email=Radius::GetUserName($email);
$json_show="SSH 信息
地址:".$node->server."
"."用户名:".$email."
密码:".$this->user->passwd."
支持方式:".$node->method."
备注:".$node->info;
return $this->view()->assign('json_show', $json_show)->display('user/nodeinfossh.tpl');
}
break;
case 3:
if ($user->class>=$node->node_class&&($user->node_group==$node->node_group||$node->node_group==0)) {
$email=$this->user->email;
$email=Radius::GetUserName($email);
$exp = explode(":", $node->server);
$token = LinkController::GenerateCode(3, $exp[0], $exp[1], 0, $this->user->id);
$json_show="PAC 信息
地址:".Config::get('baseUrl')."/link/".$token."
"."用户名:".$email."
密码:".$this->user->passwd."
支持方式:".$node->method."
备注:".$node->info;
return $this->view()->assign('json_show', $json_show)->display('user/nodeinfopac.tpl');
}
break;
case 4:
if ($user->class>=$node->node_class&&($user->node_group==$node->node_group||$node->node_group==0)) {
$email=$this->user->email;
$email=Radius::GetUserName($email);
$json_show="APN 信息
下载地址:".$node->server."
"."用户名:".$email."
密码:".$this->user->passwd."
支持方式:".$node->method."
备注:".$node->info;
return $this->view()->assign('json_show', $json_show)->display('user/nodeinfoapn.tpl');
}
break;
case 5:
if ($user->class>=$node->node_class&&($user->node_group==$node->node_group||$node->node_group==0)) {
$email=$this->user->email;
$email=Radius::GetUserName($email);
$json_show="Anyconnect 信息
地址:".$node->server."
"."用户名:".$email."
密码:".$this->user->passwd."
支持方式:".$node->method."
备注:".$node->info;
return $this->view()->assign('json_show', $json_show)->display('user/nodeinfoanyconnect.tpl');
}
break;
case 6:
if ($user->class>=$node->node_class&&($user->node_group==$node->node_group||$node->node_group==0)) {
$email=$this->user->email;
$email=Radius::GetUserName($email);
$exp = explode(":", $node->server);
$token_cmcc = LinkController::GenerateApnCode("cmnet", $exp[0], $exp[1], $this->user->id);
$token_cnunc = LinkController::GenerateApnCode("3gnet", $exp[0], $exp[1], $this->user->id);
$token_ctnet = LinkController::GenerateApnCode("ctnet", $exp[0], $exp[1], $this->user->id);
$json_show="APN 文件
移动地址:".Config::get('baseUrl')."/link/".$token_cmcc."
联通地址:".Config::get('baseUrl')."/link/".$token_cnunc."
电信地址:".Config::get('baseUrl')."/link/".$token_ctnet."
"."用户名:".$email."
密码:".$this->user->passwd."
支持方式:".$node->method."
备注:".$node->info;
return $this->view()->assign('json_show', $json_show)->display('user/nodeinfoapndownload.tpl');
}
break;
case 7:
if ($user->class>=$node->node_class&&($user->node_group==$node->node_group||$node->node_group==0)) {
$email=$this->user->email;
$email=Radius::GetUserName($email);
$token = LinkController::GenerateCode(7, $node->server, ($this->user->port-20000), 0, $this->user->id);
$json_show="PAC Plus 信息
PAC 地址:".Config::get('baseUrl')."/link/".$token."
支持方式:".$node->method."
备注:".$node->info;
return $this->view()->assign('json_show', $json_show)->display('user/nodeinfopacplus.tpl');
}
break;
case 8:
if ($user->class>=$node->node_class&&($user->node_group==$node->node_group||$node->node_group==0)) {
$email=$this->user->email;
$email=Radius::GetUserName($email);
$token = LinkController::GenerateCode(8, $node->server, ($this->user->port-20000), 0, $this->user->id);
$token_ios = LinkController::GenerateCode(8, $node->server, ($this->user->port-20000), 1, $this->user->id);
$json_show="PAC Plus Plus信息
PAC 一般地址:".Config::get('baseUrl')."/link/".$token."
PAC iOS 地址:".Config::get('baseUrl')."/link/".$token_ios."
"."备注:".$node->info;
return $this->view()->assign('json_show', $json_show)->display('user/nodeinfopacpp.tpl');
}
break;
case 10:
if ((($user->class>=$node->node_class&&($user->node_group==$node->node_group||$node->node_group==0))||$user->is_admin)&&($node->node_bandwidth_limit==0||$node->node_bandwidth<$node->node_bandwidth_limit)) {
return $this->view()->assign('node', $node)->assign('user', $user)->assign('mu', $mu)->assign('relay_rule_id', $relay_rule_id)->registerClass("URL", "App\Utils\URL")->display('user/nodeinfo.tpl');
}
break;
default:
echo "微笑";
}
}
public function GetPcConf($request, $response, $args)
{
$is_mu = $request->getQueryParams()["is_mu"];
$is_ss = $request->getQueryParams()["is_ss"];
$newResponse = $response->withHeader('Content-type', ' application/octet-stream')->withHeader('Content-Disposition', ' attachment; filename=gui-config.json');//->getBody()->write($builder->output());
$newResponse->getBody()->write(LinkController::GetPcConf($this->user, $is_mu, $is_ss));
return $newResponse;
}
public function GetIosConf($request, $response, $args)
{
$newResponse = $response->withHeader('Content-type', ' application/octet-stream')->withHeader('Content-Disposition', ' attachment; filename=allinone.conf');//->getBody()->write($builder->output());
if ($this->user->is_admin) {
$newResponse->getBody()->write(LinkController::GetIosConf(Node::where(
function ($query) {
$query->where('sort', 0)
->orWhere('sort', 10);
}
)->where("type", "1")->get(), $this->user));
} else {
$newResponse->getBody()->write(LinkController::GetIosConf(Node::where(
function ($query) {
$query->where('sort', 0)
->orWhere('sort', 10);
}
)->where("type", "1")->where(
function ($query) {
$query->where("node_group", "=", $this->user->node_group)
->orWhere("node_group", "=", 0);
}
)->where("node_class", "<=", $this->user->class)->get(), $this->user));
}
return $newResponse;
}
public function profile($request, $response, $args)
{
$pageNum = 1;
if (isset($request->getQueryParams()["page"])) {
$pageNum = $request->getQueryParams()["page"];
}
$paybacks = Payback::where("ref_by", $this->user->id)->orderBy("datetime", "desc")->paginate(15, ['*'], 'page', $pageNum);
$paybacks->setPath('/user/profile');
$iplocation = new QQWry();
$userip=array();
$total = Ip::where("datetime",">=",time()-300)->where('userid', '=',$this->user->id)->get();
$totallogin = LoginIp::where('userid', '=', $this->user->id)->where("type", "=", 0)->orderBy("datetime", "desc")->take(10)->get();
$userloginip=array();
foreach ($totallogin as $single) {
//if(isset($useripcount[$single->userid]))
{
if (!isset($userloginip[$single->ip])) {
//$useripcount[$single->userid]=$useripcount[$single->userid]+1;
$location=$iplocation->getlocation($single->ip);
$userloginip[$single->ip]=iconv('gbk', 'utf-8//IGNORE', $location['country'].$location['area']);
}
}
}
foreach($total as $single)
{
//if(isset($useripcount[$single->userid]))
{
$single->ip = Tools::getRealIp($single->ip);
$is_node = Node::where("node_ip", $single->ip)->first();
if($is_node) {
continue;
}
if(!isset($userip[$single->ip]))
{
//$useripcount[$single->userid]=$useripcount[$single->userid]+1;
$location=$iplocation->getlocation($single->ip);
$userip[$single->ip]=iconv('gbk', 'utf-8//IGNORE', $location['country'].$location['area']);
}
}
}
return $this->view()->assign("userip",$userip)->assign("userloginip", $userloginip)->assign("paybacks", $paybacks)->display('user/profile.tpl');
}
public function announcement($request, $response, $args)
{
$Anns = Ann::orderBy('date', 'desc')->get();
return $this->view()->assign("anns", $Anns)->display('user/announcement.tpl');
}
public function edit($request, $response, $args)
{
$themes=Tools::getDir(BASE_PATH."/resources/views");
$BIP = BlockIp::where("ip", $_SERVER["REMOTE_ADDR"])->first();
if ($BIP == null) {
$Block = "IP: ".$_SERVER["REMOTE_ADDR"]." 没有被封";
$isBlock = 0;
} else {
$Block = "IP: ".$_SERVER["REMOTE_ADDR"]." 已被封";
$isBlock = 1;
}
$bind_token = TelegramSessionManager::add_bind_session($this->user);
$config_service = new Config();
return $this->view()->assign('user', $this->user)->assign('themes', $themes)->assign('isBlock', $isBlock)->assign('Block', $Block)->assign('bind_token', $bind_token)->assign('telegram_bot', Config::get('telegram_bot'))->assign('config_service', $config_service)
->registerClass("URL", "App\Utils\URL")->display('user/edit.tpl');
}
public function invite($request, $response, $args)
{
$pageNum = 1;
if (isset($request->getQueryParams()["page"])) {
$pageNum = $request->getQueryParams()["page"];
}
$codes=InviteCode::where('user_id', $this->user->id)->orderBy("created_at", "desc")->paginate(15, ['*'], 'page', $pageNum);
$codes->setPath('/user/invite');
return $this->view()->assign('codes', $codes)->display('user/invite.tpl');
}
public function doInvite($request, $response, $args)
{
$n = $this->user->invite_num;
if ($n < 1) {
$res['ret'] = 0;
$res['msg'] = "失败";
return $response->getBody()->write(json_encode($res));
}
for ($i = 0; $i < $n; $i++) {
$char = Tools::genRandomChar(32);
$code = new InviteCode();
$code->code = $char;
$code->user_id = $this->user->id;
$code->save();
}
$this->user->invite_num = 0;
$this->user->save();
$res['ret'] = 1;
$res['msg'] = "生成成功。";
return $this->echoJson($response, $res);
}
public function sys()
{
return $this->view()->assign('ana', "")->display('user/sys.tpl');
}
public function updatePassword($request, $response, $args)
{
$oldpwd = $request->getParam('oldpwd');
$pwd = $request->getParam('pwd');
$repwd = $request->getParam('repwd');
$user = $this->user;
if (!Hash::checkPassword($user->pass, $oldpwd)) {
$res['ret'] = 0;
$res['msg'] = "旧密码错误";
return $response->getBody()->write(json_encode($res));
}
if ($pwd != $repwd) {
$res['ret'] = 0;
$res['msg'] = "两次输入不符合";
return $response->getBody()->write(json_encode($res));
}
if (strlen($pwd) < 8) {
$res['ret'] = 0;
$res['msg'] = "密码太短啦";
return $response->getBody()->write(json_encode($res));
}
$hashPwd = Hash::passwordHash($pwd);
$user->pass = $hashPwd;
$user->save();
$user->clean_link();
$res['ret'] = 1;
$res['msg'] = "修改成功";
return $this->echoJson($response, $res);
}
public function updateHide($request, $response, $args)
{
$hide = $request->getParam('hide');
$user = $this->user;
$user->is_hide = $hide;
$user->save();
$res['ret'] = 1;
$res['msg'] = "修改成功";
return $this->echoJson($response, $res);
}
public function Unblock($request, $response, $args)
{
$user = $this->user;
$BIP = BlockIp::where("ip", $_SERVER["REMOTE_ADDR"])->get();
foreach ($BIP as $bi) {
$bi->delete();
}
$UIP = new UnblockIp();
$UIP->userid = $user->id;
$UIP->ip = $_SERVER["REMOTE_ADDR"];
$UIP->datetime = time();
$UIP->save();
$res['ret'] = 1;
$res['msg'] = "发送解封命令解封 ".$_SERVER["REMOTE_ADDR"]." 成功";
return $this->echoJson($response, $res);
}
public function shop($request, $response, $args)
{
$pageNum = 1;
if (isset($request->getQueryParams()["page"])) {
$pageNum = $request->getQueryParams()["page"];
}
$shops = Shop::where("status", 1)->paginate(15, ['*'], 'page', $pageNum);
$shops->setPath('/user/shop');
return $this->view()->assign('shops', $shops)->display('user/shop.tpl');
}
public function CouponCheck($request, $response, $args)
{
$coupon = $request->getParam('coupon');
$shop = $request->getParam('shop');
$shop=Shop::where("id", $shop)->where("status", 1)->first();
if ($shop==null) {
$res['ret'] = 0;
$res['msg'] = "非法请求";
return $response->getBody()->write(json_encode($res));
}
if ($coupon=="") {
$res['ret'] = 1;
$res['name'] = $shop->name;
$res['credit'] = "0 %";
$res['total'] = $shop->price."元";
return $response->getBody()->write(json_encode($res));
}
$coupon=Coupon::where("code", $coupon)->first();
if ($coupon==null) {
$res['ret'] = 0;
$res['msg'] = "优惠码无效";
return $response->getBody()->write(json_encode($res));
}
if ($coupon->order($shop->id)==false) {
$res['ret'] = 0;
$res['msg'] = "此优惠码不可用于此商品";
return $response->getBody()->write(json_encode($res));
}
$res['ret'] = 1;
$res['name'] = $shop->name;
$res['credit'] = $coupon->credit." %";
$res['total'] = $shop->price*((100-$coupon->credit)/100)."元";
return $response->getBody()->write(json_encode($res));
}
public function buy($request, $response, $args)
{
$coupon = $request->getParam('coupon');
$code = $coupon;
$shop = $request->getParam('shop');
$autorenew = $request->getParam('autorenew');
$shop=Shop::where("id", $shop)->where("status", 1)->first();
if ($shop==null) {
$res['ret'] = 0;
$res['msg'] = "非法请求";
return $response->getBody()->write(json_encode($res));
}
if ($coupon=="") {
$credit=0;
} else {
$coupon=Coupon::where("code", $coupon)->first();
if ($coupon==null) {
$credit=0;
} else {
if ($coupon->onetime==1) {
$onetime=true;
}
$credit=$coupon->credit;
}
if ($coupon->order($shop->id)==false) {
$res['ret'] = 0;
$res['msg'] = "此优惠码不可用于此商品";
return $response->getBody()->write(json_encode($res));
}
if ($coupon->expire