diff options
| author | Kyren223 <Kyren223@proton.me> | 2025-01-14 16:31:32 +0200 |
|---|---|---|
| committer | Kyren223 <Kyren223@proton.me> | 2025-01-14 16:31:32 +0200 |
| commit | 8184c8d18799feb7ef0aa0eed7e5a2e67a01c791 (patch) | |
| tree | 45a0174ed90b11c6ce89db06ee7237e6ae4dad20 /internal/server | |
| parent | fa2ba2fe8bf24cc9ddc28ec30ea64647d17af1d6 (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.go | 75 | ||||
| -rw-r--r-- | internal/server/server.go | 2 |
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) |
