From 8184c8d18799feb7ef0aa0eed7e5a2e67a01c791 Mon Sep 17 00:00:00 2001 From: Kyren223 Date: Tue, 14 Jan 2025 16:31:32 +0200 Subject: Added a way to change network properties both server side and client side --- internal/server/api/api.go | 75 ++++++++++++++++++++++++++++++++++++++++++++++ internal/server/server.go | 2 ++ 2 files changed, 77 insertions(+) (limited to 'internal/server') 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) -- cgit v1.3.1