Compare commits

..

No commits in common. "8567ce7d1779657a8fb81ac9064f2fccb1a815bb" and "b3b1ec4585242a471b62d59eb889ef47774cfd17" have entirely different histories.

3 changed files with 12 additions and 30 deletions

View File

@ -47,11 +47,7 @@ func addChannelMember(c *fiber.Ctx) error {
Alias: alias, Alias: alias,
}).First(&channel).Error; err != nil { }).First(&channel).Error; err != nil {
return fiber.NewError(fiber.StatusNotFound, err.Error()) return fiber.NewError(fiber.StatusNotFound, err.Error())
} else if channel.Type == models.ChannelTypeDirect { } else if member, err := services.GetChannelMember(user, channel.ID); err != nil {
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()) return fiber.NewError(fiber.StatusForbidden, err.Error())
} else if member.PowerLevel < 50 { } else if member.PowerLevel < 50 {
return fiber.NewError(fiber.StatusForbidden, "you must be a moderator of a channel to add member into it") return fiber.NewError(fiber.StatusForbidden, "you must be a moderator of a channel to add member into it")
@ -89,11 +85,7 @@ func removeChannelMember(c *fiber.Ctx) error {
AccountID: user.ID, AccountID: user.ID,
}).First(&channel).Error; err != nil { }).First(&channel).Error; err != nil {
return fiber.NewError(fiber.StatusNotFound, err.Error()) return fiber.NewError(fiber.StatusNotFound, err.Error())
} else if channel.Type == models.ChannelTypeDirect { } else if member, err := services.GetChannelMember(user, channel.ID); err != nil {
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()) return fiber.NewError(fiber.StatusForbidden, err.Error())
} else if member.PowerLevel < 50 { } else if member.PowerLevel < 50 {
return fiber.NewError(fiber.StatusForbidden, "you must be a moderator of a channel to remove member into it") return fiber.NewError(fiber.StatusForbidden, "you must be a moderator of a channel to remove member into it")

View File

@ -209,7 +209,7 @@ func deleteChannel(c *fiber.Ctx) error {
tx = tx.Where("realm_id = ?", val.ID) tx = tx.Where("realm_id = ?", val.ID)
} }
} else { } else {
tx = tx.Where("(account_id = ? OR type = ?) AND realm_id IS NULL", user.ID, models.ChannelTypeDirect) tx = tx.Where("account_id = ? AND realm_id IS NULL", user.ID)
} }
var channel models.Channel var channel models.Channel
@ -217,14 +217,6 @@ func deleteChannel(c *fiber.Ctx) error {
return fiber.NewError(fiber.StatusNotFound, err.Error()) return fiber.NewError(fiber.StatusNotFound, err.Error())
} }
if channel.Type == models.ChannelTypeDirect {
if member, err := services.GetChannelMember(user, channel.ID); err != nil {
return fiber.NewError(fiber.StatusForbidden, "you must related to this direct message if you want delete it")
} else if member.PowerLevel < 100 {
return fiber.NewError(fiber.StatusForbidden, "you must be a moderator of this direct message if you want delete it")
}
}
if err := services.DeleteChannel(channel); err != nil { if err := services.DeleteChannel(channel); err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error()) return fiber.NewError(fiber.StatusBadRequest, err.Error())
} }

View File

@ -1,12 +1,11 @@
package server package server
import ( import (
"fmt"
"git.solsynth.dev/hydrogen/messaging/pkg/database" "git.solsynth.dev/hydrogen/messaging/pkg/database"
"git.solsynth.dev/hydrogen/messaging/pkg/models" "git.solsynth.dev/hydrogen/messaging/pkg/models"
"git.solsynth.dev/hydrogen/messaging/pkg/services" "git.solsynth.dev/hydrogen/messaging/pkg/services"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"github.com/samber/lo"
) )
func createDirectChannel(c *fiber.Ctx) error { func createDirectChannel(c *fiber.Ctx) error {
@ -16,7 +15,7 @@ func createDirectChannel(c *fiber.Ctx) error {
Alias string `json:"alias" validate:"required,lowercase,min=4,max=32"` Alias string `json:"alias" validate:"required,lowercase,min=4,max=32"`
Name string `json:"name" validate:"required"` Name string `json:"name" validate:"required"`
Description string `json:"description"` Description string `json:"description"`
RelatedUser uint `json:"related_user"` Members []uint `json:"members"`
IsEncrypted bool `json:"is_encrypted"` IsEncrypted bool `json:"is_encrypted"`
} }
@ -37,11 +36,9 @@ func createDirectChannel(c *fiber.Ctx) error {
} }
} }
var relatedUser models.Account var members []models.Account
if err := database.C. if err := database.C.Where("id IN ?", data.Members).Find(&members).Error; err != nil {
Where("external_id = ?", data.RelatedUser). return fiber.NewError(fiber.StatusBadRequest, err.Error())
First(&relatedUser).Error; err != nil {
return fiber.NewError(fiber.StatusBadRequest, fmt.Sprintf("unable to find related user: %v", err))
} }
channel := models.Channel{ channel := models.Channel{
@ -51,10 +48,11 @@ func createDirectChannel(c *fiber.Ctx) error {
IsEncrypted: data.IsEncrypted, IsEncrypted: data.IsEncrypted,
AccountID: user.ID, AccountID: user.ID,
Type: models.ChannelTypeDirect, Type: models.ChannelTypeDirect,
Members: []models.ChannelMember{ Members: append([]models.ChannelMember{
{AccountID: user.ID, PowerLevel: 100}, {AccountID: user.ID, PowerLevel: 100},
{AccountID: relatedUser.ID, PowerLevel: 100}, }, lo.Map(members, func(item models.Account, idx int) models.ChannelMember {
}, return models.ChannelMember{AccountID: item.ID, PowerLevel: 100}
})...),
} }
if realm != nil { if realm != nil {