false, 'error' => 'Pushover ist nicht konfiguriert.']; } $params = [ 'token' => (string)app_env('PUSHOVER_TOKEN', ''), 'user' => (string)app_env('PUSHOVER_USER', ''), // Pushover kappt laengere Werte serverseitig; wir kuerzen selbst, // damit die Meldung nicht mitten im Wort abbricht. 'title' => mb_substr($title, 0, 250), 'message' => mb_substr($message, 0, 1024), ]; if ($url !== null && $url !== '') { $params['url'] = $url; $params['url_title'] = $urlTitle ?? $url; } $context = stream_context_create([ 'http' => [ 'method' => 'POST', 'header' => 'Content-Type: application/x-www-form-urlencoded', 'content' => http_build_query($params), 'timeout' => 10, 'ignore_errors' => true, ], ]); $responseBody = @file_get_contents('https://api.pushover.net/1/messages.json', false, $context); $status = 0; foreach ($http_response_header ?? [] as $header) { if (preg_match('~^HTTP/\S+\s+(\d{3})~', $header, $m) === 1) { $status = (int)$m[1]; } } if ($responseBody === false) { error_log('Pushover: keine Antwort von api.pushover.net'); return ['ok' => false, 'error' => 'Keine Antwort von Pushover.']; } $data = json_decode($responseBody, true); if (!is_array($data) || $status >= 400 || (int)($data['status'] ?? 0) !== 1) { $errors = is_array($data['errors'] ?? null) ? implode('; ', $data['errors']) : 'HTTP ' . $status; error_log('Pushover fehlgeschlagen: ' . $errors); return ['ok' => false, 'error' => $errors]; } return ['ok' => true, 'error' => null]; } /** * Meldung ueber eine abgeschlossene Selbstregistrierung. Wird nur aus * register.php aufgerufen, nicht aus saas_register_tenant_owner() selbst - * sonst wuerden die check-*-Skripte in scripts/ bei jedem Testlauf Pushes * ausloesen. */ function pushover_notify_new_tenant(string $tenantName, string $tenantSlug, string $email, string $customerType): array { $type = $customerType === 'b2c' ? 'Privatkunde' : 'Geschäftskunde'; $baseUrl = rtrim((string)app_env('APP_BASE_URL', ''), '/'); return pushover_notify( 'Neue Registrierung: ' . $tenantName, sprintf("%s (%s)\nKürzel: %s\nE-Mail: %s", $tenantName, $type, $tenantSlug, $email), $baseUrl !== '' ? $baseUrl . '/backoffice.php' : null, 'Back-Office öffnen' ); }