Skip to content

Commit 2783f9c

Browse files
committed
fix(integrations): null pointer
1 parent 4536268 commit 2783f9c

File tree

3 files changed

+231
-58
lines changed

3 files changed

+231
-58
lines changed

api/integration.go

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -255,12 +255,17 @@ func MatchCompare(value any, method db.IntegrationMatchMethodType, expected stri
255255
}
256256
}
257257

258-
func GetTaskDefinition(integration db.Integration, payload []byte, r *http.Request) (taskDefinition db.Task, err error) {
258+
func GetTaskDefinition(
259+
integration db.Integration,
260+
payload []byte,
261+
h http.Header,
262+
extractorCreator func(projectID, integrationID int) ([]db.IntegrationExtractValue, error),
263+
) (taskDefinition db.Task, err error) {
259264

260265
var envValues = make([]db.IntegrationExtractValue, 0)
261266
var taskValues = make([]db.IntegrationExtractValue, 0)
262267

263-
extractValuesForExtractor, err := helpers.Store(r).GetIntegrationExtractValues(integration.ProjectID, db.RetrieveQueryParams{}, integration.ID)
268+
extractValuesForExtractor, err := extractorCreator(integration.ProjectID, integration.ID)
264269
if err != nil {
265270
return
266271
}
@@ -274,14 +279,15 @@ func GetTaskDefinition(integration db.Integration, payload []byte, r *http.Reque
274279
}
275280
}
276281

277-
var extractedEnvResults = Extract(envValues, r, payload)
282+
var extractedEnvResults = Extract(envValues, h, payload)
278283

279284
if integration.TaskParams != nil {
280285
taskDefinition = integration.TaskParams.CreateTask(integration.TemplateID)
281286
} else {
282287
taskDefinition = db.Task{
283288
ProjectID: integration.ProjectID,
284289
TemplateID: integration.TemplateID,
290+
Params: make(db.MapStringAnyField),
285291
}
286292
}
287293

@@ -311,7 +317,7 @@ func GetTaskDefinition(integration db.Integration, payload []byte, r *http.Reque
311317

312318
taskDefinition.Environment = string(envStr)
313319

314-
extractedTaskResults := ExtractAsAnyForTaskParams(taskValues, r, payload)
320+
extractedTaskResults := ExtractAsAnyForTaskParams(taskValues, h, payload)
315321
for k, v := range extractedTaskResults {
316322
taskDefinition.Params[k] = v
317323
}
@@ -323,7 +329,10 @@ func RunIntegration(integration db.Integration, project db.Project, r *http.Requ
323329

324330
log.Info(fmt.Sprintf("Running integration %d", integration.ID))
325331

326-
taskDefinition, err := GetTaskDefinition(integration, payload, r)
332+
taskDefinition, err := GetTaskDefinition(
333+
integration, payload, r.Header, func(projectID, integrationID int) ([]db.IntegrationExtractValue, error) {
334+
return helpers.Store(r).GetIntegrationExtractValues(projectID, db.RetrieveQueryParams{}, integrationID)
335+
})
327336
if err != nil {
328337
log.WithError(err).WithFields(log.Fields{
329338
"context": "integrations",
@@ -347,13 +356,13 @@ func RunIntegration(integration db.Integration, project db.Project, r *http.Requ
347356
}
348357
}
349358

350-
func Extract(extractValues []db.IntegrationExtractValue, r *http.Request, payload []byte) (result map[string]string) {
359+
func Extract(extractValues []db.IntegrationExtractValue, h http.Header, payload []byte) (result map[string]string) {
351360
result = make(map[string]string)
352361

353362
for _, extractValue := range extractValues {
354363
switch extractValue.ValueSource {
355364
case db.IntegrationExtractHeaderValue:
356-
result[extractValue.Variable] = r.Header.Get(extractValue.Key)
365+
result[extractValue.Variable] = h.Get(extractValue.Key)
357366
case db.IntegrationExtractBodyValue:
358367
switch extractValue.BodyDataType {
359368
case db.IntegrationBodyDataJSON:
@@ -367,15 +376,15 @@ func Extract(extractValues []db.IntegrationExtractValue, r *http.Request, payloa
367376
return
368377
}
369378

370-
func ExtractAsAnyForTaskParams(extractValues []db.IntegrationExtractValue, r *http.Request, payload []byte) db.MapStringAnyField {
379+
func ExtractAsAnyForTaskParams(extractValues []db.IntegrationExtractValue, h http.Header, payload []byte) db.MapStringAnyField {
371380
// Create a result map that accepts any type
372381
result := make(db.MapStringAnyField)
373382

374383
for _, extractValue := range extractValues {
375384
switch extractValue.ValueSource {
376385
case db.IntegrationExtractHeaderValue:
377386
// Extract the header value
378-
result[extractValue.Variable] = r.Header.Get(extractValue.Key)
387+
result[extractValue.Variable] = h.Get(extractValue.Key)
379388

380389
case db.IntegrationExtractBodyValue:
381390
switch extractValue.BodyDataType {

0 commit comments

Comments
 (0)