Files
desktop/CopyToKeycloak/theme/kusche-desktop/login/login.ftl
Lars Gebhardt-Kusche cd5525ff2e
All checks were successful
Deploy / deploy-staging (push) Successful in 52s
Deploy / deploy-production (push) Has been skipped
asdsad
2026-06-10 22:44:28 +02:00

122 lines
7.3 KiB
Plaintext

<#import "template.ftl" as layout>
<#import "passkeys.ftl" as passkeys>
<@layout.registrationLayout displayMessage=!messagesPerField.existsError('username','password') displayInfo=false; section>
<#if section = "header">
Desktop-Anmeldung
<#elseif section = "form">
<section class="kb-login-shell">
<div class="kb-login-backdrop" aria-hidden="true"></div>
<div class="kb-login-stage">
<header class="kb-login-clock" aria-live="polite">
<p class="kb-login-date" id="kb-login-date">${msg("kbClockDateFallback", "Montag, 18. November")}</p>
<p class="kb-login-time" id="kb-login-time">${msg("kbClockTimeFallback", "4:20")}</p>
</header>
<div class="kb-login-card">
<div class="kb-login-brand">
<p class="kb-login-kicker">Kusche.Berlin</p>
</div>
<div id="kc-form" class="kb-login-form-shell">
<div id="kc-form-wrapper">
<#if realm.password>
<form id="kc-form-login" onsubmit="login.disabled = true; return true;" action="${url.loginAction}" method="post">
<#if !usernameHidden??>
<div class="kb-form-group">
<input tabindex="2" id="username" class="kb-text-input" name="username" value="${(login.username!'')}" type="text"
autofocus autocomplete="${(enableWebAuthnConditionalUI?has_content)?then('username webauthn', 'username')}"
aria-invalid="<#if messagesPerField.existsError('username','password')>true</#if>"
dir="ltr"
placeholder="Benutzername oder E-Mail eingeben" />
<#if messagesPerField.existsError('username','password')>
<span id="input-error" class="kb-input-error" aria-live="polite">
${kcSanitize(messagesPerField.getFirstError('username','password'))?no_esc}
</span>
</#if>
</div>
</#if>
<div class="kb-form-group">
<div class="kb-password-row" dir="ltr">
<input tabindex="3" id="password" class="kb-text-input kb-text-input-password" name="password" type="password" autocomplete="current-password"
aria-invalid="<#if messagesPerField.existsError('username','password')>true</#if>"
placeholder="Passwort eingeben" />
<button class="kb-password-toggle" type="button" aria-label="${msg("showPassword")}"
aria-controls="password" data-password-toggle tabindex="4"
data-icon-show="${properties.kcFormPasswordVisibilityIconShow!}" data-icon-hide="${properties.kcFormPasswordVisibilityIconHide!}"
data-label-show="${msg('showPassword')}" data-label-hide="${msg('hidePassword')}">
<span aria-hidden="true">◉</span>
</button>
</div>
<#if usernameHidden?? && messagesPerField.existsError('username','password')>
<span id="input-error" class="kb-input-error" aria-live="polite">
${kcSanitize(messagesPerField.getFirstError('username','password'))?no_esc}
</span>
</#if>
</div>
<div class="kb-form-meta">
<div class="kb-form-options" id="kc-form-options">
<#if !usernameHidden??>
<label class="kb-remember">
<#if login.rememberMe??>
<input tabindex="5" id="rememberMe" name="rememberMe" type="checkbox" checked>
<#else>
<input tabindex="5" id="rememberMe" name="rememberMe" type="checkbox">
</#if>
<span>Angemeldet bleiben</span>
</label>
</#if>
</div>
<div class="kb-form-links">
<#if (url.loginResetCredentialsUrl!'')?has_content>
<a tabindex="6" href="${url.loginResetCredentialsUrl}">Passwort vergessen?</a>
</#if>
</div>
</div>
<div id="kc-form-buttons" class="kb-form-submit">
<input type="hidden" id="id-hidden-input" name="credentialId" <#if auth.selectedCredential?has_content>value="${auth.selectedCredential}"</#if>/>
<input tabindex="7" class="kb-submit-button" name="login" id="kc-login" type="submit" value="Anmelden"/>
</div>
<div id="kc-registration-container" class="kb-registration">
<div id="kc-registration">
<a class="kb-register-button" id="kb-register-button" tabindex="8" href="#" hidden>Registrieren</a>
</div>
</div>
</form>
</#if>
</div>
</div>
<aside class="kb-login-info">
<strong>Willkommen im Familienbereich</strong>
<p>Dieser geschützte Dashboardbereich ist für die Familie Kusche und enge Freunde gedacht. Hier entstehen persönliche Übersichten, gemeinsame Tools, interne Informationen und weitere digitale Bereiche für Alltag, Organisation und Zusammenarbeit.</p>
</aside>
</div>
</div>
</section>
<@passkeys.conditionalUIData />
<script type="module" src="${url.resourcesPath}/js/passwordVisibility.js"></script>
<script src="${url.resourcesPath}/js/login-clock.js"></script>
<script src="${url.resourcesPath}/js/desktop-register-link.js"></script>
<#elseif section = "info" >
<#-- Intentionally unused. Registration is rendered inside the form section. -->
<#elseif section = "socialProviders" >
<#-- Social logins are intentionally hidden for this theme. -->
</#if>
</@layout.registrationLayout>