skycaiji/SkycaijiApp/admin/controller/Proxy.php

251 lines
7.0 KiB
PHP

<?php
/*
|--------------------------------------------------------------------------
| SkyCaiji (蓝天采集器)
|--------------------------------------------------------------------------
| Copyright (c) 2018 https://www.skycaiji.com All rights reserved.
|--------------------------------------------------------------------------
| 使用协议 https://www.skycaiji.com/licenses
|--------------------------------------------------------------------------
*/
namespace skycaiji\admin\controller;
class Proxy extends BaseController {
public function listAction(){
$mproxy=model('Proxyip');
$cond=array();
$search=array(
'num'=>input('num/d',200),
'ip'=>input('ip'),
'user'=>input('user'),
'pwd'=>input('pwd'),
'type'=>input('?type')?input('type'):'all',
'invalid'=>input('?invalid')?input('invalid'):'all',
);
if(!empty($search['ip'])){
$cond['ip']=array('like',addslashes($search['ip']).'%');
}
if($search['type']!='all'){
$cond['type']=$search['type'];
}
if($search['invalid']!='all'){
$cond['invalid']=$search['invalid'];
}
if(!empty($search['user'])){
$cond['user']=$search['user'];
}
if(!empty($search['pwd'])){
$cond['pwd']=$search['pwd'];
}
$count=$mproxy->where($cond)->count();
if($count>0){
$dataList=$mproxy->where($cond)->order('addtime desc,no desc')->paginate($search['num'],false,paginate_auto_config());
$pagenav=$dataList->render();
$pagenav=str_replace('class="pagination', 'class="pagination pagination-sm no-margin pull-right', $pagenav);
$this->assign('pagenav',$pagenav);
$dataList=$dataList->all();
$dataList=empty($dataList)?array():$dataList;
foreach ($dataList as $k=>$v){
$v=$v->toArray();
foreach ($v as $vk=>$vv){
$v[$vk]=htmlspecialchars($vv,ENT_QUOTES);
}
$dataList[$k]=$v;
}
$this->assign('dataList',$dataList);
}
$urlParams=input('param.');
$urlParams=http_build_query($urlParams);
$this->assign('proxyTypes',$mproxy->proxy_types());
$this->assign('search',$search);
$this->assign('urlParams',$urlParams);
return $this->fetch();
}
public function opAction(){
$op=input('op');
$listUrl=input('url_params','','trim');
$listUrl='Proxy/list?'.ltrim($listUrl,'?');
$mproxy=model('Proxyip');
if($op=='delete'){
$ip=input('ip');
$mproxy->where('ip',$ip)->delete();
$this->success('删除成功',$listUrl);
}elseif($op=='delete_all'){
$ips=input('ips','','trim');
$ips=empty($ips)?array():json_decode($ips,true);
$ips=array_map('trim', $ips);
if(!empty($ips)){
$mproxy->where('ip','in',$ips)->delete();
}
$this->success('删除成功',$listUrl);
}elseif($op=='update_all'){
$ips=input('ips','','trim');
$ip_list=input('ip_list','','trim');
$user_list=input('user_list','','trim');
$pwd_list=input('pwd_list','','trim');
$type_list=input('type_list','','trim');
$ips=empty($ips)?array():json_decode($ips,true);
$ip_list=empty($ip_list)?array():json_decode($ip_list,true);
$user_list=empty($user_list)?array():json_decode($user_list,true);
$pwd_list=empty($pwd_list)?array():json_decode($pwd_list,true);
$type_list=empty($type_list)?array():json_decode($type_list,true);
$ips=array_map('trim', $ips);
$ip_list=array_map('trim', $ip_list);
$user_list=array_map('trim', $user_list);
$pwd_list=array_map('trim', $pwd_list);
$type_list=array_map('trim', $type_list);
for($i=0;$i<count($ips);$i++){
$mproxy->strict(false)->where('ip',$ips[$i])->update(array(
'ip'=>$ip_list[$i],
'user'=>$user_list[$i],
'pwd'=>$pwd_list[$i],
'type'=>$type_list[$i],
));
}
$this->success('修改成功',$listUrl);
}
}
public function addAction(){
$mproxy=model('Proxyip');
$proxyTypes=$mproxy->proxy_types();
if(request()->isPost()){
$ip_list=input('ip_list/a',array(),'trim');
$user_list=input('user_list/a',array(),'trim');
$pwd_list=input('pwd_list/a',array(),'trim');
$type_list=input('type_list/a',array(),'trim');
if(!empty($ip_list)){
$nowTime=time();
foreach($ip_list as $k=>$v){
$newData=array(
'ip'=>$v,
'user'=>$user_list[$k],
'pwd'=>$pwd_list[$k],
'type'=>$type_list[$k],
'addtime'=>$nowTime
);
$mproxy->db()->strict(false)->insert($newData,true);
}
$this->success('添加成功');
}else{
$this->error('请添加ip');
}
}else{
$this->assign('proxyTypes',$proxyTypes);
return $this->fetch();
}
}
/*批量添加代理*/
public function batchAction(){
$mproxy=model('Proxyip');
$proxyTypes=$mproxy->proxy_types();
if(request()->isPost()){
$type=input('type');
$ips=input('ips','',null);
$fmt=input('format','','trim');
$user=input('user','','trim');
$pwd=input('pwd','','trim');
$ipList=array();
if(!empty($fmt)&&preg_match_all('/[^\r\n]+/',$ips,$mips)){
foreach ($mips[0] as $ip){
$ip=model('Proxyip')->get_format_ips($ip,$fmt,false);
if(empty($ip)){
continue;
}
$ipList[]=$ip;
}
}
$ipList=$mproxy->ips_format2db($ipList,array(
'type'=>$type,
'user'=>$user,
'pwd'=>$pwd
));
if(empty($ipList)){
$this->error('没有匹配到数据');
}
if(input('is_test')){
$ips='';
$proxyTypes=array_flip($proxyTypes);
foreach($ipList as $ip){
$ips.=$ip['ip'].' - '.$proxyTypes[$ip['type']].($ip['user']?(' - '.$ip['user'].':'.$ip['pwd']):'').PHP_EOL;
}
$this->success($ips);
}else{
$mproxy->strict(false)->insertAll($ipList,true,500);
$this->success('批量添加成功');
}
}else{
$this->assign('proxyTypes',$proxyTypes);
return $this->fetch();
}
}
/*清理无效ip*/
public function clearInvalidAction(){
$mproxy=model('Proxyip');
$mproxy->where('invalid',1)->delete();
$this->success('清理完成','Setting/proxy');
}
/*测试代理接口*/
public function testApiAction(){
$config=input('config/a',array(),'trim');
$mproxy=model('Proxyip');
$html=get_html($config['api_url']);
$ips=$mproxy->get_format_ips($html,$config['api_format'],true);
$ips=$mproxy->ips_format2db ( $ips, array (
'type' => $config ['api_type'],
'user' => $config ['api_user'],
'pwd' => $config ['api_pwd'],
) );
$types=$mproxy->proxy_types();
$types=array_flip($types);
$ipsStr='';
foreach ($ips as $ip){
if(empty($ip)){
continue;
}
$ipsStr.=$ip['ip'].' - '.$types[$ip['type']].($ip['user']?(' - '.$ip['user'].':'.$ip['pwd']):'').PHP_EOL;
}
$ips=$ipsStr;
unset($ipsStr);
$this->assign('ips',$ips);
return $this->fetch('testApi');
}
}