summaryrefslogtreecommitdiff
path: root/internal/server
diff options
context:
space:
mode:
authorKyren223 <Kyren223@proton.me>2025-01-21 17:56:54 +0200
committerKyren223 <Kyren223@proton.me>2025-01-21 17:56:54 +0200
commit7a791d7e940a74860fe0a1dad908eddf2585797a (patch)
treedcfbc0ef44c7b144a24ddb17d232cd06c0c280c4 /internal/server
parentad58adeeb296b39d68fcfdffed99f84dd74d251e (diff)
Admins can no longer ban/mute/kick each other, they can still delete
each others messages (to save some time having to query the sender ID to see if he's an admin)
Diffstat (limited to 'internal/server')
-rw-r--r--internal/server/api/api.go11
1 files changed, 5 insertions, 6 deletions
diff --git a/internal/server/api/api.go b/internal/server/api/api.go
index 2d70174..bddc43d 100644
--- a/internal/server/api/api.go
+++ b/internal/server/api/api.go
@@ -557,6 +557,7 @@ func SetMember(ctx context.Context, sess *session.Session, request *packet.SetMe
return &ErrInternalError
}
+ isSessOwner := sess.ID() == network.OwnerID
isSessAdmin, err := IsNetworkAdmin(ctx, queries, sess.ID(), request.Network)
if err != nil {
log.Println("database error 7:", err)
@@ -571,7 +572,7 @@ func SetMember(ctx context.Context, sess *session.Session, request *packet.SetMe
if request.Member != nil && !IsBanned {
isLeave := !*request.Member && request.User == sess.ID()
- isKick := !*request.Member && isSessAdmin
+ isKick := !*request.Member && isSessAdmin && (!isAdmin || isSessOwner)
if request.User != network.OwnerID && (isLeave || isKick) {
isMember = false
isAdmin = false // Important for security
@@ -581,19 +582,17 @@ func SetMember(ctx context.Context, sess *session.Session, request *packet.SetMe
isMember = true
}
} else if request.Admin != nil {
- if network.OwnerID == sess.ID() && request.User != sess.ID() {
+ if isSessOwner && request.User != sess.ID() {
isAdmin = *request.Admin
}
} else if request.Muted != nil {
notSelf := request.User != sess.ID()
- notOwner := request.User != network.OwnerID
- if isSessAdmin && notSelf && notOwner {
+ if isSessAdmin && notSelf && (!isAdmin || isSessOwner) {
isMuted = *request.Muted
}
} else if request.Banned != nil {
notSelf := request.User != sess.ID()
- notOwner := request.User != network.OwnerID
- if isSessAdmin && notSelf && notOwner {
+ if isSessAdmin && notSelf && (!isAdmin || isSessOwner) {
IsBanned = *request.Banned
banReason = request.BanReason
isAdmin = false // Important for security