fix(webhooks): make sure all events with tasks have the full task
Some checks failed
continuous-integration/drone/push Build is failing

Resolves vikunja/api#1676
This commit is contained in:
kolaente 2024-01-27 00:16:17 +01:00
parent d38050f2b8
commit ae9b382963
Signed by: konrad
GPG Key ID: F40E70337AB24C9B
5 changed files with 50 additions and 23 deletions

View File

@ -470,9 +470,9 @@ func (s *HandleTaskUpdateLastUpdated) Handle(msg *message.Message) (err error) {
return err return err
} }
task, is := event["Task"].(map[string]interface{}) task, is := event["task"].(map[string]interface{})
if !is { if !is {
log.Errorf("Event payload does not contain task ID") log.Errorf("Event payload does not contain task")
return return
} }
@ -677,30 +677,28 @@ type WebhookPayload struct {
Data interface{} `json:"data"` Data interface{} `json:"data"`
} }
func getIDAsInt64(id interface{}) int64 {
switch v := id.(type) {
case int64:
return v
case float64:
return int64(v)
}
return id.(int64)
}
func getProjectIDFromAnyEvent(eventPayload map[string]interface{}) int64 { func getProjectIDFromAnyEvent(eventPayload map[string]interface{}) int64 {
if task, has := eventPayload["task"]; has { if task, has := eventPayload["task"]; has {
t := task.(map[string]interface{}) t := task.(map[string]interface{})
if projectID, has := t["project_id"]; has { if projectID, has := t["project_id"]; has {
switch v := projectID.(type) { return getIDAsInt64(projectID)
case int64:
return v
case float64:
return int64(v)
}
return projectID.(int64)
} }
} }
if project, has := eventPayload["project"]; has { if project, has := eventPayload["project"]; has {
t := project.(map[string]interface{}) t := project.(map[string]interface{})
if projectID, has := t["id"]; has { if projectID, has := t["id"]; has {
switch v := projectID.(type) { return getIDAsInt64(projectID)
case int64:
return v
case float64:
return int64(v)
}
return projectID.(int64)
} }
} }
@ -739,7 +737,6 @@ func (wl *WebhookListener) Handle(msg *message.Message) (err error) {
break break
} }
} }
} }
if webhook == nil { if webhook == nil {

View File

@ -184,8 +184,13 @@ func (la *TaskAssginee) Delete(s *xorm.Session, a web.Auth) (err error) {
} }
doer, _ := user.GetFromAuth(a) doer, _ := user.GetFromAuth(a)
task, err := GetTaskByIDSimple(s, la.TaskID)
if err != nil {
return err
}
return events.Dispatch(&TaskAssigneeDeletedEvent{ return events.Dispatch(&TaskAssigneeDeletedEvent{
Task: &Task{ID: la.TaskID}, Task: &task,
Assignee: &user.User{ID: la.UserID}, Assignee: &user.User{ID: la.UserID},
Doer: doer, Doer: doer,
}) })

View File

@ -86,8 +86,13 @@ func (ta *TaskAttachment) NewAttachment(s *xorm.Session, f io.ReadCloser, realna
return err return err
} }
task, err := GetTaskByIDSimple(s, ta.TaskID)
if err != nil {
return err
}
return events.Dispatch(&TaskAttachmentCreatedEvent{ return events.Dispatch(&TaskAttachmentCreatedEvent{
Task: &Task{ID: ta.TaskID}, Task: &task,
Attachment: ta, Attachment: ta,
Doer: ta.CreatedBy, Doer: ta.CreatedBy,
}) })
@ -220,8 +225,13 @@ func (ta *TaskAttachment) Delete(s *xorm.Session, a web.Auth) error {
} }
doer, _ := user.GetFromAuth(a) doer, _ := user.GetFromAuth(a)
task, err := GetTaskByIDSimple(s, ta.TaskID)
if err != nil {
return err
}
return events.Dispatch(&TaskAttachmentDeletedEvent{ return events.Dispatch(&TaskAttachmentDeletedEvent{
Task: &Task{ID: ta.TaskID}, Task: &task,
Attachment: ta, Attachment: ta,
Doer: doer, Doer: doer,
}) })

View File

@ -114,8 +114,13 @@ func (tc *TaskComment) Delete(s *xorm.Session, _ web.Auth) error {
return err return err
} }
task, err := GetTaskByIDSimple(s, tc.TaskID)
if err != nil {
return err
}
return events.Dispatch(&TaskCommentDeletedEvent{ return events.Dispatch(&TaskCommentDeletedEvent{
Task: &Task{ID: tc.TaskID}, Task: &task,
Comment: tc, Comment: tc,
Doer: tc.Author, Doer: tc.Author,
}) })

View File

@ -201,8 +201,13 @@ func (rel *TaskRelation) Create(s *xorm.Session, a web.Auth) error {
} }
doer, _ := user.GetFromAuth(a) doer, _ := user.GetFromAuth(a)
task, err := GetTaskByIDSimple(s, rel.TaskID)
if err != nil {
return err
}
return events.Dispatch(&TaskRelationCreatedEvent{ return events.Dispatch(&TaskRelationCreatedEvent{
Task: &Task{ID: rel.TaskID}, Task: &task,
Relation: rel, Relation: rel,
Doer: doer, Doer: doer,
}) })
@ -261,8 +266,13 @@ func (rel *TaskRelation) Delete(s *xorm.Session, a web.Auth) error {
} }
doer, _ := user.GetFromAuth(a) doer, _ := user.GetFromAuth(a)
task, err := GetTaskByIDSimple(s, rel.TaskID)
if err != nil {
return err
}
return events.Dispatch(&TaskRelationDeletedEvent{ return events.Dispatch(&TaskRelationDeletedEvent{
Task: &Task{ID: rel.TaskID}, Task: &task,
Relation: rel, Relation: rel,
Doer: doer, Doer: doer,
}) })