File: /www/server/panel/BTPanel/static/js/index207.js
import{_ as W}from"./index118.js?v=1777008528";import{aJ as Y,aI as D,r as u,H as B,V as Q,e as g,c as X,g as Z,j as K,k as tt,v as w,p as _,x as S,L as j,q as L,z as at}from"./base-lib.js?v=1777008528";import{k as v,M as I,o as et,di as st,c as N,w as V,e as O,_ as P,f as rt,ed as nt,cT as ot,cZ as lt}from"./utils-lib.js?v=1777008528";import{d as ut,e as ct,f as it,h as gt,i as pt,j as mt,s as dt,L as ft}from"./useStore9.js?v=1777008528";import{h as _t,j as vt}from"./config.js?v=1777008528";const k=Y("LOG-ANALYSE-STORE",()=>{const r=u(!1),e=u({type:"logs",name:""}),c=u([]),n=u({status:!1,channel:"",cycle:0,path:"",task_id:null}),h=u({}),i=u(""),p=u(!1),d=u(0),f=B({p:1,row:10,path:""}),x=async()=>{try{const s=await v({loading:p,request:ut({siteName:e.value.name}),data:{log_file:String,status:Boolean,msg:String},success:l=>{i.value=l.log_file,f.path=l.log_file,l.status||I.error(l.msg)}});return{data:s.log_file,status:s.status,msg:s.msg}}catch(s){return{data:"",status:!1,msg:"获取日志路径失败"}}},T=async s=>{try{const l=await v({loading:p,request:ct(s),data:{data:Array,page:String}});return{data:l.data,total:et(l.page)}}catch(l){return{data:[],total:0,other:{}}}},a=async()=>{try{const{status:s,msg:l}=await v({loading:p,request:it({path:i.value}),data:{status:Boolean,msg:String}});return{status:s,msg:l}}catch(s){return{status:!1,msg:"扫描失败"}}},t=async s=>{const l=await Bt(),m=setInterval(async()=>{const{data:y}=await gt({path:i.value});d.value=y.msg,y.msg===100&&(clearInterval(m),l.unmount(),I.success("扫描完成"),d.value=0,r.value=!0,s&&s())},1e3)},o={status:!1,channel:[],cycle:0,path:""},C={give:[],status:!1,cycle:1,task_id:null},M=async()=>{try{const{data:s}=await v({request:st(),success:({data:l})=>{const m=l.data.find(y=>{var R;return((R=y.task_data)==null?void 0:R.site_name)===e.value.name&&y.source==="web_log_scan"&&y.template_id==="110"});m?(Object.assign(n.value,{status:m.status,channel:m.sender,cycle:1,path:m.task_data.log_path}),Object.assign(A,{give:m.sender,status:m.status,cycle:1,task_id:m.id})):(Object.assign(n.value,o),Object.assign(A,C))}});return{data:{give:n.value.channel,status:n.value.status,cycle:1},status:!0,msg:"获取扫描数据成功"}}catch(s){return{status:!1,msg:"获取扫描数据失败"}}},$=async()=>{try{return await v({loading:"正在清空日志,请稍后...",request:pt({path:i.value}),message:!0}),{status:!0,msg:"清空日志成功"}}catch(s){return{status:!1,msg:"清空日志失败"}}},U=u(),z=async()=>{try{const s=await mt({path:"/www/wwwlogs/"+e.value.name+".log",type:h.value.type,time:h.value.start_time});return{data:s.data.msg||[],status:s.status,msg:"获取详情数据成功"}}catch(s){return{data:[],status:!1,msg:"获取详情数据失败"}}finally{}},J=u(),A=B({give:n.value.channel,status:!!n.value.status,cycle:1,task_id:n.value.task_id});return{isRefreshList:r,routeData:e,logPath:i,msgForm:A,scanData:n,tableData:c,tableParam:f,loading:p,percentum:d,rowData:h,getLogsTableData:T,logScanEvent:a,delAllLogDataEvent:$,tableColumn:U,getDetailData:z,logScanForm:J,onConfirmScanConfig:async s=>{try{return await v({loading:"正在设置定期扫描,请稍候...",request:dt(s),data:{msg:String},message:!0}),{status:!0,msg:"设置定期扫描成功"}}catch(l){return{status:!1,msg:"设置定期扫描失败"}}},getLogsPath:x,getScanData:M,startScanTimer:t}}),Mt=()=>D(k()),q=rt();N();const ht=[["xss","XSS"],["sql","SQL"],["san","扫描"],["php","PHP攻击"],["ip","IP(top100)"],["url","URL(top100)"]],yt=k(),{routeData:b,logPath:F,rowData:E,msgForm:wt,isRefreshList:G}=D(yt),{getLogsPath:Lt,getLogsTableData:bt,getScanData:St,startScanTimer:Dt,logScanEvent:kt,delAllLogDataEvent:xt,getDetailData:Tt,onConfirmScanConfig:$t}=k(),Ct=async(r,e)=>{try{if(b.value=e,e.type!=="site"){const{selectedWebSite:c}=D(ft());b.value={name:c.value,type:e.type}}return b.value.name?(await Lt(),await St(),await bt({...r,path:F.value})):{data:[],total:0}}catch(c){return{data:[],total:0}}},At=async()=>{await V({title:"清空扫描日志【".concat(b.value.name,"】"),type:"input",input:{content:"清空日志"},icon:"warning-filled",content:"风险操作,清空该扫描日志后,将无法查到以往的扫描日志记录,此操作不可逆,是否继续清空?"}),await xt(),G.value=!0},Et=async()=>{await V({title:"日志扫描",icon:"warning-filled",content:"建议在服务器负载较低时进行安全分析,本次将对【".concat(b.value.name,".log】文件进行扫描,可能等待时间较长,是否继续?")});const r=await kt();if(!r.status)return q.error(r.msg);Dt()},H=u([{label:"访问次数",prop:"num",width:80},{label:"访问路径",prop:"path",showOverflowTooltip:!0}]),Ot=async(r,e)=>{E.value=r,E.value.type=e,["sql","san","xss","php"].includes(e)||(H.value[1].label=e==="url"?"访问URL":"访问ip"),O({title:"日志详情",area:72,compData:{row:r,type:e},component:()=>P(()=>import("./log-detail.js?v=1777008528"),__vite__mapDeps([]),import.meta.url)})},Pt=Q([{label:"攻击ip",prop:"ip"},{label:"攻击时间",prop:"time"},{label:"user-agent",prop:"ua",showOverflowTooltip:!0},{label:"请求URL",width:210,render(r){return E.value.type==="san"?r.url:g("span",{class:"bg-lighter text-danger break-words"},[r.url])}}]),qt=u(),Ut=async r=>{try{const{data:e,status:c}=await Tt(),n=["sql","san","xss","php"];return qt.value=n.includes(r)?Pt.value:H.value,c?{data:e,total:e.length,other:{}}:{data:[],total:0,other:{}}}catch(e){return{data:[],total:0,other:{}}}},zt=async(r,e,c)=>{try{await e();const{give:n,cycle:h,status:i,task_id:p}=wt.value,d={template_id:110,task_data:JSON.stringify({task_data:{tid:"110",type:"web_log_scan",title:"Web日志扫描告警",status:i,count:0,interval:600,project:"",site_name:b.value.name},sender:n||[]})};let f;if(i)f=await v({request:_t(d),loading:"正在设置定期扫描告警",message:!0});else{if(!p)return q.error("请开启自动扫描"),!1;f=await v({loading:"正在关闭告警任务,请稍候...",request:vt({task_id:p}),message:!0})}return G.value=!0,f.status}catch(n){}},Rt=()=>{if(F.value==="")return q.error("配置文件丢失");O({title:"定期扫描",area:48,showFooter:!0,component:()=>P(()=>import("./scan-form.js?v=1777008528"),__vite__mapDeps([]),import.meta.url)})},Bt=()=>O({title:!1,component:()=>P(()=>import("./progress.js?v=1777008528"),__vite__mapDeps([]),import.meta.url),area:40}),jt=X({__name:"index",props:{type:{default:"logs"},name:{default:""}},setup(r,{expose:e}){const c=r,{mainHeight:n}=N(),h=Z(()=>c.type==="site"?426:n.value-426),i=k(),{isRefreshList:p,scanData:d}=D(i),{BtTable:f,BtPage:x,refresh:T}=nt({request:a=>{const{limit:t,...o}=a;return Ct({...o,row:t},c)},columns:[{label:"扫描时间",prop:"start_time",showOverflowTooltip:!0},{label:"耗时",prop:"time",render:a=>{var t;return((t=a.time)==null?void 0:t.substring(0,4))+"秒"}},...ht.map(a=>({label:a[1],prop:a[0],width:a[0]!=="ip"&&a[0]!=="php"&&a[0]!=="url"?50:"auto",render:function(t){return t[a[0]]?g("span",{class:"bt-link ".concat(a[0]==="ip"||a[0]==="url"?"":"!text-danger"),onClick:()=>Ot(t,a[0])},[t[a[0]]]):g("span",null,[t[a[0]]])}})),{label:"合计",render:function(a){let t=0;for(let o in a)o!="start_time"&&o!="time"&&o!="ip"&&o!="url"&&o!="is_status"&&a[o]>0&&(t+=a[o]);return g("span",null,[t])}}],extension:[ot(p)]});return e({init:T}),(a,t)=>{const o=at,C=W;return K(),tt("div",null,[g(C,null,{"header-left":w(()=>[g(o,{onClick:_(Et),type:"primary"},{default:w(()=>[...t[0]||(t[0]=[S("日志扫描",-1)])]),_:1},8,["onClick"]),g(o,{type:"default",class:j({"not-status":!_(d).status}),onClick:_(Rt)},{default:w(()=>[t[1]||(t[1]=S(" 定期扫描 ",-1)),L("i",{class:j("text-small svgtofont-icon-".concat(_(d).status?"start text-primary":"stop text-danger"," "))},null,2)]),_:1},8,["class","onClick"]),g(o,{onClick:_(At)},{default:w(()=>[...t[2]||(t[2]=[S("清空扫描日志",-1)])]),_:1},8,["onClick"])]),content:w(()=>[g(_(f),{"max-height":_(h)},null,8,["max-height"])]),"footer-right":w(()=>[g(_(x))]),_:1}),t[3]||(t[3]=L("ul",{class:"mt-8px leading-8 text-small list-disc ml-20px"},[L("li",null,[S(" 日志安全分析:扫描网站(.log)日志中含有攻击类型的请求(类型包含: "),L("span",{class:"text-danger"},"xss,sql,san,php"),S(" ) ")]),L("li",null,"分析的日志数据包含已拦截的请求"),L("li",null,"如日志文件过大,扫描可能等待时间较长,请耐心等待")],-1))])}}}),Jt=lt(jt,[["__scopeId","data-v-55808dbc"]]);export{Jt as A,k as L,Ut as r,zt as s,qt as t,Mt as u};
function __vite__mapDeps(indexes) {
if (!__vite__mapDeps.viteFileDeps) {
__vite__mapDeps.viteFileDeps = []
}
return indexes.map((i) => __vite__mapDeps.viteFileDeps[i])
}