Demo-Login entfernt, DEMO_PASSWORT-Konstante gestrichen
Build & Deploy / deploy (push) Successful in 24s
Build & Deploy / deploy (push) Successful in 24s
This commit is contained in:
@@ -4,9 +4,6 @@
|
|||||||
* Tabelle sessions) – es gibt nichts mehr im localStorage zu verwalten.
|
* Tabelle sessions) – es gibt nichts mehr im localStorage zu verwalten.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** Demo-Passwort aller Demo-Benutzer (wie Schulportal sha256("0815")). */
|
|
||||||
export const DEMO_PASSWORT = '0815'
|
|
||||||
|
|
||||||
export async function sha256(text: string): Promise<string> {
|
export async function sha256(text: string): Promise<string> {
|
||||||
const daten = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(text))
|
const daten = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(text))
|
||||||
return Array.from(new Uint8Array(daten))
|
return Array.from(new Uint8Array(daten))
|
||||||
|
|||||||
+3
-22
@@ -1,11 +1,11 @@
|
|||||||
import { useState } from 'react'
|
import { useState } from 'react'
|
||||||
import { useNavigate } from 'react-router'
|
import { useNavigate } from 'react-router'
|
||||||
import { KeyRound, MailPlus, Sparkles, UserCheck } from 'lucide-react'
|
import { KeyRound, MailPlus, Sparkles } from 'lucide-react'
|
||||||
import logo from '../assets/hinterstein/logo.png'
|
import logo from '../assets/hinterstein/logo.png'
|
||||||
import hero from '../assets/hero.webp'
|
import hero from '../assets/hero.webp'
|
||||||
import joseph from '../assets/hinterstein/joseph-hinterstein.webp'
|
import joseph from '../assets/hinterstein/joseph-hinterstein.webp'
|
||||||
import kontakt from '../assets/hinterstein/kontakt.jpg'
|
import kontakt from '../assets/hinterstein/kontakt.jpg'
|
||||||
import { useStore, DEMO_PASSWORT } from '../store/store'
|
import { useStore } from '../store/store'
|
||||||
|
|
||||||
const features = [
|
const features = [
|
||||||
'Mietkonto & Nebenkostenabrechnungen',
|
'Mietkonto & Nebenkostenabrechnungen',
|
||||||
@@ -15,10 +15,6 @@ const features = [
|
|||||||
'Aktuelle Ankündigungen Ihres Wohnhauses',
|
'Aktuelle Ankündigungen Ihres Wohnhauses',
|
||||||
]
|
]
|
||||||
|
|
||||||
const demoZugaenge = [
|
|
||||||
{ benutzername: 'j.hinterstein', label: 'Joseph Hinterstein (Verwaltung)' },
|
|
||||||
]
|
|
||||||
|
|
||||||
export default function Login() {
|
export default function Login() {
|
||||||
const navigate = useNavigate()
|
const navigate = useNavigate()
|
||||||
const { login, registrieren } = useStore()
|
const { login, registrieren } = useStore()
|
||||||
@@ -172,27 +168,12 @@ export default function Login() {
|
|||||||
>
|
>
|
||||||
{lade ? 'Bitte warten …' : 'Anmelden'}
|
{lade ? 'Bitte warten …' : 'Anmelden'}
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<div className="rounded-xl bg-slate-50 p-3 text-xs text-slate-600 dark:bg-slate-800 dark:text-slate-300">
|
|
||||||
<div className="mb-1.5 font-semibold">Demo-Zugänge (Passwort: {DEMO_PASSWORT})</div>
|
|
||||||
{demoZugaenge.map((d) => (
|
|
||||||
<button
|
|
||||||
key={d.benutzername}
|
|
||||||
type="button"
|
|
||||||
onClick={() => { setBn(d.benutzername); setPw(DEMO_PASSWORT); setFehler(null) }}
|
|
||||||
className="mr-2 mb-1.5 inline-flex items-center gap-1 rounded-lg bg-white px-2.5 py-1 font-medium text-slate-700 ring-1 ring-slate-200 transition hover:ring-amber-400 dark:bg-slate-700 dark:text-slate-200 dark:ring-slate-600"
|
|
||||||
>
|
|
||||||
<UserCheck className="h-3.5 w-3.5 text-amber-600 dark:text-amber-400" />
|
|
||||||
{d.label}
|
|
||||||
</button>
|
|
||||||
))}
|
|
||||||
</div>
|
|
||||||
</form>
|
</form>
|
||||||
) : (
|
) : (
|
||||||
<form onSubmit={registrierenSubmit} className="space-y-3">
|
<form onSubmit={registrierenSubmit} className="space-y-3">
|
||||||
<p className="text-xs text-slate-500 dark:text-slate-400">
|
<p className="text-xs text-slate-500 dark:text-slate-400">
|
||||||
Mieter registrieren sich mit dem persönlichen Registrierungscode aus dem
|
Mieter registrieren sich mit dem persönlichen Registrierungscode aus dem
|
||||||
Anschreiben der Verwaltung. Demo-Code: <code className="rounded bg-slate-100 px-1.5 py-0.5 font-mono dark:bg-slate-800">MP-2026-0815</code>
|
Anschreiben der Verwaltung.
|
||||||
</p>
|
</p>
|
||||||
<div>
|
<div>
|
||||||
<label htmlFor="code" className="mb-1 block text-xs font-semibold uppercase tracking-wide text-slate-500 dark:text-slate-400">Registrierungscode</label>
|
<label htmlFor="code" className="mb-1 block text-xs font-semibold uppercase tracking-wide text-slate-500 dark:text-slate-400">Registrierungscode</label>
|
||||||
|
|||||||
+1
-3
@@ -42,7 +42,7 @@ import type {
|
|||||||
Mieter,
|
Mieter,
|
||||||
} from '../types'
|
} from '../types'
|
||||||
import { apiGet, apiPost, apiPatch, apiPut, apiDelete, apiUpload, ApiFehler } from '../lib/api'
|
import { apiGet, apiPost, apiPatch, apiPut, apiDelete, apiUpload, ApiFehler } from '../lib/api'
|
||||||
import { sha256, DEMO_PASSWORT } from '../lib/auth'
|
import { sha256 } from '../lib/auth'
|
||||||
|
|
||||||
/** Fallback: Mieter ohne Wohnungszuweisung sehen die erste Einheit des Bestands. */
|
/** Fallback: Mieter ohne Wohnungszuweisung sehen die erste Einheit des Bestands. */
|
||||||
export const DEMO_TENANT = ''
|
export const DEMO_TENANT = ''
|
||||||
@@ -825,5 +825,3 @@ export const fmtEUR = new Intl.NumberFormat('de-DE', {
|
|||||||
style: 'currency',
|
style: 'currency',
|
||||||
currency: 'EUR',
|
currency: 'EUR',
|
||||||
})
|
})
|
||||||
|
|
||||||
export { DEMO_PASSWORT }
|
|
||||||
|
|||||||
Reference in New Issue
Block a user