| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713 |
- <?php
- namespace App\Controllers;
- use App\Services\Auth;
- use App\Models\Node;
- use App\Models\TrafficLog;
- use App\Models\InviteCode;
- use App\Models\CheckInLog;
- use App\Models\Ann;
- use App\Models\Speedtest;
- use App\Models\Shop;
- use App\Models\Coupon;
- use App\Models\Bought;
- use App\Models\Ticket;
- use App\Services\Config;
- use App\Utils\Hash;
- use App\Utils\Tools;
- use App\Utils\Radius;
- use App\Utils\Wecenter;
- use App\Models\RadiusBan;
- use App\Models\DetectLog;
- use App\Models\DetectRule;
- use voku\helper\AntiXSS;
- use App\Models\User;
- use App\Models\Code;
- use App\Models\Ip;
- use App\Models\Paylist;
- use App\Models\LoginIp;
- use App\Models\BlockIp;
- use App\Models\UnblockIp;
- use App\Models\Payback;
- use App\Models\Relay;
- use App\Utils\QQWry;
- use App\Utils\GA;
- use App\Utils\Geetest;
- use App\Utils\Telegram;
- use App\Utils\TelegramSessionManager;
- use App\Utils\Pay;
- use App\Utils\URL;
- use App\Services\Mail;
- /**
- * HomeController
- */
- class UserController extends BaseController
- {
- private $user;
- public function __construct()
- {
- $this->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 信息<br>地址:".$node->server."<br>"."用户名:".$email."<br>密码:".$this->user->passwd."<br>支持方式:".$node->method."<br>备注:".$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 信息<br>地址:".$node->server."<br>"."用户名:".$email."<br>密码:".$this->user->passwd."<br>支持方式:".$node->method."<br>备注:".$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 信息<br>地址:".Config::get('baseUrl')."/link/".$token."<br>"."用户名:".$email."<br>密码:".$this->user->passwd."<br>支持方式:".$node->method."<br>备注:".$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 信息<br>下载地址:".$node->server."<br>"."用户名:".$email."<br>密码:".$this->user->passwd."<br>支持方式:".$node->method."<br>备注:".$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 信息<br>地址:".$node->server."<br>"."用户名:".$email."<br>密码:".$this->user->passwd."<br>支持方式:".$node->method."<br>备注:".$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 文件<br>移动地址:".Config::get('baseUrl')."/link/".$token_cmcc."<br>联通地址:".Config::get('baseUrl')."/link/".$token_cnunc."<br>电信地址:".Config::get('baseUrl')."/link/".$token_ctnet."<br>"."用户名:".$email."<br>密码:".$this->user->passwd."<br>支持方式:".$node->method."<br>备注:".$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 信息<br>PAC 地址:".Config::get('baseUrl')."/link/".$token."<br>支持方式:".$node->method."<br>备注:".$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信息<br>PAC 一般地址:".Config::get('baseUrl')."/link/".$token."<br>PAC iOS 地址:".Config::get('baseUrl')."/link/".$token_ios."<br>"."备注:".$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<time()) {
- $res['ret'] = 0;
- $res['msg'] = "此优惠码已过期";
- return $response->getBody()->write(json_encode($res));
- }
- }
- $price=$shop->price*((100-$credit)/100);
- $user=$this->user;
- if ((float)$user->money<(float)$price) {
- $res['ret'] = 0;
- $res['msg'] = "余额不足,总价为".$price."元。";
- return $response->getBody()->write(json_encode($res));
- }
- $user->money=$user->money-$price;
- $user->save();
- $bought=new Bought();
- $bought->userid=$user->id;
- $bought->shopid=$shop->id;
- $bought->datetime=time();
- if ($autorenew==0||$shop->auto_renew==0) {
- $bought->renew=0;
- } else {
- $bought->renew=time()+$shop->auto_renew*86400;
- }
- $bought->coupon=$code;
- if (isset($onetime)) {
- $price=$shop->price;
- }
- $bought->price=$price;
- $bought->save();
- $shop->buy($user);
- $res['ret'] = 1;
- $res['msg'] = "购买成功";
- return $response->getBody()->write(json_encode($res));
- }
- public function bought($request, $response, $args)
- {
- $pageNum = 1;
- if (isset($request->getQueryParams()["page"])) {
- $pageNum = $request->getQueryParams()["page"];
- }
- $shops = Bought::where("userid", $this->user->id)->orderBy("id", "desc")->paginate(15, ['*'], 'page', $pageNum);
- $shops->setPath('/user/bought');
- return $this->view()->assign('shops', $shops)->display('user/bought.tpl');
- }
- public function deleteBoughtGet($request, $response, $args)
- {
- $id = $request->getParam('id');
- $shop = Bought::where("id", $id)->where("userid", $this->user->id)->first();
- if ($shop==null) {
- $rs['ret'] = 0;
- $rs['msg'] = "退订失败,订单不存在。";
- return $response->getBody()->write(json_encode($rs));
- }
- if ($this->user->id==$shop->userid) {
- $shop->renew=0;
- }
- if (!$shop->save()) {
- $rs['ret'] = 0;
- $rs['msg'] = "退订失败";
- return $response->getBody()->write(json_encode($rs));
- }
- $rs['ret'] = 1;
- $rs['msg'] = "退订成功";
- return $response->getBody()->write(json_encode($rs));
- }
- public function ticket($request, $response, $args)
- {
- $pageNum = 1;
- if (isset($request->getQueryParams()["page"])) {
- $pageNum = $request->getQueryParams()["page"];
- }
- $tickets = Ticket::where("userid", $this->user->id)->where("rootid", 0)->orderBy("datetime", "desc")->paginate(15, ['*'], 'page', $pageNum);
- $tickets->setPath('/user/ticket');
- return $this->view()->assign('tickets', $tickets)->display('user/ticket.tpl');
- }
- public function ticket_create($request, $response, $args)
- {
- return $this->view()->display('user/ticket_create.tpl');
- }
- public function ticket_add($request, $response, $args)
- {
- $title = $request->getParam('title');
- $content = $request->getParam('content');
- if ($title==""||$content=="") {
- $res['ret'] = 0;
- $res['msg'] = "请填全";
- return $this->echoJson($response, $res);
- }
- if (strpos($content, "admin")!=false||strpos($content, "user")!=false) {
- $res['ret'] = 0;
- $res['msg'] = "请求中有不正当的词语。";
- return $this->echoJson($response, $res);
- }
- $ticket=new Ticket();
- $antiXss = new AntiXSS();
- $ticket->title=$antiXss->xss_clean($title);
- $ticket->content=$antiXss->xss_clean($content);
- $ticket->rootid=0;
- $ticket->userid=$this->user->id;
- $ticket->datetime=time();
- $ticket->save();
- $adminUser = User::where("is_admin", "=", "1")->get();
- foreach ($adminUser as $user) {
- $subject = Config::get('appName')."-新工单被开启";
- $to = $user->email;
- $text = "管理员您好,有人开启了新的工单,请您及时处理。。" ;
- try {
- Mail::send($to, $subject, 'news/warn.tpl', [
- "user" => $user,"text" => $text
- ], [
- ]);
- } catch (Exception $e) {
- echo $e->getMessage();
- }
- }
- $res['ret'] = 1;
- $res['msg'] = "提交成功";
- return $this->echoJson($response, $res);
- }
- public function ticket_update($request, $response, $args)
- {
- $id = $args['id'];
- $content = $request->getParam('content');
- $status = $request->getParam('status');
- if ($content==""||$status=="") {
- $res['ret'] = 0;
- $res['msg'] = "请填全";
- return $this->echoJson($response, $res);
- }
- if (strpos($content, "admin")!=false||strpos($content, "user")!=false) {
- $res['ret'] = 0;
- $res['msg'] = "请求中有不正当的词语。";
- return $this->echoJson($response, $res);
- }
- $ticket_main=Ticket::where("id", "=", $id)->where("rootid", "=", 0)->first();
- if ($ticket_main->userid!=$this->user->id) {
- $newResponse = $response->withStatus(302)->withHeader('Location', '/user/ticket');
- return $newResponse;
- }
- if ($status==1&&$ticket_main->status!=$status) {
- $adminUser = User::where("is_admin", "=", "1")->get();
- foreach ($adminUser as $user) {
- $subject = Config::get('appName')."-工单被重新开启";
- $to = $user->email;
- $text = "管理员您好,有人重新开启了<a href=\"".Config::get('baseUrl')."/admin/ticket/".$ticket_main->id."/view\">工单</a>,请您及时处理。" ;
- try {
- Mail::send($to, $subject, 'news/warn.tpl', [
- "user" => $user,"text" => $text
- ], [
- ]);
- } catch (Exception $e) {
- echo $e->getMessage();
- }
- }
- } else {
- $adminUser = User::where("is_admin", "=", "1")->get();
- foreach ($adminUser as $user) {
- $subject = Config::get('appName')."-工单被回复";
- $to = $user->email;
- $text = "管理员您好,有人回复了<a href=\"".Config::get('baseUrl')."/admin/ticket/".$ticket_main->id."/view\">工单</a>,请您及时处理。" ;
- try {
- Mail::send($to, $subject, 'news/warn.tpl', [
- "user" => $user,"text" => $text
- ], [
- ]);
- } catch (Exception $e) {
- echo $e->getMessage();
- }
- }
- }
- $antiXss = new AntiXSS();
- $ticket=new Ticket();
- $ticket->title=$antiXss->xss_clean($ticket_main->title);
- $ticket->content=$antiXss->xss_clean($content);
- $ticket->rootid=$ticket_main->id;
- $ticket->userid=$this->user->id;
- $ticket->datetime=time();
- $ticket_main->status=$status;
- $ticket_main->save();
- $ticket->save();
- $res['ret'] = 1;
- $res['msg'] = "提交成功";
- return $this->echoJson($response, $res);
- }
- public function ticket_view($request, $response, $args)
- {
- $id = $args['id'];
- $ticket_main=Ticket::where("id", "=", $id)->where("rootid", "=", 0)->first();
- if ($ticket_main->userid!=$this->user->id) {
- $newResponse = $response->withStatus(302)->withHeader('Location', '/user/ticket');
- return $newResponse;
- }
- $pageNum = 1;
- if (isset($request->getQueryParams()["page"])) {
- $pageNum = $request->getQueryParams()["page"];
- }
- $ticketset=Ticket::where("id", $id)->orWhere("rootid", "=", $id)->orderBy("datetime", "desc")->paginate(5, ['*'], 'page', $pageNum);
- $ticketset->setPath('/user/ticket/'.$id."/view");
- return $this->view()->assign('ticketset', $ticketset)->assign("id", $id)->display('user/ticket_view.tpl');
- }
- public function updateWechat($request, $response, $args)
- {
- $type = $request->getParam('imtype');
- $wechat = $request->getParam('wechat');
- $user = $this->user;
- if ($user->telegram_id != 0) {
- $res['ret'] = 0;
- $res['msg'] = "您绑定了 Telegram ,所以此项并不能被修改。";
- return $response->getBody()->write(json_encode($res));
- }
- if ($wechat == ""||$type == "") {
- $res['ret'] = 0;
- $res['msg'] = "请填好";
- return $response->getBody()->write(json_encode($res));
- }
- $user1 = User::where('im_value', $wechat)->where('im_type', $type)->first();
- if ($user1 != null) {
- $res['ret'] = 0;
- $res['msg'] = "此联络方式已经被注册了";
- return $response->getBody()->write(json_encode($res));
- }
- $user->im_type = $type;
- $antiXss = new AntiXSS();
- $user->im_value = $antiXss->xss_clean($wechat);
- $user->save();
- $res['ret'] = 1;
- $res['msg'] = "修改成功";
- return $this->echoJson($response, $res);
- }
- public function updateSSR($request, $response, $args)
- {
- $protocol = $request->getParam('protocol');
- $obfs = $request->getParam('obfs');
- $user = $this->user;
- if ($obfs == ""||$protocol == "") {
- $res['ret'] = 0;
- $res['msg'] = "请填好";
- return $response->getBody()->write(json_encode($res));
- }
- if (!Tools::is_param_validate('obfs', $obfs)) {
- $res['ret'] = 0;
- $res['msg'] = "悟空别闹";
- return $response->getBody()->write(json_encode($res));
- }
- if (!Tools::is_param_validate('protocol', $protocol)) {
- $res['ret'] = 0;
- $res['msg'] = "悟空别闹";
- return $response->getBody()->write(json_encode($res));
- }
- $antiXss = new AntiXSS();
- $user->protocol = $antiXss->xss_clean($protocol);
- $user->obfs = $antiXss->xss_clean($obfs);
- if (!Tools::checkNoneProtocol($user)) {
- $res['ret'] = 0;
- $res['msg'] = "您好,系统检测到您目前的加密方式为 none ,但您将要设置为的协议并不在以下协议<br>".implode(',', Config::getSupportParam('allow_none_protocol')).'<br>之内,请您先修改您的加密方式,再来修改此处设置。';
- return $this->echoJson($response, $res);
- }
- if(!URL::SSCanConnect($user) && !URL::SSRCanConnect($user)) {
- $res['ret'] = 0;
- $res['msg'] = "您这样设置之后,就没有客户端能连接上了,所以系统拒绝了您的设置,请您检查您的设置之后再进行操作。";
- return $this->echoJson($response, $res);
- }
- $user->save();
- if(!URL::SSCanConnect($user)) {
- $res['ret'] = 0;
- $res['msg'] = "设置成功,但您目前的协议,混淆,加密方式设置会导致 Shadowsocks原版客户端无法连接,请您自行更换到 ShadowsocksR 客户端。";
- return $this->echoJson($response, $res);
- }
- if(!URL::SSRCanConnect($user)) {
- $res['ret'] = 0;
- $res['msg'] = "设置成功,但您目前的协议,混淆,加密方式设置会导致 ShadowsocksR 客户端无法连接,请您自行更换到 Shadowsocks 客户端。";
- return $this->echoJson($response, $res);
- }
- $res['ret'] = 0;
- $res['msg'] = "设置成功,您可自由选用客户端来连接。";
- return $this->echoJson($response, $res);
- }
- public function updateTheme($request, $response, $args)
- {
- $theme = $request->getParam('theme');
- $user = $this->user;
- if ($theme == "") {
- $res['ret'] = 0;
- $res['msg'] = "???";
- return $response->getBody()->write(json_encode($res));
- }
- $user->theme = filter_var($theme, FILTER_SANITIZE_STRING);
- $user->save();
- $res['ret'] = 1;
- $res['msg'] = "ok";
- return $this->echoJson($response, $res);
- }
- public function updateMail($request, $response, $args)
- {
- $mail = $request->getParam('mail');
- $user = $this->user;
- if (!($mail == "1"||$mail == "0")) {
- $res['ret'] = 0;
- $res['msg'] = "悟空别闹";
- return $response->getBody()->write(json_encode($res));
- }
- $user->sendDailyMail = $mail;
- $user->save();
- $res['ret'] = 1;
- $res['msg'] = "ok";
- return $this->echoJson($response, $res);
- }
- public function PacSet($request, $response, $args)
- {
- $pac = $request->getParam('pac');
- $user = $this->user;
- if ($pac == "") {
- $res['ret'] = 0;
- $res['msg'] = "悟空别闹";
- return $response->getBody()->write(json_encode($res));
- }
- $user->pac = $pac;
- $user->save();
- $res['ret'] = 1;
- $res['msg'] = "ok";
- return $this->echoJson($response, $res);
- }
- public function updateSsPwd($request, $response, $args)
- {
- $user = Auth::getUser();
- $pwd = $request->getParam('sspwd');
- if ($pwd == "") {
- $res['ret'] = 0;
- $res['msg'] = "悟空别闹";
- return $response->getBody()->write(json_encode($res));
- }
- if (!Tools::is_validate($pwd)) {
- $res['ret'] = 0;
- $res['msg'] = "悟空别闹";
- return $response->getBody()->write(json_encode($res));
- }
- $user->updateSsPwd($pwd);
- $res['ret'] = 1;
- Radius::Add($user, $pwd);
- return $this->echoJson($response, $res);
- }
- public function updateMethod($request, $response, $args)
- {
- $user = Auth::getUser();
- $method = $request->getParam('method');
- $method = strtolower($method);
- if ($method == "") {
- $res['ret'] = 0;
- $res['msg'] = "悟空别闹";
- return $response->getBody()->write(json_encode($res));
- }
- if (!Tools::is_param_validate('method', $method)) {
- $res['ret'] = 0;
- $res['msg'] = "悟空别闹";
- return $response->getBody()->write(json_encode($res));
- }
- $user->method = $method;
- if (!Tools::checkNoneProtocol($user)) {
- $res['ret'] = 0;
- $res['msg'] = "您好,系统检测到您将要设置的加密方式为 none ,但您的协议并不在以下协议<br>".implode(',', Config::getSupportParam('allow_none_protocol')).'<br>之内,请您先修改您的协议,再来修改此处设置。';
- return $this->echoJson($response, $res);
- }
- if(!URL::SSCanConnect($user) && !URL::SSRCanConnect($user)) {
- $res['ret'] = 0;
- $res['msg'] = "您这样设置之后,就没有客户端能连接上了,所以系统拒绝了您的设置,请您检查您的设置之后再进行操作。";
- return $this->echoJson($response, $res);
- }
- $user->updateMethod($method);
- if(!URL::SSCanConnect($user)) {
- $res['ret'] = 0;
- $res['msg'] = "设置成功,但您目前的协议,混淆,加密方式设置会导致 Shadowsocks原版客户端无法连接,请您自行更换到 ShadowsocksR 客户端。";
- return $this->echoJson($response, $res);
- }
- if(!URL::SSRCanConnect($user)) {
- $res['ret'] = 0;
- $res['msg'] = "设置成功,但您目前的协议,混淆,加密方式设置会导致 ShadowsocksR 客户端无法连接,请您自行更换到 Shadowsocks 客户端。";
- return $this->echoJson($response, $res);
- }
- $res['ret'] = 0;
- $res['msg'] = "设置成功,您可自由选用两种客户端来进行连接。";
- return $this->echoJson($response, $res);
- }
- public function logout($request, $response, $args)
- {
- Auth::logout();
- $newResponse = $response->withStatus(302)->withHeader('Location', '/auth/login');
- return $newResponse;
- }
- public function doCheckIn($request, $response, $args)
- {
- if (Config::get('enable_geetest_checkin') == 'true') {
- $ret = Geetest::verify($request->getParam('geetest_challenge'), $request->getParam('geetest_validate'), $request->getParam('geetest_seccode'));
- if (!$ret) {
- $res['ret'] = 0;
- $res['msg'] = "系统无法接受您的验证结果,请刷新页面后重试。";
- return $response->getBody()->write(json_encode($res));
- }
- }
- if (!$this->user->isAbleToCheckin()) {
- $res['msg'] = "您似乎已经续命过了...";
- $res['ret'] = 1;
- return $response->getBody()->write(json_encode($res));
- }
- $traffic = rand(Config::get('checkinMin'), Config::get('checkinMax'));
- $this->user->transfer_enable = $this->user->transfer_enable + Tools::toMB($traffic);
- $this->user->last_check_in_time = time();
- $this->user->save();
- $res['msg'] = sprintf("获得了 %u MB流量.", $traffic);
- $res['ret'] = 1;
- return $this->echoJson($response, $res);
- }
- public function kill($request, $response, $args)
- {
- return $this->view()->display('user/kill.tpl');
- }
- public function handleKill($request, $response, $args)
- {
- $user = Auth::getUser();
- $email=$user->email;
- $passwd = $request->getParam('passwd');
- // check passwd
- $res = array();
- if (!Hash::checkPassword($user->pass, $passwd)) {
- $res['ret'] = 0;
- $res['msg'] = " 密码错误";
- return $this->echoJson($response, $res);
- }
- // Auth::logout();
- // $user->kill_user();
- $res['ret'] = 1;
- $res['msg'] = "您没有使用此功能的权限。";
- return $this->echoJson($response, $res);
- }
- public function trafficLog($request, $response, $args)
- {
- $traffic=TrafficLog::where('user_id', $this->user->id)->where("log_time", ">", (time()-3*86400))->orderBy('id', 'desc')->get();
- return $this->view()->assign('logs', $traffic)->display('user/trafficlog.tpl');
- }
- public function detect_index($request, $response, $args)
- {
- $pageNum = 1;
- if (isset($request->getQueryParams()["page"])) {
- $pageNum = $request->getQueryParams()["page"];
- }
- $logs = DetectRule::paginate(15, ['*'], 'page', $pageNum);
- $logs->setPath('/user/detect');
- return $this->view()->assign('rules', $logs)->display('user/detect_index.tpl');
- }
- public function detect_log($request, $response, $args)
- {
- $pageNum = 1;
- if (isset($request->getQueryParams()["page"])) {
- $pageNum = $request->getQueryParams()["page"];
- }
- $logs = DetectLog::orderBy('id', 'desc')->where('user_id', $this->user->id)->paginate(15, ['*'], 'page', $pageNum);
- $logs->setPath('/user/detect/log');
- return $this->view()->assign('logs', $logs)->display('user/detect_log.tpl');
- }
- public function disable($request, $response, $args)
- {
- return $this->view()->display('user/disable.tpl');
- }
- public function telegram_reset($request, $response, $args)
- {
- $user = $this->user;
- $user->telegram_id = 0;
- $user->save();
- $newResponse = $response->withStatus(302)->withHeader('Location', '/user/edit');
- return $newResponse;
- }
- public function resetURL($request, $response, $args)
- {
- $user = $this->user;
- $user->clean_link();
- $newResponse = $response->withStatus(302)->withHeader('Location', '/user');
- return $newResponse;
- }
- }
|