Files
kaffeekasse-saas/resources/views/auth/reset-confirm.php
T
2026-06-15 18:36:57 +02:00

120 lines
4.8 KiB
PHP

<?php
$scope = trim((string) ($scope ?? old('scope')));
if ($scope === '') {
$scope = trim((string) ($_GET['scope'] ?? ''));
}
$scope = $scope === 'tenant' ? 'tenant' : 'platform';
$tenantSlug = trim((string) ($tenantSlug ?? old('tenant_slug')));
if ($tenantSlug === '') {
$tenantSlug = trim((string) ($_GET['tenantSlug'] ?? $_GET['tenant'] ?? ''));
}
$tenantName = trim((string) ($tenantName ?? old('tenant_name')));
if ($tenantName === '') {
$tenantName = trim((string) ($_GET['tenantName'] ?? ''));
}
if ($tenantName === '' && $tenantSlug !== '') {
$tenantName = 'Standort ' . $tenantSlug;
}
if ($tenantName === '') {
$tenantName = 'Standortzugang';
}
$token = trim((string) ($token ?? old('token')));
$resetToken = isset($resetToken) && is_array($resetToken) ? $resetToken : null;
$hasValidResetToken = $resetToken !== null;
$loginUrl = $scope === 'tenant'
? ($tenantSlug !== '' ? tenant_url($tenantSlug, 'login') : '/')
: '/admin/login';
$requestUrl = '/password/forgot?scope=' . rawurlencode($scope);
if ($scope === 'tenant' && $tenantSlug !== '') {
$requestUrl .= '&tenantSlug=' . rawurlencode($tenantSlug);
}
if ($scope === 'tenant' && $tenantName !== '') {
$requestUrl .= '&tenantName=' . rawurlencode($tenantName);
}
$resetEmail = trim((string) ($resetToken['email'] ?? ''));
$expiresAt = trim((string) ($resetToken['expires_at'] ?? ''));
require __DIR__ . '/../partials/layout-top.php';
?>
<section class="page-head">
<span class="eyebrow">Reset bestaetigen</span>
<h1>Neues Passwort setzen</h1>
<p>
<?= e($hasValidResetToken
? ($scope === 'platform'
? 'Der Plattformzugang bekommt hier sein neues Passwort.'
: 'Der Standortzugang fuer ' . $tenantName . ' bekommt hier sein neues Passwort.')
: 'Hier wird nur mit einem gueltigen Reset-Link ein neues Passwort gesetzt.') ?>
So bleibt der Login-Reset von PIN, RFID und sonstigen Standortdaten getrennt.
</p>
</section>
<div class="two-column">
<?php if ($hasValidResetToken): ?>
<form class="card form-card" method="post" action="<?= e(current_path()) ?>">
<?= csrf_field($csrf) ?>
<input type="hidden" name="scope" value="<?= e($scope) ?>">
<?php if ($tenantSlug !== ''): ?>
<input type="hidden" name="tenant_slug" value="<?= e($tenantSlug) ?>">
<?php endif; ?>
<?php if ($scope === 'tenant' && $tenantName !== ''): ?>
<input type="hidden" name="tenant_name" value="<?= e($tenantName) ?>">
<?php endif; ?>
<input type="hidden" name="token" value="<?= e($token) ?>">
<?php if ($resetEmail !== '' || $expiresAt !== ''): ?>
<p class="muted">
<?= e($resetEmail !== '' ? 'Link fuer ' . $resetEmail . '.' : 'Der Reset-Link wurde geprueft.') ?>
<?php if ($expiresAt !== ''): ?>
Gueltig bis <?= e($expiresAt) ?> UTC.
<?php endif; ?>
</p>
<?php endif; ?>
<label>
<span>Neues Passwort</span>
<input type="password" name="password" minlength="12" required>
</label>
<label>
<span>Passwort wiederholen</span>
<input type="password" name="password_confirm" minlength="12" required>
</label>
<button class="button button-primary" type="submit">Passwort uebernehmen</button>
<p class="muted">Nach erfolgreicher Bestaetigung soll dieser Flow wieder in den passenden Login zurueckfuehren.</p>
<p><a class="text-link" href="<?= e($loginUrl) ?>">Zurueck zum Login</a></p>
</form>
<?php else: ?>
<div class="card form-card">
<h2>Reset-Link neu anfordern</h2>
<p class="muted">
<?= e($token === ''
? 'Oeffne den Reset-Link aus der E-Mail, um hier ein neues Passwort zu setzen.'
: 'Dieser Reset-Link ist ungueltig oder abgelaufen. Bitte fordere einen neuen Link an.') ?>
</p>
<p><a class="text-link" href="<?= e($requestUrl) ?>">Neuen Reset-Link anfordern</a></p>
<p><a class="text-link" href="<?= e($loginUrl) ?>">Zurueck zum Login</a></p>
</div>
<?php endif; ?>
<aside class="card">
<span class="eyebrow">Worauf geachtet wird</span>
<ul class="feature-list">
<li>Mindestens 12 Zeichen fuer Plattform- und Standortzugang</li>
<li>Das neue Passwort ersetzt nur den Login, nicht PIN oder RFID-Zuweisungen</li>
<li>Bei Rueckfragen bleibt das Standortteam im Pilot die erste Anlaufstelle</li>
</ul>
</aside>
</div>
<?php require __DIR__ . '/../partials/layout-bottom.php'; ?>