HEX
Server: nginx/1.28.3
System: Linux ip-172-31-12-242 6.17.0-1007-aws #7~24.04.1-Ubuntu SMP Thu Jan 22 21:04:49 UTC 2026 x86_64
User: root (0)
PHP: 7.4.33
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
File: /www/server/panel/BTPanel/static/js/index288.js
import{c as ee,R as Ae,w as W,k as q,I as he,f as ue,db as we,c_ as Ve,d3 as ce,cO as ke,K as De,e as Fe,_ as Q,d4 as Se,dp as Ie,cP as Te,cZ as Ee}from"./utils-lib.js?v=1777008528";import{c as te,r as i,V as X,e as a,x as E,aF as N,H as Z,o as de,I as pe,j as V,k as z,p as n,v as s,q as v,Q as P,J as me,C as j,z as _e,ap as Re,ad as $e,ab as Le,y as Y,s as Pe}from"./base-lib.js?v=1777008528";import{_ as qe}from"./index192.js?v=1777008528";import{_ as fe}from"./index118.js?v=1777008528";import{getUserCert as oe,downClientPfx as Oe,revokeClientCert as Ue,getSslList as Be,getSslConfig as He,setSslConfig as Me,setSslVerify as Ne,getSslSiteList as ze,deleteDirAuth as je,delFileDeny as Ge,deleteDirAuthMultiple as Je,getFileDeny as Ke,getDirAuth as Qe}from"./site.js?v=1777008528";import{u as ge}from"./useStore2.js?v=1777008528";import{_ as Ze}from"./index175.js?v=1777008528";import{e as We,g as re}from"./index3.js?v=1777008528";import{o as Xe}from"./useController13.js?v=1777008528";import"./__commonjsHelpers__.js?v=1777008528";import"./index119.js?v=1777008528";import"./index.vue_vue_type_style_index_0_scoped_cdc7f4d3_lang.js?v=1777008528";import"./index116.js?v=1777008528";const Ye={class:"h-full overflow-auto"},et={key:0},tt={class:"flex items-center"},nt={class:"ml-[20px]"},at={class:"flex items-center"},st={class:"p-[20px]"},lt={class:"p-[20px]"},ot=te({__name:"index",setup(G){const c=ue(),{payment:O}=ee(),{siteInfo:o}=ge(),{authType:k}=O.value,x=i(null),p=i({status:!0}),_=i({title:"限制访问型证书-功能介绍",ps:"提供双向认证证书,可用于限制指定人员访问",source:61,isInstall:!1,desc:["限制指定人员访问","双向认证","内网自签SSL"],height:36,tabImgs:["https://www.bt.cn/Public/new/plugin/introduce/site/ssl_verify_preview.png"]}),C=[{label:"全部",value:0},{label:"正常",value:1},{label:"已撤销",value:-1}],U=X([{label:"使用者",prop:"client"},{label:"公司名称",prop:"company"},{label:"到期时间",width:220,render:t=>{if(t.day){let e=t.addtime+t.day*24*60*60;return a("span",null,[Ae(e,"yyyy-mm-dd"),E("(剩余"),t.day,E("天)")])}return"--"}},{label:"状态",render:t=>a("span",null,[t.status===1?"正常":t.status===0?"未知":"已撤销"])},{label:"操作",align:"right",render:t=>t.status!==1?N("span",{},"--"):N("div",[N("span",{class:{hidden:t.status!==1||t.day>30,"mr-[8px]":!0,"bt-link":!0,"cursor-pointer":!0},onClick:async()=>{try{const e=await oe({client:t.client});c.request(e),g()}catch(e){}}},"续签"),N("span",{class:{"mr-[8px]":!0,hidden:t.status!==1,"bt-link":!0,"cursor-pointer":!0},onClick:async()=>{let e=c.load("正在请求下载,请稍后...");try{const d=await Oe({id:t.id});d.status?(window.open("/download?filename="+d.msg,"_blank","noopener,noreferrer"),e.close()):c.error(d.msg)}catch(d){}finally{e.close()}}},"下载"),N("span",{class:{hidden:t.status!==1,"bt-link":!0,"cursor-pointer":!0},onClick:async()=>{$(t)}},"撤销")])}]),R=i([]),B=i(!1),D=i(0),A=i(""),F=i(!1),b=i(!1),m=i(!1),f=Z({company:"",domain:""}),S=Z({client:""}),l=Z({company:[{required:!0,message:"请输入公司名称",trigger:"blur"}],domain:[{required:!0,message:"请输入域名列表",trigger:"blur"}]}),r=async()=>{(await q({loading:"正在生成,请稍后...",request:oe({client:S.client}),message:!0})).status&&H()},$=async t=>{await W({title:"撤销证书【".concat(t.client,"】的访问证书"),content:"撤销颁发的访问证书后,证书将不在可用,是否继续操作?",icon:"warning-filled"}),(await q({loading:"正在撤销,请稍后...",request:Ue({id:t.id}),message:!0})).status&&g()},H=()=>{F.value=!1,S.client=""},L=()=>{var t;b.value=!1,(t=x.value)==null||t.clearValidate()},M=async()=>{await I(),b.value=!0},I=async()=>{try{if(_.value.isInstall||k!=="ltd")return;const t=await He();!t.data.length&&!b.value&&(c.error("请先完善证书配置"),b.value=!0),f.company=t.data[0].company,f.domain=t.data[0].domain,L()}catch(t){}},h=async()=>{await x.value.validate(),(await q({loading:"正在设置,请稍后...",request:Me(f),message:!0})).status&&L()},g=async()=>{var t,e,d;try{B.value=!0;const{data:T}=await Be({status:D.value,search:A.value});if((t=T.msg)!=null&&t.includes("插件不存在")||(e=T.msg)!=null&&e.includes("未购买")||(d=T.msg)!=null&&d.includes("已到期")){try{const{data:y}=await he({sName:"ssl_verify"});p.value.status=y.endtime>-1&&y.setup,k==="ltd"?_.value.isInstall=y.setup?"":!0:_.value.isInstall=!y.setup&&y.endtime>-1?!0:"",_.value.pluginInfo=y}catch(y){}return}p.value.status=!0,R.value=T}catch(T){}finally{B.value=!1}},w=async t=>{const e=await q({loading:"正在设置,请稍后...",request:Ne({siteName:o.value.name,status:t?1:0}),message:!0});m.value=e.status?t:!t,e.status&&(m.value=t,ne(),g())},ne=async()=>{let t=c.load("正在获取状态,请稍后...");try{(await ze()).data.forEach(d=>{d.name===o.value.name&&(m.value=d.ssl_verify)})}catch(e){}finally{t.close()}};return de(async()=>{await g(),await I(),p.value.status&&await ne()}),(t,e)=>{var le;const d=_e,T=Re,y=we,ve=Ve,be=ce,J=ke,K=$e,ae=Le,se=De,ye=fe,xe=qe,Ce=pe("bt-loading");return V(),z("div",Ye,[(le=n(p))!=null&&le.status?(V(),z("div",et,[a(ye,null,{"header-left":s(()=>[v("div",tt,[a(d,{onClick:e[0]||(e[0]=u=>F.value=!0),type:"primary"},{default:s(()=>[...e[9]||(e[9]=[E("生成证书",-1)])]),_:1}),v("div",nt,[e[10]||(e[10]=E(" 双向认证开关 ",-1)),a(T,{modelValue:n(m),"onUpdate:modelValue":e[1]||(e[1]=u=>P(m)?m.value=u:null),onChange:w},null,8,["modelValue"])])])]),"header-right":s(()=>[v("div",at,[a(y,{type:"button",modelValue:n(D),"onUpdate:modelValue":e[2]||(e[2]=u=>P(D)?D.value=u:null),options:C,onChange:g,class:"mr-[1rem] !flex-nowrap"},null,8,["modelValue"]),a(ve,{class:"ml-[12px] w-[16rem]",modelValue:n(A),"onUpdate:modelValue":e[3]||(e[3]=u=>P(A)?A.value=u:null),onSearch:g,placeholder:"请输入使用者"},null,8,["modelValue"])])]),content:s(()=>[me(a(be,{column:n(U),data:n(R)},null,8,["column","data"]),[[Ce,n(B)]])]),"footer-left":s(()=>[a(d,{type:"default",onClick:M},{default:s(()=>[...e[11]||(e[11]=[E("证书配置",-1)])]),_:1})]),"footer-right":s(()=>[...e[12]||(e[12]=[])]),popup:s(()=>[a(se,{title:"生成证书",modelValue:n(F),"onUpdate:modelValue":e[5]||(e[5]=u=>P(F)?F.value=u:null),area:42,showFooter:"",onCancel:H,onConfirm:r},{default:s(()=>[v("div",st,[a(ae,{model:n(S),ref:"generateFormRef"},{default:s(()=>[a(K,{label:"使用者"},{default:s(()=>[a(J,{modelValue:n(S).client,"onUpdate:modelValue":e[4]||(e[4]=u=>n(S).client=u),placeholder:"请输入使用者(如“研发部-张三”)",width:"24rem"},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])])]),_:1},8,["modelValue"]),a(se,{title:"证书配置",modelValue:n(b),"onUpdate:modelValue":e[8]||(e[8]=u=>P(b)?b.value=u:null),area:42,showFooter:"",onConfirm:h},{default:s(()=>[v("div",lt,[a(ae,{model:n(f),ref_key:"certFormRef",ref:x,rules:n(l)},{default:s(()=>[a(K,{label:"公司名称",prop:"company"},{default:s(()=>[a(J,{modelValue:n(f).company,"onUpdate:modelValue":e[6]||(e[6]=u=>n(f).company=u),placeholder:"请输入公司名称",width:"24rem"},null,8,["modelValue"])]),_:1}),a(K,{label:"使用者",prop:"domain"},{default:s(()=>[a(J,{type:"textarea",resize:"none",rows:6,modelValue:n(f).domain,"onUpdate:modelValue":e[7]||(e[7]=u=>n(f).domain=u),placeholder:"请输入域名列表,多个域名可以用英文状态下的逗号隔开",width:"24rem"},null,8,["modelValue"])]),_:1})]),_:1},8,["model","rules"])])]),_:1},8,["modelValue"])]),_:1}),e[13]||(e[13]=v("ul",{class:"list-disc mt-[20px] pl-[28px]"},[v("li",null,"双向认证仅支持【HTTPS访问】,如需全站设置,还需通过网站设置开启【强制HTTPS】."),v("li",null,"给网站开启【双向认证】,开启后用户需要将【证书】导入到浏览器后才能访问该网站(目前支持Nginx/Apache)")],-1))])):(V(),j(xe,{key:1,data:n(_),class:"!px-[20px] !pt-[8px]"},null,8,["data"]))])}}}),rt={class:"relative"},ie=te({__name:"index",props:{tabActive:{default:"encryptedAccess"},compData:{default:()=>({})}},setup(G){const c=G,{plugin:O}=ee(),{siteInfo:o}=ge(),k=ue(),x=i(),p=i(!1),_=i([]),C=i(!1),U=()=>[{label:"删除加密访问",value:"delete",event:async(l,r,$,H,L)=>{var I;await W({title:"批量删除加密访问规则",content:"批量删除选中的加密访问规则,该操作可能会存在风险,是否继续?"});let M=k.load("正在删除,请稍后...");try{const h=await Je({site_id:o.value.id,names:$.value.map(w=>w.name)});let g=(I=h.data.success)==null?void 0:I.map(w=>({name:w,status:!0}));Object.keys(h.data.error).forEach(w=>{g.push({name:w,status:!1,msg:h.data.error[w]})}),Xe({resultData:g,resultTitle:"删除加密访问规则"}),m(),L()}catch(h){}finally{M.close()}}}],R=()=>X([We(),{label:"加密访问",prop:"site_dir"},{label:"名称",prop:"name"},{label:"用户",prop:"user_list",render:l=>l.user_list.join(",")},re([{onClick:A,title:"编辑"},{onClick:D,title:"删除"}])]),B=()=>X([{label:"名称",prop:"name"},{label:"保护的目录",prop:"dir"},{label:"规则",prop:"suffix"},re([{onClick:A,title:"编辑"},{onClick:D,title:"删除"}])]),D=async l=>{let r=c.tabActive==="encryptedAccess";await W({title:"删除".concat(r?"加密":"禁止","访问规则【").concat(l.name,"】"),content:"删除选中的规则后,".concat(r?"访问".concat(l.site_dir,"将不再需要安全验证,"):"该保护目录将失去防护,","是否继续操作?"),icon:"warning-filled",type:"calc"}),(await q({loading:"正在删除,请稍后...",request:r?je({id:o.value.id,name:l.name}):Ge({website:o.value.name,deny_name:l.name}),message:!0})).status&&m()},A=l=>{const r=c.tabActive==="encryptedAccess";Fe({isAsync:!0,title:"".concat(l?"编辑":"添加").concat(r?"加密访问":"禁止访问"),area:r&&l?58:46,showFooter:!(r&&l),compData:{...l,id:o.value.id,website:o.value.name,refresh:m},component:()=>r?l?Q(()=>import("./edit-pass-limit.js?v=1777008528"),__vite__mapDeps([]),import.meta.url):Q(()=>import("./add-pass-limit.js?v=1777008528"),__vite__mapDeps([]),import.meta.url):Q(()=>import("./add-forbid-limit.js?v=1777008528"),__vite__mapDeps([]),import.meta.url)})},F=async()=>{q({loading:p,request:Ke({website:o.value.name}),data:[Array,_]})},b=async()=>{try{p.value=!0;const l=await Qe({id:o.value.id});_.value=l.data[o.value.name]}catch(l){}finally{p.value=!1}},m=()=>{c.tabActive==="encryptedAccess"?b():c.tabActive==="forbidAccess"&&F()},f=c.tabActive==="encryptedAccess"?R():B(),S=U();return de(()=>{O.value.webserver!="nginx"?(k.error("不支持nginx之外的服务器!"),C.value=!0):(C.value=!1,m())}),(l,r)=>{const $=Ze,H=_e,L=ce,M=Se,I=fe,h=pe("bt-loading");return V(),z("div",rt,[n(C)?(V(),j($,{key:0},{content:s(()=>[...r[1]||(r[1]=[v("div",{class:"content-mask"},[v("i",{class:"svgtofont-el-warning text-warning !text-subtitleLarge mr-4px"}),E(" 不支持nginx之外的服务器 ")],-1)])]),_:1})):Y("",!0),a(I,null,{"header-left":s(()=>[a(H,{type:"primary",onClick:r[0]||(r[0]=g=>A())},{default:s(()=>[E("添加"+Pe(c.tabActive==="encryptedAccess"?"加密":"禁止")+"访问",1)]),_:1})]),"header-right":s(()=>[...r[2]||(r[2]=[])]),content:s(()=>[me(a(L,{column:n(f),ref_key:"encryptedAccessRef",ref:x,data:n(_)},null,8,["column","data"]),[[h,n(p)]])]),"footer-left":s(()=>[c.tabActive==="encryptedAccess"?(V(),j(M,{key:0,"table-ref":n(x),options:n(S)},null,8,["table-ref","options"])):Y("",!0)]),_:1})])}}}),it=te({__name:"index",setup(G){const{adHideInfo:c,enterpriseRec:O}=ee(),o=i("encryptedAccess"),{BtTabs:k}=Ie({type:"card",value:o,options:[{label:"加密访问",lazy:!0,name:"encryptedAccess",render:a(ie,{tabActive:"encryptedAccess"},null)},{label:"禁止访问",lazy:!0,name:"forbidAccess",render:a(ie,{tabActive:"forbidAccess"},null)},...O.value&&!c.value.siteConfigAuth?[{label:()=>a("span",{innerHTML:'<span class="inline-flex items-center">\n								<i\n									class="svgtofont-icon-ltd text-medium text-ltd mr-[4px] inline-flex"></i>\n								双向认证 <span class="text-warning">【推荐】</span></span\n							>'},null),lazy:!0,name:"addBatch",render:a(ot,null,null)}]:[]]}),x=i([{content:"目录设置加密访问后,访问时需要输入账号密码才能访问"},{content:"例如我设置了加密访问 /test/ ,那我访问 http://aaa.com/test/ 时就要输入账号密码才能访问"}]),p=i([{content:"后缀:禁止访问的文件后缀"},{content:"目录:规则会在这个目录内生效"}]);return(_,C)=>{const U=Te;return V(),z("div",null,[a(n(k),{type:"card",modelValue:n(o),"onUpdate:modelValue":C[0]||(C[0]=R=>P(o)?o.value=R:null)},null,8,["modelValue"]),["encryptedAccess","forbidAccess"].includes(n(o))?(V(),j(U,{key:0,options:n(o)==="encryptedAccess"?n(x):n(p),class:"ml-[20px] mt-[20px]"},null,8,["options"])):Y("",!0)])}}}),At=Ee(it,[["__scopeId","data-v-83b46e39"]]);export{At as default};
function __vite__mapDeps(indexes) {
  if (!__vite__mapDeps.viteFileDeps) {
    __vite__mapDeps.viteFileDeps = []
  }
  return indexes.map((i) => __vite__mapDeps.viteFileDeps[i])
}