PageSourceSearch

https://medifit-nienburg.de/assets/Security-CfKLz_vi.js

js medifit-nienburg.de collected 2026-10-04 03:32:52 UTC 11,078 bytes, 1 lines download raw bytes

1import{a,j as e}from"./trpc-vendor-Bta84Nsh.js";import{t as r,u as J,C as z,e as F,f as P,z as G,g as X,h as D,B as i,I as o,L as B}from"./index-_3-B0itT.js";import{t,aj as c,bQ as T,w as K,S as Y,K as p,g as Q,aA as ee}from"./ui-vendor-NEZNvIbV.js";import"./react-vendor-DpXpH6G7.js";function le(){const g=r.useUtils(),{user:m}=J(),Z=m?.role==="admin",[j,_]=a.useState(m?.email??""),f=r.admin.sendTestEmail.useMutation({onSuccess:()=>t.success("Test-E-Mail gesendet! Bitte Postfach prüfen."),onError:s=>t.error(s.message)}),{data:l,isLoading:W}=r.totp.status.useQuery(),[u,n]=a.useState("idle"),[d,b]=a.useState(null),[v,h]=a.useState(""),[$,L]=a.useState(!1),[I,N]=a.useState(!1),[C,x]=a.useState(""),[k,O]=a.useState(m?.email??""),[se,te]=a.useState(m?.phone??""),[w,A]=a.useState(""),[U,R]=a.useState(""),S=r.mfa.setupRequestEmailCode.useMutation({onSuccess:s=>{R(s.masked),n("code_verify"),t.success(`Code an ${s.masked} gesendet`)},onError:s=>t.error(s.message)});r.mfa.setupRequestWhatsappCode.useMutation({onSuccess:s=>{R(s.masked),n("code_verify"),t.success(`Code an ${s.masked} gesendet`)},onError:s=>t.error(s.message)});const y=r.mfa.setupVerifyCode.useMutation({onSuccess:s=>{t.success(`2FA per ${s.method==="email"?"E-Mail":"WhatsApp"} aktiviert!`),n("idle"),A(""),g.totp.status.invalidate(),setTimeout(()=>window.location.reload(),800)},onError:s=>{t.error(s.message),A("")}}),q=r.totp.setup.useMutation({onSuccess:s=>{b(s),n("qr")},onError:s=>t.error(s.message)}),M=r.totp.verifyAndEnable.useMutation({onSuccess:()=>{t.success("2FA erfolgreich aktiviert!"),n("idle"),b(null),h(""),g.totp.status.invalidate()},onError:s=>{t.error(s.message),h("")}}),E=r.totp.disable.useMutation({onSuccess:()=>{t.success("2FA deaktiviert"),N(!1),x(""),g.totp.status.invalidate()},onError:s=>{t.error(s.message),x("")}}),V=()=>{d?.secret&&(navigator.clipboard.writeText(d.secret),L(!0),setTimeout(()=>L(!1),2e3))};if(W)return e.jsx("div",{className:"flex items-center justify-center h-64",children:e.jsx(c,{className:"h-6 w-6 animate-spin text-muted-foreground"})});const H=typeof window<"u"&&new URLSearchParams(window.location.search).get("setup")==="required";return e.jsxs("div",{className:"p-6 max-w-2xl mx-auto space-y-6",children:[H&&!l?.totpEnabled&&e.jsxs("div",{className:"rounded-lg border-2 border-orange-500 bg-orange-500/10 p-4",children:[e.jsxs("h2",{className:"font-bold text-orange-400 flex items-center gap-2",children:[e.jsx(T,{className:"w-5 h-5"})," 2FA-Pflicht aktiviert"]}),e.jsx("p",{className:"text-sm text-foreground/80 mt-1",children:"Aus Sicherheitsgründen musst du die Zwei-Faktor-Authentifizierung einrichten, bevor du das CRM weiter nutzen kannst. Dauert 2 Minuten — Authenticator-App öffnen, QR-Code scannen, 6-stelligen Code eingeben. Fertig."})]}),e.jsxs("div",{children:[e.jsx("h1",{className:"text-2xl font-bold",children:"Sicherheit"}),e.jsx("p",{className:"text-muted-foreground mt-1",children:"Schütze dein Konto mit Zwei-Faktor-Authentifizierung"})]}),e.jsxs(z,{children:[e.jsx(F,{className:"pb-3",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:`w-10 h-10 rounded-full flex items-center justify-center ${l?.totpEnabled?"bg-green-100":"bg-muted"}`,children:l?.totpEnabled?e.jsx(K,{className:"h-5 w-5 text-green-600"}):e.jsx(T,{className:"h-5 w-5 text-muted-foreground"})}),e.jsxs("div",{children:[e.jsx(P,{className:"text-base",children:"Zwei-Faktor-Authentifizierung (2FA)"}),e.jsx(G,{children:"Google Authenticator, Authy oder ähnliche Apps"})]})]}),e.jsx(X,{variant:l?.totpEnabled?"default":"secondary",children:l?.totpEnabled?"Aktiv":"Inaktiv"})]})}),e.jsx(D,{children:l?.totpEnabled?e.jsxs("div",{className:"space-y-4",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Dein Konto ist mit einer Authenticator-App gesichert. Beim nächsten Login wirst du nach deinem 6-stelligen Code gefragt."}),I?e.jsxs("div",{className:"border border-destructive/30 rounded-lg p-4 space-y-3 bg-destructive/5",children:[e.jsx("p",{className:"text-sm font-medium text-destructive",children:"Gib deinen aktuellen Authenticator-Code ein, um 2FA zu deaktivieren:"}),e.jsx(o,{type:"text",inputMode:"numeric",pattern:"[0-9]*",maxLength:6,placeholder:"000000",value:C,onChange:s=>x(s.target.value.replace(/\D/g,"").slice(0,6)),className:"text-center text-xl tracking-widest font-mono w-40",autoF
1ocus:!0}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs(i,{size:"sm",variant:"destructive",disabled:E.isPending||C.length!==6,onClick:()=>E.mutate({code:C}),children:[E.isPending?e.jsx(c,{className:"mr-2 h-4 w-4 animate-spin"}):null,"Deaktivieren bestätigen"]}),e.jsx(i,{size:"sm",variant:"ghost",onClick:()=>{N(!1),x("")},children:"Abbrechen"})]})]}):e.jsxs(i,{variant:"destructive",size:"sm",onClick:()=>N(!0),children:[e.jsx(T,{className:"mr-2 h-4 w-4"}),"2FA deaktivieren"]})]}):u==="idle"?e.jsxs("div",{className:"space-y-3",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Wähle eine 2FA-Methode für zusätzlichen Schutz."}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-3",children:[e.jsxs("button",{type:"button",onClick:()=>q.mutate(),disabled:q.isPending,className:"rounded-lg border-2 border-border hover:border-primary p-4 text-left transition-all",children:[e.jsx(Y,{className:"w-6 h-6 mb-2 text-primary"}),e.jsx("div",{className:"font-semibold text-sm",children:"Authenticator-App"}),e.jsx("div",{className:"text-xs text-muted-foreground mt-1",children:"Google Authenticator, Authy, 1Password — sicherste Option"})]}),e.jsxs("button",{type:"button",onClick:()=>n("email_setup"),className:"rounded-lg border-2 border-border hover:border-primary p-4 text-left transition-all",children:[e.jsx(p,{className:"w-6 h-6 mb-2 text-blue-400"}),e.jsx("div",{className:"font-semibold text-sm",children:"E-Mail-Code"}),e.jsx("div",{className:"text-xs text-muted-foreground mt-1",children:"Code wird per E-Mail gesendet"})]})]})]}):u==="email_setup"?e.jsxs("div",{className:"space-y-3",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Wir schicken dir einen 6-stelligen Code an die unten angegebene Mail-Adresse."}),e.jsxs("div",{children:[e.jsx(B,{htmlFor:"mfa-email",children:"E-Mail-Adresse"}),e.jsx(o,{id:"mfa-email",type:"email",value:k,onChange:s=>O(s.target.value)})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs(i,{size:"sm",onClick:()=>S.mutate({email:k}),disabled:!k||S.isPending,children:[S.isPending?e.jsx(c,{className:"w-4 h-4 mr-2 animate-spin"}):e.jsx(p,{className:"w-4 h-4 mr-2"}),"Code senden"]}),e.jsx(i,{size:"sm",variant:"ghost",onClick:()=>n("idle"),children:"Abbrechen"})]})]}):u==="code_verify"?e.jsxs("div",{className:"space-y-3",children:[e.jsxs("p",{className:"text-sm text-muted-foreground",children:["Code wurde an ",e.jsx("strong",{children:U})," gesendet. Gib die 6 Ziffern ein:"]}),e.jsx("div",{children:e.jsx(o,{type:"text",inputMode:"numeric",maxLength:6,value:w,onChange:s=>A(s.target.value.replace(/\D/g,"").slice(0,6)),className:"text-center text-2xl tracking-widest font-mono",autoFocus:!0})}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs(i,{size:"sm",onClick:()=>y.mutate({code:w}),disabled:w.length!==6||y.isPending,children:[y.isPending?e.jsx(c,{className:"w-4 h-4 mr-2 animate-spin"}):e.jsx(Q,{className:"w-4 h-4 mr-2"}),"Bestätigen"]}),e.jsx(i,{size:"sm",variant:"ghost",onClick:()=>n("idle"),children:"Abbrechen"})]})]}):u==="qr"&&d?e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-start gap-6",children:[e.jsx("div",{className:"shrink-0",children:e.jsx("img",{src:d.qrCode,alt:"QR Code",className:"w-44 h-44 rounded-lg border"})}),e.jsxs("div",{className:"space-y-3 flex-1",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-medium mb-1",children:"Schritt 1"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Öffne Google Authenticator (oder Authy) und scanne den QR-Code, oder gib den Schlüssel manuell ein:"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("code",{className:"text-xs bg-muted px-2 py-1.5 rounded font-mono break-all flex-1",children:d.secret}),e.jsx(i,{size:"icon",variant:"outline",className:"h-8 w-8 shrink-0",onClick:V,children:$?e.jsx(Q,{className:"h-4 w-4 text-green-600"}):e.jsx(ee,{className:"h-4 w-4"})})]})]})]}),e.jsxs("div",{className:"border-t pt-4 space-y-3",children:[e.jsx("p",{className:"text-sm font-medium",children:"Schritt 2 – Code bestätigen"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Gib den 6-stelligen Code aus der App ein, um die Einrichtung abzuschließen:"}),e.jsx(o,{type:"text",inputMode:"numeric",pattern:"[0-9]*",maxLength:6,placeholder:"000000",value:v,onCh
1ange:s=>h(s.target.value.replace(/\D/g,"").slice(0,6)),className:"text-center text-2xl tracking-widest font-mono w-40",autoFocus:!0}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs(i,{size:"sm",disabled:M.isPending||v.length!==6,onClick:()=>M.mutate({secret:d.secret,code:v}),children:[M.isPending?e.jsx(c,{className:"mr-2 h-4 w-4 animate-spin"}):e.jsx(K,{className:"mr-2 h-4 w-4"}),"2FA aktivieren"]}),e.jsx(i,{size:"sm",variant:"ghost",onClick:()=>{n("idle"),b(null),h("")},children:"Abbrechen"})]})]})]}):null})]}),e.jsxs(z,{children:[e.jsx(F,{className:"pb-3",children:e.jsx(P,{className:"text-base",children:"Empfehlungen"})}),e.jsxs(D,{className:"space-y-2 text-sm text-muted-foreground",children:[e.jsx("p",{children:"• Aktiviere 2FA für alle Nutzer mit Zugriff auf Leads und Verträge"}),e.jsx("p",{children:"• Speichere den Backup-Schlüssel sicher ab, falls du dein Gerät verlierst"}),e.jsx("p",{children:"• Kompatibel mit: Google Authenticator, Authy, Microsoft Authenticator, 1Password"})]})]}),Z&&e.jsxs(z,{children:[e.jsx(F,{className:"pb-3",children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"w-10 h-10 rounded-full bg-blue-500/10 flex items-center justify-center",children:e.jsx(p,{className:"h-5 w-5 text-blue-500"})}),e.jsxs("div",{children:[e.jsx(P,{className:"text-base",children:"E-Mail-Konfiguration testen"}),e.jsx(G,{children:"Prüfe ob Resend korrekt eingerichtet ist"})]})]})}),e.jsxs(D,{children:[e.jsxs("div",{className:"flex gap-2 items-end",children:[e.jsxs("div",{className:"flex-1 space-y-1",children:[e.jsx(B,{className:"text-xs",children:"Test-E-Mail senden an"}),e.jsx(o,{type:"email",value:j,onChange:s=>_(s.target.value),placeholder:"[email protected]",className:"h-9"})]}),e.jsx(i,{size:"sm",disabled:f.isPending||!j,onClick:()=>f.mutate({to:j}),className:"h-9",children:f.isPending?e.jsxs(e.Fragment,{children:[e.jsx(c,{className:"mr-2 h-4 w-4 animate-spin"}),"Sendet..."]}):e.jsxs(e.Fragment,{children:[e.jsx(p,{className:"mr-2 h-4 w-4"}),"Senden"]})})]}),e.jsx("p",{className:"text-xs text-muted-foreground mt-2",children:"Sendet eine Test-E-Mail über Resend. Erscheint sie im Postfach, ist alles korrekt konfiguriert."})]})]})]})}export{le as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.