live-sfu-demo/internal/server/static/assets/login-DJYZscrt.js

1 line
7.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import{C as e,G as t,L as n,N as r,O as i,S as a,U as o,V as s,_ 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 _,r as v,t as y,u as b,x,z as S}from"./ui-BjxGELcM.js";import{t as C}from"./log-out-BYvt6A8x.js";import{t as w}from"./radio-tower-Dfdb9MI0.js";import{t as T}from"./shield-check-CU6M0J1d.js";import{i as E,n as D}from"./index-BsK239Bd.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=>n(c,t(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=>n(c,t(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 t=E(),[i,c]=o(`login`),[x,O]=o(``),[A,B]=o(``),[V,H]=o(`viewer`),[U,W]=o(``),[G,K]=o(!1),q=()=>i()===`register`,J=()=>_.isAdminOrAbove();S(()=>{h.user()&&!h.user()?.username&&p()});let Y=async e=>{if(e.preventDefault(),W(``),!x().trim()||!A().trim()){W(`用户名与密码必填`);return}K(!0);try{if(q()){let e=V(),t=J()?e:`viewer`;e!==t&&H(`viewer`),await f.register(x().trim(),A(),t)}else await f.login(x().trim(),A());if(await p(),await _.refresh(),_.isBanned()||h.status()===`banned`){W(`账号已被封禁,请联系管理员解封`);return}t({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 t=z(),i=t.firstChild.nextSibling;return a(i,n(u,{get children(){var t=R(),i=t.firstChild,o=i.firstChild.firstChild,u=o.nextSibling.firstChild,f=i.nextSibling,p=f.firstChild,S=p.nextSibling,E=f.nextSibling,z=E.firstChild;z.firstChild;var W=z.nextSibling;return W.firstChild,a(t,n(m,{}),i),a(o,n(w,{class:`size-5`})),a(u,()=>q()?`注册`:`登录`),a(i,n(r,{get when(){return _.isAuthed()},get children(){return n(g,{variant:`outline`,class:`gap-1`,get children(){return[n(T,{class:`size-3`}),e(()=>h.user()?.username),` · `,e(()=>_.role())]}})}}),null),a(t,n(r,{get when(){return _.isAuthed()},get children(){return n(y,{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,a(e,()=>h.user()?.username,t),a(e,()=>_.role(),n),e})(),n(v,{variant:`ghost`,class:`h-7 text-xs`,onClick:X,get children(){return[n(C,{class:`size-3`}),`退出`]}})]}})}}),f),p.$$click=()=>c(`login`),S.$$click=()=>c(`register`),E.addEventListener(`submit`,Y),a(z,n(d,{id:`login-username`,get value(){return x()},onInput:O,placeholder:`admin`,autoComplete:`username`,class:`h-10`}),null),a(W,n(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),a(E,n(r,{get when(){return q()},get children(){var e=P(),t=e.firstChild;t.firstChild.nextSibling;var i=t.nextSibling;return a(t,n(r,{get when(){return!J()},get children(){return N()}}),null),a(e,n(b,{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),a(i,()=>J()?`管理员可直接创建 publisher/admin 账号;普通游客仅可注册 viewer。root 不可通过注册获得。`:`注册即得 viewer;如需发布权限,请联系管理员分配。`),e}}),null),a(E,n(v,{type:`submit`,get disabled(){return G()},class:`h-10 w-full`,get children(){return[n(r,{get when(){return q()},get fallback(){return n(k,{class:`size-4`})},get children(){return n(j,{class:`size-4`})}}),e(()=>e(()=>!!G())()?q()?`注册中…`:`登录中…`:q()?`注册`:`登录`)]}}),null),a(E,n(r,{get when(){return!q()},get children(){return F()}}),null),a(t,n(r,{get when(){return U()},get children(){return n(y,{get tone(){return U().includes(`封禁`)?`warning`:`error`},class:`mt-4 flex items-start gap-2`,get children(){return[n(r,{get when(){return U().includes(`封禁`)},get fallback(){return n(T,{class:`size-4 shrink-0`})},get children(){return n(D,{class:`size-4 shrink-0`})}}),(()=>{var e=I();return a(e,U),e})()]}})}}),null),a(t,n(r,{get when(){return _.isBanned()},get children(){return n(y,{tone:`error`,class:`mt-4`,get children(){var e=L(),t=e.firstChild;return a(e,n(D,{class:`size-4`}),t),e}})}}),null),s(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&&l(p,e.e=t),n!==e.t&&l(S,e.t=n),e},{e:void 0,t:void 0}),t}})),t})()};x([`click`]);export{B as Login};