1 line
7.0 KiB
JavaScript
1 line
7.0 KiB
JavaScript
import{B as e,C as t,E as n,H as r,I as i,J as a,K as o,T as s,W as c,b as l,c as u,d,g as f,h as p,i as m,j as h,m as g,n as _,p as v,r as y,t as b,u as x,w as S}from"./ui-CBKBDzcl.js";import{t as C}from"./radio-tower-DcOqbcos.js";import{t as w}from"./shield-check-CMgIbfEy.js";import{a as T,r as E,t as D}from"./index-Cfr72k3j.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=t=>e(l,a(t,{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=t=>e(l,a(t,{iconNode:A,name:`user-plus`})),M=h(`<span class=text-xs>已登录为 <!>(<!>)`),N=h(`<span class="text-[10px] text-warning">游客仅可注册观看者`),P=h(`<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=h(`<p class="text-center text-xs text-muted-foreground">首次部署?配置 <code class=font-mono>BOOTSTRAP_ADMIN_USER/PASS</code> 自动创建超管,或通过注册创建 viewer 后由超管提权。`),I=h(`<span class=text-sm>`),L=h(`<span class="flex items-center gap-2 text-xs">当前账号状态为 banned,登录后部分接口将返回 403,刷新令牌亦会失效。`),R=h(`<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=h(`<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 a=T(),[l,h]=o(`login`),[S,O]=o(``),[A,B]=o(``),[V,H]=o(`viewer`),[U,W]=o(``),[G,K]=o(!1),q=()=>l()===`register`,J=()=>v.isAdminOrAbove();r(()=>{g.user()&&!g.user()?.username&&p()});let Y=async e=>{if(e.preventDefault(),W(``),!S().trim()||!A().trim()){W(`用户名与密码必填`);return}K(!0);try{if(q()){let e=V(),t=J()?e:`viewer`;e!==t&&H(`viewer`),await f.register(S().trim(),A(),t)}else await f.login(S().trim(),A());if(await p(),await v.refresh(),v.isBanned()||g.status()===`banned`){W(`账号已被封禁,请联系管理员解封`);return}a({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{}g.setUser(null),v.setCheck(null),await p(),await v.refresh()};return(()=>{var r=z(),a=r.firstChild.nextSibling;return s(a,e(u,{get children(){var r=R(),a=r.firstChild,o=a.firstChild.firstChild,l=o.nextSibling.firstChild,u=a.nextSibling,f=u.firstChild,p=f.nextSibling,T=u.nextSibling,z=T.firstChild;z.firstChild;var W=z.nextSibling;return W.firstChild,s(r,e(m,{}),a),s(o,e(C,{class:`size-5`})),s(l,()=>q()?`注册`:`登录`),s(a,e(i,{get when(){return v.isAuthed()},get children(){return e(_,{variant:`outline`,class:`gap-1`,get children(){return[e(w,{class:`size-3`}),n(()=>g.user()?.username),` · `,n(()=>v.role())]}})}}),null),s(r,e(i,{get when(){return v.isAuthed()},get children(){return e(b,{tone:`success`,class:`mt-4 flex items-center justify-between gap-3`,get children(){return[(()=>{var e=M(),t=e.firstChild.nextSibling,n=t.nextSibling.nextSibling;return n.nextSibling,s(e,()=>g.user()?.username,t),s(e,()=>v.role(),n),e})(),e(y,{variant:`ghost`,class:`h-7 text-xs`,onClick:X,get children(){return[e(k,{class:`size-3`}),`退出`]}})]}})}}),u),f.$$click=()=>h(`login`),p.$$click=()=>h(`register`),T.addEventListener(`submit`,Y),s(z,e(d,{id:`login-username`,get value(){return S()},onInput:O,placeholder:`admin`,autoComplete:`username`,class:`h-10`}),null),s(W,e(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),s(T,e(i,{get when(){return q()},get children(){var t=P(),n=t.firstChild;n.firstChild.nextSibling;var r=n.nextSibling;return s(n,e(i,{get when(){return!J()},get children(){return N()}}),null),s(t,e(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`}),r),s(r,()=>J()?`管理员可直接创建 publisher/admin 账号;普通游客仅可注册 viewer。root 不可通过注册获得。`:`注册即得 viewer;如需发布权限,请联系管理员分配。`),t}}),null),s(T,e(y,{type:`submit`,get disabled(){return G()},class:`h-10 w-full`,get children(){return[e(i,{get when(){return q()},get fallback(){return e(D,{class:`size-4`})},get children(){return e(j,{class:`size-4`})}}),n(()=>n(()=>!!G())()?q()?`注册中…`:`登录中…`:q()?`注册`:`登录`)]}}),null),s(T,e(i,{get when(){return!q()},get children(){return F()}}),null),s(r,e(i,{get when(){return U()},get children(){return e(b,{get tone(){return U().includes(`封禁`)?`warning`:`error`},class:`mt-4 flex items-start gap-2`,get children(){return[e(i,{get when(){return U().includes(`封禁`)},get fallback(){return e(w,{class:`size-4 shrink-0`})},get children(){return e(E,{class:`size-4 shrink-0`})}}),(()=>{var e=I();return s(e,U),e})()]}})}}),null),s(r,e(i,{get when(){return v.isBanned()},get children(){return e(b,{tone:`error`,class:`mt-4`,get children(){var t=L(),n=t.firstChild;return s(t,e(E,{class:`size-4`}),n),t}})}}),null),c(e=>{var n=`micro-label h-8 border-b-2 px-3 transition-colors ${q()?`border-transparent text-muted-foreground`:`border-acid-lime text-foreground`}`,r=`micro-label h-8 border-b-2 px-3 transition-colors ${q()?`border-acid-lime text-foreground`:`border-transparent text-muted-foreground`}`;return n!==e.e&&t(f,e.e=n),r!==e.t&&t(p,e.t=r),e},{e:void 0,t:void 0}),r}})),r})()};S([`click`]);export{B as Login}; |