astrion-website/demo/static/dist/assets/SecondaryGate.js

2 lines
3.5 KiB
JavaScript

import{k as l,d as p,b as c,c as r,p as b,g as s,t as i,f as y,h,j as m,z as g}from"./runtime-dom.esm-bundler.js";import{_ as k}from"./_plugin-vue_export-helper.js";function G(){const e=l(!1),u=l(!0),o=l(!1),n=l(null);return{verified:e,configured:u,loading:o,error:n,check:async()=>{o.value=!0,n.value=null;try{const t=await fetch("/api/admin/secondary/status",{credentials:"same-origin"});if(!t.ok)throw new Error(`状态请求失败:${t.status}`);const a=await t.json();e.value=!!a.verified,u.value=a.configured!==!1}catch(t){n.value=t.message||"无法验证二级密码状态"}finally{o.value=!1}},verify:async t=>{o.value=!0,n.value=null;try{const a=await fetch("/api/admin/secondary/verify",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify({password:t})}),d=await a.json();if(!a.ok||!d.success)throw new Error(d.error||"二级密码验证失败");e.value=!0}catch(a){n.value=a.message||"验证失败",e.value=!1}finally{o.value=!1}}}}const w={class:"secondary-overlay"},q={key:0,class:"secondary-card secondary-card--guide"},S={class:"secondary-actions"},C=["disabled"],j={key:0,class:"secondary-error"},x={key:1,class:"secondary-card"},B={class:"muted"},_=["disabled"],$={class:"secondary-actions"},N=["disabled"],V=["disabled"],E={key:0,class:"secondary-error"},T=p({__name:"SecondaryGate",props:{configured:{type:Boolean},loading:{type:Boolean},error:{},description:{default:"为保护敏感数据,需二级校验后查看。"}},emits:["verify","recheck"],setup(e,{emit:u}){const o=e,n=u,f=l(""),v=()=>{o.loading||n("verify",f.value)};return(t,a)=>(c(),r("div",w,[e.configured?(c(),r("div",x,[a[4]||(a[4]=s("h3",null,"请输入管理员二级密码",-1)),s("p",B,i(e.description),1),h(s("input",{class:"secondary-input",type:"password","onUpdate:modelValue":a[1]||(a[1]=d=>f.value=d),disabled:e.loading,placeholder:"二级密码",onKeyup:g(v,["enter"])},null,40,_),[[m,f.value]]),s("div",$,[s("button",{type:"button",disabled:e.loading,onClick:v},i(e.loading?"校验中...":"确认进入"),9,N),s("button",{type:"button",class:"ghost-btn",disabled:e.loading,onClick:a[2]||(a[2]=d=>t.$emit("recheck"))}," 重新检测 ",8,V)]),e.error?(c(),r("p",E,i(e.error),1)):y("",!0)])):(c(),r("div",q,[a[3]||(a[3]=b('<h3 data-v-8ef6b7ca>尚未设置二级密码</h3><p class="muted" data-v-8ef6b7ca> 管理面板的敏感操作(邀请码、密码管理、策略配置等)由二级密码保护。 当前服务端尚未配置二级密码,请先完成设置: </p><ol class="guide-steps" data-v-8ef6b7ca><li data-v-8ef6b7ca><span class="step-text" data-v-8ef6b7ca>在服务器上生成密码哈希:</span><code class="step-code" data-v-8ef6b7ca>python3 -c &quot;from werkzeug.security import generate_password_hash; print(generate_password_hash(&#39;你的二级密码&#39;))&quot;</code></li><li data-v-8ef6b7ca><span class="step-text" data-v-8ef6b7ca>将输出写入 settings.json 的 <code data-v-8ef6b7ca>admin</code> 段:</span><code class="step-code" data-v-8ef6b7ca>&quot;admin&quot;: { &quot;secondary_password_hash&quot;: &quot;pbkdf2:sha256:...&quot; }</code></li><li data-v-8ef6b7ca><span class="step-text" data-v-8ef6b7ca>重启服务,然后点击下方「重新检测」。</span></li></ol>',3)),s("div",S,[s("button",{type:"button",disabled:e.loading,onClick:a[0]||(a[0]=d=>t.$emit("recheck"))},i(e.loading?"检测中...":"重新检测"),9,C)]),e.error?(c(),r("p",j,i(e.error),1)):y("",!0)]))]))}}),K=k(T,[["__scopeId","data-v-8ef6b7ca"]]);export{K as S,G as u};