summaryrefslogtreecommitdiff
path: root/internal/server
diff options
context:
space:
mode:
authorKyren223 <Kyren223@proton.me>2025-01-14 16:31:32 +0200
committerKyren223 <Kyren223@proton.me>2025-01-14 16:31:32 +0200
commit8184c8d18799feb7ef0aa0eed7e5a2e67a01c791 (patch)
tree45a0174ed90b11c6ce89db06ee7237e6ae4dad20 /internal/server
parentfa2ba2fe8bf24cc9ddc28ec30ea64647d17af1d6 (diff)
Added a way to change network properties both server side and client
side
Diffstat (limited to 'internal/server')
-rw-r--r--internal/server/api/api.go75
-rw-r--r--internal/server/server.go2
2 files changed, 77 insertions, 0 deletions
diff --git a/internal/server/api/api.go b/internal/server/api/api.go
index 9a0ef76..b11bf36 100644
--- a/internal/server/api/api.go
+++ b/internal/server/api/api.go
@@ -166,6 +166,11 @@ func CreateNetwork(ctx context.Context, sess *session.Session, request *packet.C
if name == "" {
return &packet.Error{Error: "server name must not be blank"}
}
+ if len(name) > packet.MaxNetworkNameBytes {
+ return &packet.Error{Error: fmt.Sprintf(
+ "network name may not exceed %v bytes", packet.MaxNetworkNameBytes,
+ )}
+ }
if len(request.Icon) > packet.MaxIconBytes {
return &packet.Error{Error: fmt.Sprintf(
@@ -251,6 +256,7 @@ func CreateNetwork(ctx context.Context, sess *session.Session, request *packet.C
return &packet.NetworksInfo{
Networks: []packet.FullNetwork{fullNetwork},
RemovedNetworks: nil,
+ Partial: false,
}
}
@@ -299,6 +305,7 @@ func GetNetworksInfo(ctx context.Context, sess *session.Session) (packet.Payload
return &packet.NetworksInfo{
Networks: fullNetworks,
RemovedNetworks: nil,
+ Partial: false,
}, nil
}
@@ -460,6 +467,7 @@ func DeleteNetwork(ctx context.Context, sess *session.Session, request *packet.D
return NetworkPropagate(ctx, sess, network.ID, &packet.NetworksInfo{
Networks: nil,
RemovedNetworks: []snowflake.ID{request.Network},
+ Partial: false,
})
}
@@ -527,6 +535,7 @@ func SetMember(ctx context.Context, sess *session.Session, request *packet.SetMe
Users: users,
}},
RemovedNetworks: nil,
+ Partial: false,
}
}
@@ -603,6 +612,7 @@ func SetMember(ctx context.Context, sess *session.Session, request *packet.SetMe
return &packet.NetworksInfo{
Networks: nil,
RemovedNetworks: []snowflake.ID{request.Network},
+ Partial: false,
}
}
@@ -642,6 +652,7 @@ func SetMember(ctx context.Context, sess *session.Session, request *packet.SetMe
Users: users,
}},
RemovedNetworks: nil,
+ Partial: false,
}
}
@@ -686,3 +697,67 @@ func GetUserData(ctx context.Context, sess *session.Session, request *packet.Get
Data: data,
}
}
+
+func UpdateNetwork(ctx context.Context, sess *session.Session, request *packet.UpdateNetwork) packet.Payload {
+ queries := data.New(db)
+
+ network, err := queries.GetNetworkById(ctx, request.Network)
+ if err == sql.ErrNoRows {
+ return &packet.Error{Error: "network doesn't exist"}
+ }
+ if err != nil {
+ log.Println("database error 0:", err)
+ return &ErrInternalError
+ }
+
+ if network.OwnerID != sess.ID() {
+ return &ErrPermissionDenied
+ }
+
+ name := strings.TrimSpace(request.Name)
+ if name == "" {
+ return &packet.Error{Error: "server name must not be blank"}
+ }
+ if len(name) > packet.MaxNetworkNameBytes {
+ return &packet.Error{Error: fmt.Sprintf(
+ "network name may not exceed %v bytes", packet.MaxNetworkNameBytes,
+ )}
+ }
+
+ if len(request.Icon) > packet.MaxIconBytes {
+ return &packet.Error{Error: fmt.Sprintf(
+ "exceeded allowed icon size in bytes: %v", packet.MaxIconBytes,
+ )}
+ }
+
+ if ok, err := isValidHexColor(request.BgHexColor); !ok {
+ return &packet.Error{Error: err}
+ }
+ if ok, err := isValidHexColor(request.FgHexColor); !ok {
+ return &packet.Error{Error: err}
+ }
+
+ network, err = queries.UpdateNetwork(ctx, data.UpdateNetworkParams{
+ Name: name,
+ Icon: request.Icon,
+ BgHexColor: request.BgHexColor,
+ FgHexColor: request.FgHexColor,
+ IsPublic: request.IsPublic,
+ ID: network.ID,
+ })
+ if err != nil {
+ log.Println("database error 1:", err)
+ return &ErrInternalError
+ }
+
+ return NetworkPropagate(ctx, sess, network.ID, &packet.NetworksInfo{
+ Networks: []packet.FullNetwork{{
+ Network: network,
+ Frequencies: nil,
+ Members: nil,
+ Users: nil,
+ }},
+ RemovedNetworks: nil,
+ Partial: true,
+ })
+}
diff --git a/internal/server/server.go b/internal/server/server.go
index 327eaa8..3bce2de 100644
--- a/internal/server/server.go
+++ b/internal/server/server.go
@@ -345,6 +345,8 @@ func processRequest(ctx context.Context, sess *session.Session, request packet.P
case *packet.CreateNetwork:
response = timeout(10*time.Millisecond, api.CreateNetwork, ctx, sess, request)
+ case *packet.UpdateNetwork:
+ response = timeout(5*time.Millisecond, api.UpdateNetwork, ctx, sess, request)
case *packet.DeleteNetwork:
response = timeout(500*time.Millisecond, api.DeleteNetwork, ctx, sess, request)