Fix Gaiia webhook: eventName field, payload extraction, add header logging

This commit is contained in:
Graham McIntire 2026-02-14 15:40:02 -06:00
parent 4610d86043
commit 05cdc79124

View file

@ -13,14 +13,21 @@ defmodule ToweropsWeb.Api.V1.GaiiaWebhookController do
alias Towerops.Gaiia.Webhooks
alias Towerops.Integrations
require Logger
def create(conn, %{"organization_id" => organization_id}) do
# Log all headers for debugging webhook signature issues
Logger.info("Gaiia webhook headers: #{inspect(conn.req_headers)}")
with {:ok, integration} <- get_gaiia_integration(organization_id),
{:ok, secret} <- get_webhook_secret(integration),
{:ok, raw_body} <- get_raw_body(conn),
:ok <- verify_signature(conn, raw_body, secret),
{:ok, event} <- get_event(conn.body_params) do
data = Map.get(conn.body_params, "data", %{})
payload = %{"entity_id" => Map.get(data, "id"), "data" => data}
# Gaiia sends object data in "payload" field; fall back to "data" for compat
data = Map.get(conn.body_params, "payload", Map.get(conn.body_params, "data", %{}))
entity_id = Map.get(conn.body_params, "objectId", Map.get(data, "id"))
payload = %{"entity_id" => entity_id, "data" => data}
Webhooks.process_event(organization_id, event, payload)
@ -109,6 +116,7 @@ defmodule ToweropsWeb.Api.V1.GaiiaWebhookController do
end
end
defp get_event(%{"eventName" => event}) when is_binary(event), do: {:ok, event}
defp get_event(%{"event" => event}) when is_binary(event), do: {:ok, event}
defp get_event(_), do: {:error, :missing_event}