cookie('id', 'blank'); $key=$request->cookie('key', 'blank'); $tor=$request->cookie('tor', 'false'); if($key=='blank' || $id=='blank'){ return redirect('/login'); } $path=$request->uri(); if($path==''||$path=='/'){ $path='/?signAll=1&ts=1657'; } $rpath=$kf.urlencode("$path"); if($redis->get($rpath)){ $response->withHeaders(json_decode($redis->hget($rpath,'CT'))); $response->withBody($redis->hget($rpath,'body')); return $response; } $host=getenv('public_url'); $httpquery=Http::timeout(60); $onion=''; $torstatus='Off'; if($tor=='true'){ $host=getenv('Zlibrary'); $httpquery=$httpquery->withProxy('socks5h://'.getenv('proxy')); $onion=''; $torstatus='On'; } $url='http://'.$host.$path; $auth=array('remix_userid'=>"$id",'remix_userkey'=>"$key",'siteLanguageV2'=>'zh','siteLanguage'=>'zh','selectedSiteMode'=>'books'); $return = $httpquery->withCookies($auth,$host)->get($url); $back=$return->body(); if($return->header('Content-Type')=='text/html; charset=UTF-8'){ $ver=getenv('version'); $copyright=getenv('copyright'); $copyright_url=getenv('copyright_url'); $front= <<
Zlibrary Proxy(v$ver) UserID:$id [$onion Tor $torstatus] [退出账号] [$copyright]
EOF; $back=$front.$back; } $backhead=$return->headers(); $backhead['Content-Length']=strlen($back); $response->withHeaders($backhead); /**Make Cache */ if($path=='/resources/build/global.js?0.495' || $path=='/resources/build/global.css?0.495' || $path=='/resources/ext/freewall.js' || preg_match("/^image*/",$return->header('Content-Type')) ){ $redis->hset($rpath,'CT',json_encode($backhead)); $redis->hset($rpath,'body',$back); $redis->expire($rpath,43200); } $response->withBody($back); return $response; } public function login(Request $request) { return view('login'); } public function check(Request $request) { $username=$request->post('name','blank'); $password=$request->post('password','blank'); $code=$request->post('code','blank'); $tor=$request->post('tor',false); if($username=='blank' || $password=='blank' || $code=='blank'){ return json(['code'=>500, 'msg'=>'缺少参数']); } try { $V=v::Email()->setName('用户名')->check($username); } catch (ValidationException $exception) { return json(['code'=>500, 'msg'=>$exception->getMessage()]); } try { $V=v::stringType()->setName('密码')->noWhitespace()->check($password); } catch (ValidationException $exception) { return json(['code'=>500, 'msg'=>$exception->getMessage()]); } try { $V=v::stringType()->length(5, 5)->setName('验证码')->noWhitespace()->check($code); } catch (ValidationException $exception) { return json(['code'=>500, 'msg'=>$exception->getMessage()]); } if (strtolower($code) !== $request->session()->get('captcha')) { return json(['code' => 400, 'msg' => '输入的验证码不正确']); } $url='https://'.getenv('public_login').'/rpc.php'; $response=Http::timeout(60); if($tor=='true'){ $url='http://'.getenv('ZlibraryLogin').'/rpc.php'; $response=$response->withProxy('socks5h://'.getenv('proxy')); } $response = $response->post("$url", ['isModal' => true,'email'=>"$username",'password'=>"$password",'site_mode'=>'books','action'=>'login','redirectUrl'=>'','isSinglelogin'=>'1','isTorVersion'=>'1','gg_json_mode'=>'1']); #print_r($response); if(!$response->successful()){ return json(['code' => 501, 'msg' => '登陆失败,服务端错误']); } $return=$response->body(); $return=json_decode($return); if(isset($return->response->validationError)){ return json(['code' => 502, 'msg' => 'Zlib登陆失败:'.$return->response->message]); } #print_r($return->response); $rawparma=$return->response->params; if($tor=='true'){ $rawparma=$return->response->priorityRedirectUrl; } $url=parse_url($rawparma)['query']; #print_r($url); $queryParts = explode('&', $url); $params = array(); foreach ($queryParts as $param) { $item = explode('=', $param); $params[$item[0]] = $item[1]; } return json(['code'=>200,'msg'=>'登陆成功','userid'=>$params['remix_userid']])->cookie('id', $params['remix_userid'],43200,'/')->cookie('key', $params['remix_userkey'],43200,'/')->cookie('tor', $tor,43200,'/'); } public function code(Request $request) { // 初始化验证码类 $builder = new CaptchaBuilder; // 生成验证码 $builder->build(); // 将验证码的值存储到session中 $request->session()->set('captcha', strtolower($builder->getPhrase())); // 获得验证码图片二进制数据 $img_content = $builder->get(); // 输出验证码二进制数据 return response($img_content, 200, ['Content-Type' => 'image/jpeg']); } public function logout(Request $request) { $response = response(); $response->cookie('id','', -1,'/'); $response->cookie('key','', -1,'/'); $response->header('Location', '/login'); $response->withStatus(302); return $response; } public function download(Request $request) { $id=$request->cookie('id', 'blank'); $key=$request->cookie('key', 'blank'); $tor=$request->cookie('tor', 'false'); if($key=='blank' || $id=='blank'){ return redirect('/login'); } $path=$request->uri(); View::assign([ 'id' => $id, 'key'=> $key, 'path'=> $path, 'tor'=>$tor, ]); return view('index'); } public function file(Request $request) { return response()->file(base_path() . '/app/controller/IndexController.php'); } public function tor(Request $request) { $to=$request->input('to','/'); $tor=$request->cookie('tor','false'); if($tor=='true'){ $tor='false'; }else{ $tor='true'; } return redirect($to)->cookie('tor', $tor,43200,'/'); } }