From 43bd630ecb9470b997c9f8fa47aa6960ac551faa Mon Sep 17 00:00:00 2001 From: Kyren223 Date: Tue, 14 Jan 2025 17:33:15 +0200 Subject: Implemented updating frequency properties both client-side and server-side --- internal/server/api/api.go | 59 ++++++++++++++++++++++++++++++++++++++++++++++ internal/server/server.go | 2 ++ 2 files changed, 61 insertions(+) (limited to 'internal/server') diff --git a/internal/server/api/api.go b/internal/server/api/api.go index b11bf36..a19e4dc 100644 --- a/internal/server/api/api.go +++ b/internal/server/api/api.go @@ -761,3 +761,62 @@ func UpdateNetwork(ctx context.Context, sess *session.Session, request *packet.U Partial: true, }) } + +func UpdateFrequency(ctx context.Context, sess *session.Session, request *packet.UpdateFrequency) packet.Payload { + queries := data.New(db) + + frequency, err := queries.GetFrequencyById(ctx, request.Frequency) + if err == sql.ErrNoRows { + return &packet.Error{Error: "frequency doesn't exist"} + } + if err != nil { + log.Println("database error 0:", err) + return &ErrInternalError + } + + isAdmin, err := IsNetworkAdmin(ctx, queries, sess.ID(), frequency.NetworkID) + if err == sql.ErrNoRows { + return &packet.Error{Error: "either network doesn't exist or user is not apart of this network"} + } + if err != nil { + log.Println("database error 1:", err) + return &ErrInternalError + } + if !isAdmin { + return &ErrPermissionDenied + } + + if len(request.Name) > packet.MaxFrequencyName { + return &packet.Error{Error: fmt.Sprintf( + "exceeded allowed frequency name length, max %v bytes", + packet.MaxFrequencyName, + )} + } + + if ok, err := isValidHexColor(request.HexColor); !ok { + return &packet.Error{Error: err} + } + + if request.Perms < 0 || request.Perms >= packet.PermMax { + return &packet.Error{Error: fmt.Sprintf( + "exceeded allowed perms value: 0 <= perms < %v", packet.PermMax, + )} + } + + frequency, err = queries.UpdateFrequency(ctx, data.UpdateFrequencyParams{ + Name: request.Name, + HexColor: request.HexColor, + Perms: int64(request.Perms), + ID: frequency.ID, + }) + if err != nil { + log.Println("database error 2:", err) + return &ErrInternalError + } + + return NetworkPropagate(ctx, sess, frequency.NetworkID, &packet.FrequenciesInfo{ + RemovedFrequencies: nil, + Frequencies: []data.Frequency{frequency}, + Network: frequency.NetworkID, + }) +} diff --git a/internal/server/server.go b/internal/server/server.go index 3bce2de..26ab7b7 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -352,6 +352,8 @@ func processRequest(ctx context.Context, sess *session.Session, request packet.P case *packet.CreateFrequency: response = timeout(5*time.Millisecond, api.CreateFrequency, ctx, sess, request) + case *packet.UpdateFrequency: + response = timeout(5*time.Millisecond, api.UpdateFrequency, ctx, sess, request) case *packet.DeleteFrequency: response = timeout(200*time.Millisecond, api.DeleteFrequency, ctx, sess, request) case *packet.SwapFrequencies: -- cgit v1.3.1