diff options
Diffstat (limited to 'internal/server')
| -rw-r--r-- | internal/server/api/api.go | 37 | ||||
| -rw-r--r-- | internal/server/api/helpers.go | 4 | ||||
| -rw-r--r-- | internal/server/server.go | 2 |
3 files changed, 38 insertions, 5 deletions
diff --git a/internal/server/api/api.go b/internal/server/api/api.go index 533a9b0..74abd94 100644 --- a/internal/server/api/api.go +++ b/internal/server/api/api.go @@ -232,8 +232,6 @@ func GetNetworksInfo(ctx context.Context, sess *session.Session) (packet.Payload }, nil } -// FIXME: Deletion of a network is not handled! -// it needs to be shifted like how it works with frequencies! func SwapUserNetworks(ctx context.Context, sess *session.Session, request *packet.SwapUserNetworks) packet.Payload { queries := data.New(db) pos1, pos2 := int64(request.Pos1), int64(request.Pos2) @@ -259,8 +257,7 @@ func CreateFrequency(ctx context.Context, sess *session.Session, request *packet NetworkID: request.Network, }) if err == sql.ErrNoRows { - log.Println("Err", err) - return &packet.Error{Error: "user entry in network doesn't exist"} + return &packet.Error{Error: "either user or network don't exist"} } if err != nil { log.Println("database error 1:", err) @@ -306,3 +303,35 @@ func CreateFrequency(ctx context.Context, sess *session.Session, request *packet Set: false, } } + +func SwapFrequencies(ctx context.Context, sess *session.Session, request *packet.SwapFrequencies) packet.Payload { + queries := data.New(db) + + // Check if authorized + userNetwork, err := queries.GetUserNetwork(ctx, data.GetUserNetworkParams{ + UserID: sess.ID(), + NetworkID: request.Network, + }) + if err == sql.ErrNoRows { + return &packet.Error{Error: "either user or network don't exist"} + } + if err != nil { + log.Println("database error 1:", err) + return &ErrInternalError + } + if !userNetwork.IsAdmin || !userNetwork.IsMember || userNetwork.IsBanned { + return &ErrPermissionDenied + } + + err = queries.SwapFrequencies(ctx, data.SwapFrequenciesParams{ + Pos1: int64(request.Pos1), + Pos2: int64(request.Pos2), + NetworkID: request.Network, + }) + if err != nil { + log.Println("database error 2:", err) + return &ErrInternalError + } + + return request +} diff --git a/internal/server/api/helpers.go b/internal/server/api/helpers.go index 0918e66..909e232 100644 --- a/internal/server/api/helpers.go +++ b/internal/server/api/helpers.go @@ -1,6 +1,8 @@ package api -import "strings" +import ( + "strings" +) const hex = "0123456789abcdefABCDEF" diff --git a/internal/server/server.go b/internal/server/server.go index b6c4aad..edad545 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -320,6 +320,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.SwapFrequencies: + response = timeout(5*time.Millisecond, api.SwapFrequencies, ctx, sess, request) case *packet.SendMessage: response = timeout(20*time.Millisecond, api.SendMessage, ctx, sess, request) |
