summaryrefslogtreecommitdiff
path: root/internal/server/api
diff options
context:
space:
mode:
authorKyren223 <Kyren223@proton.me>2025-01-27 20:10:48 +0200
committerKyren223 <Kyren223@proton.me>2025-01-27 20:10:48 +0200
commitcb214d740a9a73b2953163d85b21a2ffcee377f0 (patch)
treeaaab8b5ca36c5bf6ea9589468e61c08c26d0c614 /internal/server/api
parentb2bd96e46b51b38a05e6cc6649058f8ad0a3b6e8 (diff)
Added pings to messages in frequencies
Diffstat (limited to 'internal/server/api')
-rw-r--r--internal/server/api/api.go30
-rw-r--r--internal/server/api/migrations/20250127154005_ping.sql8
2 files changed, 32 insertions, 6 deletions
diff --git a/internal/server/api/api.go b/internal/server/api/api.go
index d7a0ef5..3fff656 100644
--- a/internal/server/api/api.go
+++ b/internal/server/api/api.go
@@ -71,19 +71,36 @@ func SendMessage(ctx context.Context, sess *session.Session, request *packet.Sen
}
if frequency.Perms != packet.PermReadWrite && !member.IsAdmin {
- log.Println("No perms")
return &ErrPermissionDenied
}
+ if request.Ping != nil {
+ if *request.Ping == packet.PingEveryone {
+ if !member.IsAdmin {
+ return &ErrPermissionDenied
+ }
+ } else if *request.Ping != packet.PingAdmins {
+ _, err := queries.GetUserById(ctx, *request.Ping)
+ if err == sql.ErrNoRows {
+ return &packet.Error{Error: "pinged user doesn't exist"}
+ }
+ if err != nil {
+ log.Println("database error 2:", err)
+ return &ErrInternalError
+ }
+ }
+ }
+
message, err := queries.CreateMessage(ctx, data.CreateMessageParams{
ID: sess.Manager().Node().Generate(),
SenderID: sess.ID(),
Content: content,
FrequencyID: request.FrequencyID,
ReceiverID: nil,
+ Ping: request.Ping,
})
if err != nil {
- log.Println(sess.Addr(), "database error 2:", err)
+ log.Println("database error 3:", err)
return &ErrInternalError
}
@@ -105,7 +122,7 @@ func SendMessage(ctx context.Context, sess *session.Session, request *packet.Sen
return &packet.Error{Error: "user doesn't exist"}
}
if err != nil {
- log.Println(sess.Addr(), "database error 3:", err)
+ log.Println("database error 4:", err)
return &ErrInternalError
}
if !user.IsPublicDM {
@@ -117,7 +134,7 @@ func SendMessage(ctx context.Context, sess *session.Session, request *packet.Sen
return &ErrPermissionDenied
}
if err != nil {
- log.Println(sess.Addr(), "database error 4:", err)
+ log.Println("database error 5:", err)
return &ErrInternalError
}
if !bytes.Equal(sess.PubKey, pubKey) {
@@ -127,13 +144,14 @@ func SendMessage(ctx context.Context, sess *session.Session, request *packet.Sen
message, err := queries.CreateMessage(ctx, data.CreateMessageParams{
ID: sess.Manager().Node().Generate(),
- SenderID: sess.ID(),
Content: content,
+ SenderID: sess.ID(),
FrequencyID: nil,
ReceiverID: request.ReceiverID,
+ Ping: nil,
})
if err != nil {
- log.Println(sess.Addr(), "database error 5:", err)
+ log.Println("database error 6:", err)
return &ErrInternalError
}
diff --git a/internal/server/api/migrations/20250127154005_ping.sql b/internal/server/api/migrations/20250127154005_ping.sql
new file mode 100644
index 0000000..54f207a
--- /dev/null
+++ b/internal/server/api/migrations/20250127154005_ping.sql
@@ -0,0 +1,8 @@
+-- +goose Up
+ALTER TABLE messages ADD ping INTEGER DEFAULT NULL;
+-- Must be null if freuqencyId is null
+-- 0 - @ping:everyone, 1 - @ping:admins, otherwise references userId
+
+
+-- +goose Down
+ALTER TABLE messages DROP ping;