$response = $client->request($webhookListener->getHttpMethod(), $webhookListener->getUri(), $options);
$statusCode = $response->getStatusCode();
if ($statusCode >= 200 && $statusCode < 300) {
- $this->logger->warning('Webhook returned unexpected status code '.$statusCode, ['body' => $response->getBody()]);
- } else {
$this->logger->debug('Webhook returned status code '.$statusCode, ['body' => $response->getBody()]);
+ } else {
+ $this->logger->warning('Webhook returned unexpected status code '.$statusCode, ['body' => $response->getBody()]);
}
} catch (\Exception $e) {
$this->logger->error('Webhook call failed: '.$e->getMessage(), ['exception' => $e]);
namespace OCA\Webhooks\Controller;
-use Doctrine\DBAL\Exception;
use OCA\Webhooks\Db\AuthMethod;
use OCA\Webhooks\Db\WebhookListenerMapper;
+use OCA\Webhooks\ResponseDefinitions;
use OCP\AppFramework\Http\Attribute\ApiRoute;
use OCP\AppFramework\Http\Attribute\AuthorizedAdminSetting;
use OCP\AppFramework\Http\Attribute\OpenAPI;
throw new OCSBadRequestException($e->getMessage(), $e);
} catch (\DomainException $e) {
throw new OCSForbiddenException($e->getMessage(), $e);
- } catch (Exception $e) {
+ } catch (\Exception $e) {
$this->logger->error('Error when deleting flow with id ' . $id, ['exception' => $e]);
throw new OCSException('An internal error occurred', $e->getCode(), $e);
}
}
/**
- * @throws DoesNotExistException
- * @throws MultipleObjectsReturnedException
* @throws Exception
* @return WebhookListener[]
*/
return $this->findEntities($qb);
}
+ /**
+ * @throws Exception
+ */
public function addWebhookListener(
?string $appId,
string $userId,
?array $headers,
AuthMethod $authMethod,
?array $authData,
- ) {
+ ): WebhookListener {
$webhookListener = WebhookListener::fromParams(
[
'appId' => $appId,
return $this->insert($webhookListener);
}
+ /**
+ * @throws Exception
+ */
public function updateWebhookListener(
int $id,
?string $appId,
?array $headers,
AuthMethod $authMethod,
?array $authData,
- ) {
+ ): WebhookListener {
$webhookListener = WebhookListener::fromParams(
[
'id' => $id,
}
/**
- * @throws DoesNotExistException
- * @throws MultipleObjectsReturnedException
* @throws Exception
*/
public function deleteById(int $id): bool {
}
/**
+ * @throws Exception
* @return list<string>
* TODO cache
*/
return $configuredEvents;
}
+ /**
+ * @throws Exception
+ */
public function getByEvent(string $event): array {
$qb = $this->db->getQueryBuilder();
public function handle(Event $event): void {
$webhookListeners = $this->mapper->getByEvent($event::class);
- /** @var IUser */
$user = $this->userSession->getUser();
foreach ($webhookListeners as $webhookListener) {
// TODO add group membership to be able to filter on it
$data = [
'event' => $this->serializeEvent($event),
- 'user' => JsonSerializer::serializeUser($user),
+ 'user' => (is_null($user) ? null : JsonSerializer::serializeUser($user)),
'time' => time(),
];
if ($this->filterMatch($webhookListener->getEventFilter(), $data)) {
if (!$schema->hasTable(WebhookListenerMapper::TABLE_NAME)) {
$table = $schema->createTable(WebhookListenerMapper::TABLE_NAME);
- $table->addColumn('id', Types::INTEGER, [
+ $table->addColumn('id', Types::BIGINT, [
'autoincrement' => true,
'notnull' => true,
'length' => 4,
]);
$table->addColumn('uri', Types::STRING, [
'notnull' => true,
- 'length' => 256,
+ 'length' => 4096,
]);
$table->addColumn('event', Types::TEXT, [
'notnull' => true,