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

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
}
task, is := event["Task"].(map[string]interface{})
task, is := event["task"].(map[string]interface{})
if !is {
log.Errorf("Event payload does not contain task ID")
log.Errorf("Event payload does not contain task")
return
}
@ -677,30 +677,28 @@ type WebhookPayload struct {
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 {
if task, has := eventPayload["task"]; has {
t := task.(map[string]interface{})
if projectID, has := t["project_id"]; has {
switch v := projectID.(type) {
case int64:
return v
case float64:
return int64(v)
}
return projectID.(int64)
return getIDAsInt64(projectID)
}
}
if project, has := eventPayload["project"]; has {
t := project.(map[string]interface{})
if projectID, has := t["id"]; has {
switch v := projectID.(type) {
case int64:
return v
case float64:
return int64(v)
}
return projectID.(int64)
return getIDAsInt64(projectID)
}
}
@ -739,7 +737,6 @@ func (wl *WebhookListener) Handle(msg *message.Message) (err error) {
break
}
}
}
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)
task, err := GetTaskByIDSimple(s, la.TaskID)
if err != nil {
return err
}
return events.Dispatch(&TaskAssigneeDeletedEvent{
Task: &Task{ID: la.TaskID},
Task: &task,
Assignee: &user.User{ID: la.UserID},
Doer: doer,
})

View File

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

View File

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

View File

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