summaryrefslogtreecommitdiff
path: root/internal/server
diff options
context:
space:
mode:
authorKyren223 <Kyren223@proton.me>2024-12-01 16:03:31 +0200
committerKyren223 <Kyren223@proton.me>2024-12-01 16:03:31 +0200
commite00a17a2f483fc00d5daecb3426c29a6c8598492 (patch)
treeecfb4100072db4ea043ce6e64377a6f3c4d72c43 /internal/server
parent3e9c0ee6a1e765d42d54acb71c10ae7e67353a17 (diff)
Added swap frequencies support on server-side
Diffstat (limited to 'internal/server')
-rw-r--r--internal/server/api/api.go37
-rw-r--r--internal/server/api/helpers.go4
-rw-r--r--internal/server/server.go2
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)