summaryrefslogtreecommitdiff
path: root/internal/server
diff options
context:
space:
mode:
Diffstat (limited to 'internal/server')
-rw-r--r--internal/server/api/api.go59
-rw-r--r--internal/server/server.go2
2 files changed, 61 insertions, 0 deletions
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: