diff --git a/pkg/server/channel_members_api.go b/pkg/server/channel_members_api.go index 33adc59..8865297 100644 --- a/pkg/server/channel_members_api.go +++ b/pkg/server/channel_members_api.go @@ -47,7 +47,11 @@ func addChannelMember(c *fiber.Ctx) error { Alias: alias, }).First(&channel).Error; err != nil { return fiber.NewError(fiber.StatusNotFound, err.Error()) - } else if member, err := services.GetChannelMember(user, channel.ID); err != nil { + } else if channel.Type == models.ChannelTypeDirect { + return fiber.NewError(fiber.StatusBadRequest, "direct message member changes was not allowed") + } + + if member, err := services.GetChannelMember(user, channel.ID); err != nil { return fiber.NewError(fiber.StatusForbidden, err.Error()) } else if member.PowerLevel < 50 { return fiber.NewError(fiber.StatusForbidden, "you must be a moderator of a channel to add member into it") @@ -85,7 +89,11 @@ func removeChannelMember(c *fiber.Ctx) error { AccountID: user.ID, }).First(&channel).Error; err != nil { return fiber.NewError(fiber.StatusNotFound, err.Error()) - } else if member, err := services.GetChannelMember(user, channel.ID); err != nil { + } else if channel.Type == models.ChannelTypeDirect { + return fiber.NewError(fiber.StatusBadRequest, "direct message member changes was not allowed") + } + + if member, err := services.GetChannelMember(user, channel.ID); err != nil { return fiber.NewError(fiber.StatusForbidden, err.Error()) } else if member.PowerLevel < 50 { return fiber.NewError(fiber.StatusForbidden, "you must be a moderator of a channel to remove member into it") diff --git a/pkg/server/direct_channels_api.go b/pkg/server/direct_channels_api.go index a2194d0..add4ad0 100644 --- a/pkg/server/direct_channels_api.go +++ b/pkg/server/direct_channels_api.go @@ -1,11 +1,12 @@ package server import ( + "fmt" + "git.solsynth.dev/hydrogen/messaging/pkg/database" "git.solsynth.dev/hydrogen/messaging/pkg/models" "git.solsynth.dev/hydrogen/messaging/pkg/services" "github.com/gofiber/fiber/v2" - "github.com/samber/lo" ) func createDirectChannel(c *fiber.Ctx) error { @@ -15,7 +16,7 @@ func createDirectChannel(c *fiber.Ctx) error { Alias string `json:"alias" validate:"required,lowercase,min=4,max=32"` Name string `json:"name" validate:"required"` Description string `json:"description"` - Members []uint `json:"members"` + RelatedUser uint `json:"related_user"` IsEncrypted bool `json:"is_encrypted"` } @@ -36,9 +37,9 @@ func createDirectChannel(c *fiber.Ctx) error { } } - var members []models.Account - if err := database.C.Where("id IN ?", data.Members).Find(&members).Error; err != nil { - return fiber.NewError(fiber.StatusBadRequest, err.Error()) + var relatedUser models.Account + if err := database.C.Where("id = ?", data.RelatedUser).First(&relatedUser).Error; err != nil { + return fiber.NewError(fiber.StatusBadRequest, fmt.Sprintf("unable to find related user: %v", err)) } channel := models.Channel{ @@ -48,11 +49,10 @@ func createDirectChannel(c *fiber.Ctx) error { IsEncrypted: data.IsEncrypted, AccountID: user.ID, Type: models.ChannelTypeDirect, - Members: append([]models.ChannelMember{ + Members: []models.ChannelMember{ {AccountID: user.ID, PowerLevel: 100}, - }, lo.Map(members, func(item models.Account, idx int) models.ChannelMember { - return models.ChannelMember{AccountID: item.ID, PowerLevel: 100} - })...), + {AccountID: relatedUser.ID, PowerLevel: 100}, + }, } if realm != nil {