Add group announcement edit permissions
This commit is contained in:
+16
-3
@@ -5224,7 +5224,7 @@ func serveIMGroupAnnouncements(wrt http.ResponseWriter, req *http.Request, topic
|
||||
logs.Warn.Println("im group announcement latest: returning empty after store error", principal.TenantID, topic, err)
|
||||
ann = nil
|
||||
}
|
||||
writeIMSuccess(wrt, req, groupAnnouncementPayload(ann))
|
||||
writeIMSuccess(wrt, req, groupAnnouncementPayloadWithPermissions(topic, ann, selfSub))
|
||||
case tail == "announcements/current" && req.Method == http.MethodPut:
|
||||
if !(selfSub.ModeGiven & selfSub.ModeWant).IsAdmin() {
|
||||
writeIMError(wrt, req, http.StatusForbidden, 30005, imReasonPermissionDenied, "permission denied", nil)
|
||||
@@ -5257,7 +5257,7 @@ func serveIMGroupAnnouncements(wrt http.ResponseWriter, req *http.Request, topic
|
||||
return
|
||||
}
|
||||
dispatchIMGroupEvents(principal.TenantID)
|
||||
writeIMSuccess(wrt, req, groupAnnouncementPayload(announcement))
|
||||
writeIMSuccess(wrt, req, groupAnnouncementPayloadWithPermissions(topic, announcement, selfSub))
|
||||
case strings.HasPrefix(tail, "announcements/") && strings.HasSuffix(tail, "/read") && req.Method == http.MethodPost:
|
||||
announcementID := strings.TrimSuffix(strings.TrimPrefix(tail, "announcements/"), "/read")
|
||||
now := time.Now().UTC().Round(time.Millisecond)
|
||||
@@ -5272,7 +5272,7 @@ func serveIMGroupAnnouncements(wrt http.ResponseWriter, req *http.Request, topic
|
||||
logs.Warn.Println("im group announcement get: returning empty after store error", principal.TenantID, topic, err)
|
||||
ann = nil
|
||||
}
|
||||
writeIMSuccess(wrt, req, groupAnnouncementPayload(ann))
|
||||
writeIMSuccess(wrt, req, groupAnnouncementPayloadWithPermissions(topic, ann, selfSub))
|
||||
default:
|
||||
writeIMError(wrt, req, http.StatusMethodNotAllowed, 30002, imReasonMethodNotAllowed, "method not allowed", nil)
|
||||
}
|
||||
@@ -7097,6 +7097,19 @@ func groupAnnouncementPayload(ann *types.GroupAnnouncement) map[string]any {
|
||||
}
|
||||
}
|
||||
|
||||
func groupAnnouncementPayloadWithPermissions(topic string, ann *types.GroupAnnouncement, selfSub *types.Subscription) map[string]any {
|
||||
data := groupAnnouncementPayload(ann)
|
||||
data["topic"] = topic
|
||||
access := types.ModeNone
|
||||
if selfSub != nil {
|
||||
access = selfSub.ModeGiven & selfSub.ModeWant
|
||||
}
|
||||
data["permissions"] = map[string]any{
|
||||
"can_edit": access.IsAdmin(),
|
||||
}
|
||||
return data
|
||||
}
|
||||
|
||||
func groupMutePayload(mute types.GroupMute) map[string]any {
|
||||
data := map[string]any{
|
||||
"user_id": mute.UserID.UserId(),
|
||||
|
||||
Reference in New Issue
Block a user