From cb214d740a9a73b2953163d85b21a2ffcee377f0 Mon Sep 17 00:00:00 2001 From: Kyren223 Date: Mon, 27 Jan 2025 20:10:48 +0200 Subject: Added pings to messages in frequencies --- internal/server/api/api.go | 30 +++++++++++++++++----- .../server/api/migrations/20250127154005_ping.sql | 8 ++++++ 2 files changed, 32 insertions(+), 6 deletions(-) create mode 100644 internal/server/api/migrations/20250127154005_ping.sql (limited to 'internal/server/api') 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; -- cgit v1.3.1