diff options
Diffstat (limited to 'internal/server')
| -rw-r--r-- | internal/server/api/api.go | 68 | ||||
| -rw-r--r-- | internal/server/server.go | 6 |
2 files changed, 73 insertions, 1 deletions
diff --git a/internal/server/api/api.go b/internal/server/api/api.go index b1cc58d..479da95 100644 --- a/internal/server/api/api.go +++ b/internal/server/api/api.go @@ -327,3 +327,71 @@ func SwapFrequencies(ctx context.Context, sess *session.Session, request *packet return request } + +func DeleteFrequency(ctx context.Context, sess *session.Session, request *packet.DeleteFrequency) 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 1:", err) + return &ErrInternalError + } + + isAdmin, err := IsNetworkAdmin(ctx, queries, sess.ID(), frequency.NetworkID) + if err == sql.ErrNoRows { + return &packet.Error{Error: "either user or network don't exist"} + } + if err != nil { + log.Println("database error 2:", err) + return &ErrInternalError + } + if !isAdmin { + return &ErrPermissionDenied + } + + err = queries.DeleteFrequency(ctx, frequency.ID) + if err != nil { + log.Println("database error 3:", err) + return &ErrInternalError + } + + return &packet.FrequenciesInfo{ + RemoveFrequencies: []snowflake.ID{frequency.ID}, + Frequencies: nil, + Network: frequency.NetworkID, + Set: false, + } +} + +func DeleteNetwork(ctx context.Context, sess *session.Session, request *packet.DeleteNetwork) 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 1:", err) + return &ErrInternalError + } + + // NOTE: important check, make sure they are the owner (authorized) + if network.OwnerID != sess.ID() { + return &ErrPermissionDenied + } + + err = queries.DeleteNetwork(ctx, request.Network) + if err != nil { + log.Println("database error 2:", err) + return &ErrInternalError + } + + return &packet.NetworksInfo{ + Networks: nil, + RemoveNetworks: []snowflake.ID{request.Network}, + Set: false, + } +} diff --git a/internal/server/server.go b/internal/server/server.go index edad545..1d7397e 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -314,12 +314,16 @@ func processRequest(ctx context.Context, sess *session.Session, request packet.P var response packet.Payload switch request := request.(type) { case *packet.CreateNetwork: - response = timeout(20*time.Millisecond, api.CreateNetwork, ctx, sess, request) + response = timeout(10*time.Millisecond, api.CreateNetwork, ctx, sess, request) + case *packet.DeleteNetwork: + response = timeout(500*time.Millisecond, api.DeleteNetwork, ctx, sess, request) case *packet.SwapUserNetworks: response = timeout(5*time.Millisecond, api.SwapUserNetworks, ctx, sess, request) case *packet.CreateFrequency: response = timeout(5*time.Millisecond, api.CreateFrequency, ctx, sess, request) + case *packet.DeleteFrequency: + response = timeout(200*time.Millisecond, api.DeleteFrequency, ctx, sess, request) case *packet.SwapFrequencies: response = timeout(5*time.Millisecond, api.SwapFrequencies, ctx, sess, request) |
