1 line
7.0 KiB
JavaScript
1 line
7.0 KiB
JavaScript
import{D as e,E as t,G as n,L as r,M as i,T as a,U as o,V as s,Y as c,b as l,c as u,d,g as f,h as p,i as m,m as h,n as g,p as _,q as v,r as y,t as b,u as x,w as S}from"./ui-CTx2ZrLp.js";import{t as C}from"./radio-tower-Beh88DAK.js";import{t as w}from"./shield-check-OBDPf7l7.js";import{a as T,r as E,t as D}from"./index-LUhOsKYd.js";var O=[[`path`,{d:`m16 17 5-5-5-5`,key:`1bji2h`}],[`path`,{d:`M21 12H9`,key:`dn1m92`}],[`path`,{d:`M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4`,key:`1uf3rs`}]],k=e=>s(l,c(e,{iconNode:O,name:`log-out`})),A=[[`path`,{d:`M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2`,key:`1yyitq`}],[`circle`,{cx:`9`,cy:`7`,r:`4`,key:`nufk8`}],[`line`,{x1:`19`,x2:`19`,y1:`8`,y2:`14`,key:`1bvyxn`}],[`line`,{x1:`22`,x2:`16`,y1:`11`,y2:`11`,key:`1shjgl`}]],j=e=>s(l,c(e,{iconNode:A,name:`user-plus`})),M=i(`<span class=text-xs>已登录为 <!>(<!>)`),N=i(`<span class="text-[10px] text-warning">游客仅可注册观看者`),P=i(`<div class=space-y-2><label class="micro-label flex items-center justify-between text-muted-foreground">角色 <span class=opacity-50>role</span></label><p class="text-[11px] leading-relaxed text-muted-foreground">`),F=i(`<p class="text-center text-xs text-muted-foreground">首次部署?配置 <code class=font-mono>BOOTSTRAP_ADMIN_USER/PASS</code> 自动创建超管,或通过注册创建 viewer 后由超管提权。`),I=i(`<span class=text-sm>`),L=i(`<span class="flex items-center gap-2 text-xs">当前账号状态为 banned,登录后部分接口将返回 403,刷新令牌亦会失效。`),R=i(`<div class="relative border border-line bg-card/70 p-6 backdrop-blur-sm sm:p-8"><div class="flex items-start justify-between gap-3"><div class="flex items-center gap-3"><span class="flex size-10 shrink-0 items-center justify-center border border-acid-lime/70 bg-acid-lime/15 text-acid-lime"></span><div><h1 class="display text-3xl"></h1><p class="micro-label mt-1.5 text-muted-foreground">SyncLive / auth · 双令牌 + Casbin</p></div></div></div><div class="mt-5 flex gap-2 border-b border-line"><button>登录</button><button>注册</button></div><form class="mt-5 space-y-5"><div class=space-y-2><label class="micro-label flex items-center justify-between text-muted-foreground"for=login-username>用户名 <span class=opacity-50>username</span></label></div><div class=space-y-2><label class="micro-label flex items-center justify-between text-muted-foreground"for=login-password>密码 <span class=opacity-50>password · ≥6 位`),z=i(`<div class="relative flex min-h-[calc(100vh-3rem)] items-center justify-center overflow-hidden px-4 py-10"><div class="ghost-text display pointer-events-none absolute -bottom-[7vw] left-1/2 -translate-x-1/2 text-[36vw] leading-none"aria-hidden=true>SYNC</div><div class="relative w-full max-w-md">`),B=()=>{let i=T(),[a,c]=v(`login`),[l,O]=v(``),[A,B]=v(``),[V,H]=v(`viewer`),[U,W]=v(``),[G,K]=v(!1),q=()=>a()===`register`,J=()=>_.isAdminOrAbove();o(()=>{h.user()&&!h.user()?.username&&p()});let Y=async e=>{if(e.preventDefault(),W(``),!l().trim()||!A().trim()){W(`用户名与密码必填`);return}K(!0);try{if(q()){let e=V(),t=J()?e:`viewer`;e!==t&&H(`viewer`),await f.register(l().trim(),A(),t)}else await f.login(l().trim(),A());if(await p(),await _.refresh(),_.isBanned()||h.status()===`banned`){W(`账号已被封禁,请联系管理员解封`);return}i({to:`/`})}catch(e){let t=String(e?.message||e);t.toLowerCase().includes(`banned`)||t.includes(`封禁`)?W(`账号已被封禁,无法登录`):t.includes(`invalid credentials`)||t.includes(`login failed`)?W(`用户名或密码错误`):W(t)}finally{K(!1)}},X=async()=>{try{await f.logout()}catch{}h.setUser(null),_.setCheck(null),await p(),await _.refresh()};return(()=>{var i=z(),a=i.firstChild.nextSibling;return t(a,s(u,{get children(){var i=R(),a=i.firstChild,o=a.firstChild.firstChild,u=o.nextSibling.firstChild,f=a.nextSibling,p=f.firstChild,v=p.nextSibling,T=f.nextSibling,z=T.firstChild;z.firstChild;var W=z.nextSibling;return W.firstChild,t(i,s(m,{}),a),t(o,s(C,{class:`size-5`})),t(u,()=>q()?`注册`:`登录`),t(a,s(r,{get when(){return _.isAuthed()},get children(){return s(g,{variant:`outline`,class:`gap-1`,get children(){return[s(w,{class:`size-3`}),e(()=>h.user()?.username),` · `,e(()=>_.role())]}})}}),null),t(i,s(r,{get when(){return _.isAuthed()},get children(){return s(b,{tone:`success`,class:`mt-4 flex items-center justify-between gap-3`,get children(){return[(()=>{var e=M(),n=e.firstChild.nextSibling,r=n.nextSibling.nextSibling;return r.nextSibling,t(e,()=>h.user()?.username,n),t(e,()=>_.role(),r),e})(),s(y,{variant:`ghost`,class:`h-7 text-xs`,onClick:X,get children(){return[s(k,{class:`size-3`}),`退出`]}})]}})}}),f),p.$$click=()=>c(`login`),v.$$click=()=>c(`register`),T.addEventListener(`submit`,Y),t(z,s(d,{id:`login-username`,get value(){return l()},onInput:O,placeholder:`admin`,autoComplete:`username`,class:`h-10`}),null),t(W,s(d,{id:`login-password`,type:`password`,get value(){return A()},onInput:B,placeholder:`••••••••`,get autoComplete(){return q()?`new-password`:`current-password`},class:`h-10`}),null),t(T,s(r,{get when(){return q()},get children(){var e=P(),n=e.firstChild;n.firstChild.nextSibling;var i=n.nextSibling;return t(n,s(r,{get when(){return!J()},get children(){return N()}}),null),t(e,s(x,{get value(){return V()},onChange:e=>H(e),get options(){return J()?[{value:`viewer`,label:`观看者 viewer`},{value:`publisher`,label:`发布者 publisher`},{value:`admin`,label:`管理员 admin`}]:[{value:`viewer`,label:`观看者 viewer`}]},class:`w-full`}),i),t(i,()=>J()?`管理员可直接创建 publisher/admin 账号;普通游客仅可注册 viewer。root 不可通过注册获得。`:`注册即得 viewer;如需发布权限,请联系管理员分配。`),e}}),null),t(T,s(y,{type:`submit`,get disabled(){return G()},class:`h-10 w-full`,get children(){return[s(r,{get when(){return q()},get fallback(){return s(D,{class:`size-4`})},get children(){return s(j,{class:`size-4`})}}),e(()=>e(()=>!!G())()?q()?`注册中…`:`登录中…`:q()?`注册`:`登录`)]}}),null),t(T,s(r,{get when(){return!q()},get children(){return F()}}),null),t(i,s(r,{get when(){return U()},get children(){return s(b,{get tone(){return U().includes(`封禁`)?`warning`:`error`},class:`mt-4 flex items-start gap-2`,get children(){return[s(r,{get when(){return U().includes(`封禁`)},get fallback(){return s(w,{class:`size-4 shrink-0`})},get children(){return s(E,{class:`size-4 shrink-0`})}}),(()=>{var e=I();return t(e,U),e})()]}})}}),null),t(i,s(r,{get when(){return _.isBanned()},get children(){return s(b,{tone:`error`,class:`mt-4`,get children(){var e=L(),n=e.firstChild;return t(e,s(E,{class:`size-4`}),n),e}})}}),null),n(e=>{var t=`micro-label h-8 border-b-2 px-3 transition-colors ${q()?`border-transparent text-muted-foreground`:`border-acid-lime text-foreground`}`,n=`micro-label h-8 border-b-2 px-3 transition-colors ${q()?`border-acid-lime text-foreground`:`border-transparent text-muted-foreground`}`;return t!==e.e&&S(p,e.e=t),n!==e.t&&S(v,e.t=n),e},{e:void 0,t:void 0}),i}})),i})()};a([`click`]);export{B as Login}; |