adasd
All checks were successful
Deploy / deploy-staging (push) Successful in 26s
Deploy / deploy-production (push) Has been skipped

This commit is contained in:
2026-06-15 21:36:36 +02:00
parent 94ea3c58af
commit 5408a2bb89
5 changed files with 118 additions and 15 deletions

View File

@@ -163,14 +163,16 @@ final class RegistrationService
$request['provisioning']['status'] = 'ldap_created_inactive';
$request['provisioning']['ldif_path'] = $this->writeLdifDraft($request['id'], $username, $this->ldifBuilder->build($request, $provisioning));
} catch (\Throwable $exception) {
$errorReference = $this->logProvisioningFailure($request, $provisioning, $exception);
$request['password_secret'] = $passwordSecret;
$request['status'] = 'provisioning_failed';
$request['provisioning']['status'] = 'provisioning_failed';
$request['provisioning']['error'] = $exception->getMessage();
$request['provisioning']['error_reference'] = $errorReference;
return [
'success' => false,
'errors' => ['Die Registrierung konnte im Moment nicht gespeichert werden. Bitte versuche es später erneut.'],
'errors' => ['Die Registrierung konnte im Moment nicht gespeichert werden. Bitte versuche es später erneut. Referenz: ' . $errorReference],
'request' => $this->store->create($request),
];
}
@@ -379,4 +381,38 @@ final class RegistrationService
return $this->projectRoot . '/' . ltrim($path, '/');
}
/**
* @param array<string, mixed> $request
* @param array<string, mixed> $provisioning
*/
private function logProvisioningFailure(array $request, array $provisioning, \Throwable $exception): string
{
$reference = 'REG-' . gmdate('YmdHis') . '-' . substr(bin2hex(random_bytes(4)), 0, 8);
$path = $this->resolveProjectPath('data/registration-provisioning-errors.log');
$directory = dirname($path);
if (!is_dir($directory)) {
mkdir($directory, 0775, true);
}
$payload = [
'reference' => $reference,
'created_at' => gmdate('c'),
'message' => $exception->getMessage(),
'username' => (string) ($request['username'] ?? ''),
'email' => (string) ($request['email'] ?? ''),
'display_name' => (string) ($request['display_name'] ?? ''),
'origin' => $request['origin'] ?? [],
'provisioning' => $provisioning,
];
file_put_contents(
$path,
json_encode($payload, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) . PHP_EOL,
FILE_APPEND | LOCK_EX
);
return $reference;
}
}