authorize()) { return new DataResponse(['error' => 'forbidden'], Http::STATUS_FORBIDDEN); } $params = $this->request->getParams(); $userId = trim((string)($params['userId'] ?? $params['user'] ?? '')); if ($userId === '') { $email = trim((string)($params['email'] ?? $params['clientEmail'] ?? '')); if ($email !== '') { $user = $this->userManager->getByEmail($email); if ($user !== null) { $userId = $user->getUID(); } } } $ticketNumber = trim((string)($params['ticketNumber'] ?? $params['ticket'] ?? '')); $preview = trim((string)($params['body'] ?? $params['messagePreview'] ?? $params['preview'] ?? '')); $ticketSubject = trim((string)($params['ticketSubject'] ?? $params['subject'] ?? '')); if ($userId === '' || $ticketNumber === '') { return new DataResponse( ['error' => 'userId (or email) and ticketNumber required'], Http::STATUS_BAD_REQUEST ); } if ($this->userManager->get($userId) === null) { return new DataResponse(['error' => 'user not found'], Http::STATUS_NOT_FOUND); } $queued = $this->pushBridge->notifyNewSupportMessage( $userId, $ticketNumber, $preview, $ticketSubject !== '' ? $ticketSubject : null, ); return new DataResponse([ 'success' => $queued, 'queued' => $queued, ]); } private function authorize(): bool { $header = $this->request->getHeader('X-F7-Support-Push-Secret'); if ($header === '') { $header = $this->request->getHeader('X-F7-Push-Secret'); } if ($header === '') { $header = (string)$this->request->getParam('secret', ''); } return $this->config->verifyPushWebhookSecret($header); } }