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