(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4520],{50370:(e,t,s)=>{Promise.resolve().then(s.bind(s,83016))},83016:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>n});var a=s(95155),r=s(12115),i=s(35497),l=s(73321);function n(){let[e,t]=(0,r.useState)(""),[s,n]=(0,r.useState)(""),[d,o]=(0,r.useState)(""),[c,x]=(0,r.useState)(0),[u,h]=(0,r.useState)(!1),[m,p]=(0,r.useState)(null),[b,f]=(0,r.useState)("password"),[j,w]=(0,r.useState)(!1),[g,N]=(0,r.useState)("Sign in with OIDC"),v=(0,l.useRouter)();(0,r.useEffect)(()=>{if(c<=0)return;let e=setInterval(()=>x(e=>e>0?e-1:0),1e3);return()=>clearInterval(e)},[c]),(0,r.useEffect)(()=>{!async function(){let e=new AbortController,t=setTimeout(()=>e.abort(),5e3),s=window.location.origin;try{let a=await fetch(`${s}/api/auth/status`,{signal:e.signal});if(clearTimeout(t),a.ok){let e=await a.json();if(!1===e.requireLogin){v.push("/dashboard"),v.refresh();return}p(!!e.hasPassword),f(e.authMode||"password"),w(!0===e.oidcConfigured),N(e.oidcLoginLabel||"Sign in with OIDC")}else p(!0)}catch(e){clearTimeout(t),p(!0)}}()},[v]);let y=async t=>{t.preventDefault(),h(!0),n(""),o("");try{let t=await fetch("/api/auth/login",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({password:e})});if(t.ok)v.push("/dashboard"),v.refresh();else{let e=await t.json();n(e.error||"Invalid password"),e.resetHint&&o(e.resetHint),e.retryAfter&&x(Number(e.retryAfter))}}catch(e){n("An error occurred. Please try again.")}finally{h(!1)}},S=j&&["oidc","both"].includes(b),C="oidc"!==b||!j;return null===m?(0,a.jsx)("div",{className:"min-h-screen flex items-center justify-center bg-bg p-4",children:(0,a.jsxs)("div",{className:"text-center",children:[(0,a.jsx)("div",{className:"inline-block animate-spin rounded-full h-8 w-8 border-b-2 border-primary"}),(0,a.jsx)("p",{className:"text-text-muted mt-4",children:"Loading..."})]})}):(0,a.jsxs)("div",{className:"min-h-screen flex items-center justify-center bg-bg p-4 relative overflow-hidden",children:[(0,a.jsx)("div",{className:"landing-grid absolute inset-0 pointer-events-none","aria-hidden":"true"}),(0,a.jsxs)("div",{className:"relative z-10 w-full max-w-md",children:[(0,a.jsxs)("div",{className:"text-center mb-8",children:[(0,a.jsx)("h1",{className:"text-3xl font-bold text-primary mb-2",children:"9Router"}),(0,a.jsx)("p",{className:"text-text-muted",children:"oidc"===b&&j?"Sign in with your OIDC provider to access the dashboard":"Enter your password to access the dashboard"})]}),(0,a.jsx)(i.Zp,{children:(0,a.jsxs)("div",{className:"flex flex-col gap-4",children:[S&&(0,a.jsx)(i.$n,{type:"button",variant:"primary",className:"w-full",onClick:()=>{window.location.href="/api/auth/oidc/start"},children:g}),S&&C&&(0,a.jsx)("div",{className:"h-px bg-border/60"}),C?(0,a.jsxs)("form",{onSubmit:y,className:"flex flex-col gap-4",children:[("oidc"===b&&!j||"both"===b&&!j)&&(0,a.jsx)("p",{className:"text-xs text-amber-600 dark:text-amber-400 text-center",children:"OIDC login is enabled, but the issuer/client fields are not configured yet. Password login is still available for recovery."}),"both"===b&&j&&(0,a.jsx)("p",{className:"text-xs text-text-muted text-center",children:"Password and OIDC login are both enabled."}),(0,a.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,a.jsx)("label",{className:"text-sm font-medium",children:"Password"}),(0,a.jsx)(i.pd,{type:"password",placeholder:"Enter password",value:e,onChange:e=>t(e.target.value),required:!0,autoFocus:!S}),s&&(0,a.jsx)("p",{className:"text-xs text-red-500",children:s}),c>0&&(0,a.jsxs)("p",{className:"text-xs text-amber-600 dark:text-amber-400",children:["Locked. Retry in ",(0,a.jsxs)("span",{className:"font-mono",children:[c,"s"]}),"."]}),d&&(0,a.jsxs)("p",{className:"text-xs text-text-muted",children:["Forgot password? Open ",(0,a.jsx)("code",{className:"bg-sidebar px-1 rounded",children:"9router"})," CLI on the host → ",(0,a.jsx)("b",{children:"Settings"})," → ",(0,a.jsx)("b",{children:"Reset Password to Default"}),"."]})]}),(0,a.jsx)(i.$n,{type:"submit",variant:"primary",className:"w-full",loading:u,disabled:c>0,children:c>0?`Wait ${c}s`:"Login"}),(0,a.jsxs)("p",{className:"text-xs text-center text-text-muted mt-2",children:["Default password is ",(0,a.jsx)("code",{className:"bg-sidebar px-1 rounded",children:"123456"})]}),!1===m&&(0,a.jsx)("p",{className:"text-xs text-center text-text-muted",children:"No custom password is set yet. The default password above will work until you change it."})]}):s&&(0,a.jsx)("p",{className:"text-xs text-red-500",children:s})]})})]})]})}}},e=>{e.O(0,[2574,3862,1051,1321,5497,8441,3794,7358],()=>e(e.s=50370)),_N_E=e.O()}]);