mirror of
https://gitee.com/mirrors/AllinSSL.git
synced 2026-03-07 23:31:10 +08:00
2 lines
12 KiB
JavaScript
2 lines
12 KiB
JavaScript
import{r as e,f as a,g as t,c as l,o as s,b as r,N as n,B as i,j as u,a7 as d,i as o,k as c,x as v,l as m,aN as p,a1 as y,n as f,q as g,m as h,y as _,z as b,d as x,a as C}from"./main-DorqzikP.js";import{u as w,E as k}from"./index-Ba9GG_-7.js";import{u as S,b as z,a as A}from"./index-DvYuWcNS.js";import{g as I,a as N,d as L,b as j,c as P}from"./ca-nl6jRUSL.js";import{N as U}from"./Flex-9ufLU0NO.js";import{B as E}from"./index-BD4ZqnpR.js";const{handleError:T}=S(),V=()=>{const a=e([]);return{intermediateCaList:a,fetchLeafCertList:async e=>{try{const{data:a,count:t}=await N(e).fetch();return{list:a||[],total:t}}catch(a){return T(a),{list:[],total:0}}},getIntermediateCaList:async()=>{var e;try{const{fetch:t,data:l}=I({p:"-1",limit:"-1",level:"intermediate"});if(await t(),!0===(null==(e=l.value)?void 0:e.status))return a.value=l.value.data,l.value.data}catch(t){}}}};function D(e){return"function"==typeof e||"[object Object]"===Object.prototype.toString.call(e)&&!o(e)}const{handleError:$}=S(),O=t=>{const{handleError:s}=S(),{confirm:u}=b(),{useFormInput:d,useFormSelect:o,useFormCustom:x}=m(),C=e({usage:"1",algorithm:"",valid_days:"",cn:"",san:""}),w=e("day"),k=e("dns_names"),A=e(""),I=e([]),N=[{label:"服务器证书",value:"1"},{label:"客户端证书",value:"2"},{label:"邮件证书",value:"4"}],L=[{label:"DNS名称",value:"dns_names"},{label:"IP地址",value:"ip_addresses"},{label:"邮箱地址",value:"email_addresses"}],j=c(()=>(e=>{switch(e){case"ecdsa":return[{label:"P-256 (256 bit)",value:256},{label:"P-384 (384 bit)",value:384},{label:"P-521 (521 bit)",value:521}];case"rsa":return[{label:"2048 bit",value:2048},{label:"3072 bit",value:3072},{label:"4096 bit",value:4096}];case"sm2":return[{label:"SM2 (256 bit)",value:256}];default:return[]}})(C.value.algorithm)),E=()=>{if(!A.value.trim())return void a().warning("请输入主题备用名称");if(I.value.find(e=>e.type===k.value&&e.value===A.value.trim()))return void a().warning("该值已存在,请勿重复添加");let e=!0,t="";switch(k.value){case"dns_names":e=/^(\*\.)?[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(A.value),e||(t="DNS名称格式不正确,支持格式:example.com 或 *.example.com");break;case"ip_addresses":e=/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(A.value),e||(t="IP地址格式不正确,请输入有效的IPv4地址");break;case"email_addresses":e=/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(A.value),e||(t="邮箱地址格式不正确,请输入有效的邮箱地址")}e?(I.value.push({type:k.value,value:A.value.trim()}),A.value="",V()):a().error(t)},T=e=>{I.value[e]&&(I.value.splice(e,1),V())},V=()=>{const e=I.value.filter(e=>"dns_names"===e.type).map(e=>e.value),a=I.value.filter(e=>"ip_addresses"===e.type).map(e=>e.value),t=I.value.filter(e=>"email_addresses"===e.type).map(e=>e.value);C.value.san=JSON.stringify({dns_names:e,ip_addresses:a,email_addresses:t})},$=()=>{I.value=[],A.value="",k.value="dns_names",C.value.san=""};v(k,()=>{A.value=""}),v(()=>C.value.san,e=>{e&&e!==C.value.san&&(e=>{if(e)try{const a=JSON.parse(e);I.value=[],a.dns_names&&Array.isArray(a.dns_names)&&a.dns_names.forEach(e=>{e&&e.trim()&&I.value.push({type:"dns_names",value:e.trim()})}),a.ip_addresses&&Array.isArray(a.ip_addresses)&&a.ip_addresses.forEach(e=>{e&&e.trim()&&I.value.push({type:"ip_addresses",value:e.trim()})}),a.email_addresses&&Array.isArray(a.email_addresses)&&a.email_addresses.forEach(e=>{e&&e.trim()&&I.value.push({type:"email_addresses",value:e.trim()})})}catch(a){I.value=[]}else I.value=[]})(e)},{immediate:!0});const O=c(()=>{var e;return[o("中间CA","ca_id",t.map(e=>({label:e.name,value:e.id.toString()})),{placeholder:"请选择中间CA",onUpdateValue:e=>{const a=t.find(a=>a.id.toString()===e);a&&(C.value.ca_id=e,C.value.algorithm=a.algorithm,C.value.key_length=a.key_length)}}),x(()=>{let e;return l(f,{label:"证书用途"},{default:()=>[l(p,{value:C.value.usage,"onUpdate:value":e=>C.value.usage=e,onUpdateValue:e=>{k.value="1"===e?"dns_names":"email_addresses",$()}},D(e=N.map(e=>l(y,{key:e.value,value:e.value},{default:()=>[e.label]})))?e:{default:()=>[e]})]})}),d("算法","algorithm",{value:(C.value.algorithm||"").toUpperCase(),disabled:!0,placeholder:"请选择中间CA"}),o("密钥长度","key_length",j.value,{placeholder:"请选择密钥长度",value:null==(e=C.value)?void 0:e.key_length,onUpdateValue:e=>{C.value.key_length=e}}),x(()=>l(f,{label:"有效期",required:!0,path:"valid_days"},{default:()=>[l(U,{wrap:!1,align:"center",size:"small",class:"flex-1"},{default:()=>[l(g,{value:C.value.valid_days,"onUpdate:value":e=>C.value.valid_days=e,placeholder:"请输入有效期"},null),l(h,{value:w.value,"onUpdate:value":e=>w.value=e,options:[{label:"天",value:"day"},{label:"年",value:"year"}],style:{width:"80px"}},null)]})]})),d("通用名称","cn",{placeholder:"请输入通用名称,如:example.com",onUpdateValue:e=>{C.value.cn=e}},{required:"2"===C.value.usage}),x(()=>l(f,{label:"主题备用名称 (SAN)"},{default:()=>[l("div",{class:"w-full"},[l(U,{align:"center",size:"small",class:"mb-3"},{default:()=>[l(g,{value:A.value,"onUpdate:value":e=>A.value=e,placeholder:"请输入主题备用名称",class:"flex-1",onKeydown:e=>{"Enter"===e.key&&(e.preventDefault(),E())}},null),l(h,{value:k.value,"onUpdate:value":e=>k.value=e,options:[{label:"IP地址",value:"ip_addresses",disabled:"1"!==C.value.usage},{label:"DNS名称",value:"dns_names",disabled:"1"!==C.value.usage},{label:"邮箱地址",value:"email_addresses",disabled:"1"===C.value.usage}],style:{width:"160px"}},null),l(i,{type:"primary",onClick:E,disabled:!A.value.trim()},{default:()=>[r("添加")]})]}),I.value.length>0&&l("div",{class:"flex flex-wrap gap-2"},[I.value.map((e,a)=>l(n,{key:`${e.type}-${a}`,type:"info",closable:!0,class:"mb-2",onClose:()=>T(a)},{default:()=>[l(U,{align:"center",size:"small"},{default:()=>{var a;return[l("span",{class:"text-xl text-gray-500 mr-1"},[null==(a=L.find(a=>a.value===e.type))?void 0:a.label]),l("span",null,[e.value])]}})]}))])])]}))]}),{component:M,data:q,fetch:F}=_({config:O,defaultValue:C.value,request:async e=>{var t;const{open:l,close:r}=z({text:"正在创建,请稍后...",zIndex:3e3});try{l();const{message:s,fetch:r,data:n}=P(e);return s.value=!0,await r(),(null==(t=n.value)?void 0:t.status)?(a().success(n.value.message),$(),{success:!0,data:n.value}):(a().error(n.value.message||"创建失败"),!1)}catch(n){s(n)}finally{r()}},rules:{ca_id:{required:!0,message:"请选择中间CA",trigger:"blur"},valid_days:[{validator:(e,a)=>{if(!a)return new Error("请输入有效期");const t=parseInt(a);return!(isNaN(t)||t<=0)||new Error("有效期必须是大于0的数字")},trigger:"blur"}],cn:{validator:(e,a)=>!!("2"!==C.value.usage||a&&""!==a.trim())||new Error("请输入通用名称"),trigger:"change"}}});return u(async e=>{try{if("year"===w.value&&q.value.valid_days){const e=parseInt(q.value.valid_days);isNaN(e)||(q.value.valid_days=(365*e).toString())}V();await F()&&e()}catch(a){s(a)}}),{CreateLeafCertForm:M,data:q,loading:c(()=>!1),fetch:F,sanType:k,sanInputValue:A,sanList:I,sanTypeOptions:L,addSanInput:E,removeSanInput:T,validityUnit:w}},M=x({name:"PrivateCaCert",setup(){const{TableComponent:e,PageComponent:o,SearchComponent:c,getRowClassName:v,openCreateLeafCertModal:m,handleCaIdChange:p}=(()=>{const{intermediateCaList:e,fetchLeafCertList:o,getIntermediateCaList:c}=V();a();const v=e=>{const a=(e=>{const a=new Date(e),t=new Date,l=a.getTime()-t.getTime();return Math.ceil(l/864e5)})(e);return a>30?{type:"success",text:"正常"}:a>0?{type:"warning",text:"即将过期"}:0===a?{type:"warning",text:"今天到期"}:{type:"error",text:"已过期"}},{TableComponent:m,PageComponent:p,loading:y,param:f,data:g,fetch:h}=t({config:[{title:"名称",key:"cn",width:250,render:e=>{const a=(e=>{try{const a=JSON.parse(e),t=[...a.dns_names||[],...a.ip_addresses||[],...a.email_addresses||[]].filter(e=>e&&""!==e.trim());return 0===t.length?null:t.join(", ")}catch{return e&&""!==e.trim()?e:null}})(e.san);return l("div",{class:"flex flex-col"},[l("div",{class:"text-gray-900"},[e.cn]),a&&l("div",{class:"text-xl text-gray-500"},[r("SAN: "),a])])}},{title:"证书用途",key:"usage",width:120,render:e=>{let a;return l(n,{size:"small"},D(a=(e=>{switch(e){case 1:return"服务器证书";case 2:return"客户端证书";case 4:return"邮件证书";default:return`未知用途(${e})`}})(e.usage))?a:{default:()=>[a]})}},{title:"颁发者",key:"parentId",width:100,render:e=>l("div",null,[e.ca_cn])},{title:"算法",key:"algorithm",width:120,render:e=>{let a;return l(n,{size:"small"},D(a=e.algorithm.toUpperCase())?a:{default:()=>[a]})}},{title:"有效期",key:"not_after",width:200,render:e=>{const a=(e=>{const a=new Date(e),t=new Date,l=a.getTime()-t.getTime();return Math.ceil(l/864e5)})(e.not_after);let t="",s="";return a>0?a<=30?(t=`${a} 天后`,s="text-orange-500"):(t=`${a} 天后`,s="text-gray-500"):0===a?(t="今天到期",s="text-orange-500"):(t=`已过期 ${Math.abs(a)} 天`,s="text-red-500"),l("div",{class:"flex flex-col"},[l("div",{class:"text-gray-900"},[e.not_after]),l("div",{class:`text-xl ${s}`},[t])])}},{title:"状态",key:"status",width:100,render:e=>{const a=v(e.not_after);return l(n,{type:a.type,size:"small"},{default:()=>[a.text]})}},{title:"创建时间",key:"not_before",width:150},{title:"操作",key:"actions",fixed:"right",align:"right",width:200,render:e=>l(U,{justify:"end"},{default:()=>[l(i,{size:"tiny",strong:!0,secondary:!0,type:"primary",onClick:()=>b(e)},{default:()=>[r("下载")]}),l(i,{size:"tiny",strong:!0,secondary:!0,type:"error",onClick:()=>x(e)},{default:()=>[r("删除")]})]})}],request:async e=>await o(e),defaultValue:{p:"1",limit:"20",ca_id:"",search:""},alias:{page:"p",pageSize:"limit"},watchValue:["p","limit","search","ca_id"]}),{SearchComponent:_}=w({onSearch:async e=>{f.value.search=e}}),b=e=>{try{const a=j({id:e.id.toString(),type:"leaf"});window.open(a,"_blank")}catch(a){$(a)}},x=async e=>{const{open:t,close:l}=z({text:"正在删除,请稍后...",zIndex:3e3});A({title:"确认删除",content:`确定要删除证书 "${e.cn}" 吗?此操作不可恢复。`,onPositiveClick:async()=>{var s;try{t();const{message:l,fetch:r,data:n}=L({id:e.id.toString()});l.value=!0,await r(),n.value.status?(a().success(n.value.message),await h()):a().error((null==(s=n.value)?void 0:s.message)||"删除失败")}catch(r){$(r)}finally{l()}}})};return s(()=>{h()}),{loading:y,TableComponent:m,PageComponent:p,SearchComponent:_,getRowClassName:e=>{const a=v(e.not_after);return"error"===a.type?"bg-red-500/10":"warning"===a.type?"bg-orange-500/10":""},handleDownload:b,handleDelete:x,openCreateLeafCertModal:async()=>{try{await c(),u({title:"签发私有证书",area:700,component:()=>d(()=>import("./CreateLeafCertForm-DWDfv2Ti.js"),[],import.meta.url).then(e=>e.default),footer:!0,componentProps:{list:e.value},onUpdateShow:e=>{e||h()}})}catch(a){$(a)}},fetch:h,handleCaIdChange:e=>{f.value.ca_id=e||""}}})(),{intermediateCaList:y,getIntermediateCaList:f}=V(),g=C(["contentPadding","borderColor","headerHeight","iconColorHover"]);return s(async()=>{await f()}),()=>l("div",{class:"h-full flex flex-col",style:g.value},[l("div",{class:"mx-auto max-w-[1600px] w-full p-6"},[l(E,null,{headerLeft:()=>l(i,{type:"primary",size:"large",class:"px-5",onClick:m},{default:()=>[r("签发证书")]}),headerRight:()=>l("div",{class:"flex items-center gap-2 flex-1"},[l(h,{options:[{label:"全部",value:""},...y.value.map(e=>({label:e.name,value:e.id}))],placeholder:"请选择中间证书",size:"large",style:{width:"180px"},defaultValue:"",onUpdateValue:p},null),l(c,{placeholder:"请输入名称搜索",style:{width:"240px"}},null)]),content:()=>l("div",{class:"rounded-lg"},[l(e,{size:"medium",rowClassName:v},{empty:()=>l(k,{addButtonText:"签发证书",onAddClick:m},null)})]),footerRight:()=>l("div",{class:"mt-4 flex justify-end"},[l(o,null,null)])})])])}}),q=Object.freeze(Object.defineProperty({__proto__:null,default:M},Symbol.toStringTag,{value:"Module"}));export{q as i,O as u};
|