(ctx context.Context, event cloudevents.Event, webhook *entities.Webhook)
| 260 | } |
| 261 | |
| 262 | func (service *WebhookService) createRequest(ctx context.Context, event cloudevents.Event, webhook *entities.Webhook) (*http.Request, error) { |
| 263 | ctx, span, ctxLogger := service.tracer.StartWithLogger(ctx, service.logger) |
| 264 | defer span.End() |
| 265 | |
| 266 | payload, err := json.Marshal(service.getPayload(ctxLogger, event, webhook)) |
| 267 | if err != nil { |
| 268 | msg := fmt.Sprintf("cannot marshal payload for user [%s] and webhook [%s] for event [%s]", webhook.UserID, webhook.ID, event.ID()) |
| 269 | return nil, stacktrace.Propagate(err, msg) |
| 270 | } |
| 271 | |
| 272 | request, err := http.NewRequestWithContext(ctx, http.MethodPost, webhook.URL, bytes.NewReader(payload)) |
| 273 | if err != nil { |
| 274 | msg := fmt.Sprintf("cannot create request for user [%s] and webhook [%s] for event [%s]", webhook.UserID, webhook.ID, event.ID()) |
| 275 | return nil, stacktrace.Propagate(err, msg) |
| 276 | } |
| 277 | |
| 278 | request.Header.Add("X-Event-Type", event.Type()) |
| 279 | request.Header.Set("Content-Type", "application/json") |
| 280 | |
| 281 | if strings.TrimSpace(webhook.SigningKey) != "" { |
| 282 | token, err := service.getAuthToken(webhook) |
| 283 | if err != nil { |
| 284 | msg := fmt.Sprintf("cannot generate auth token for user [%s] and webhook [%s]", webhook.UserID, webhook.ID) |
| 285 | return nil, stacktrace.Propagate(err, msg) |
| 286 | } |
| 287 | request.Header.Add("Authorization", fmt.Sprintf("Bearer %s", token)) |
| 288 | } |
| 289 | |
| 290 | return request, nil |
| 291 | } |
| 292 | |
| 293 | func (service *WebhookService) getPayload(ctxLogger telemetry.Logger, event cloudevents.Event, webhook *entities.Webhook) any { |
| 294 | if event.Type() != events.EventTypeMessagePhoneReceived { |
no test coverage detected