diff options
Diffstat (limited to 'internal/server')
| -rw-r--r-- | internal/server/api/api.go | 18 | ||||
| -rw-r--r-- | internal/server/server.go | 10 |
2 files changed, 23 insertions, 5 deletions
diff --git a/internal/server/api/api.go b/internal/server/api/api.go index 35ca44c..5f11070 100644 --- a/internal/server/api/api.go +++ b/internal/server/api/api.go @@ -842,6 +842,24 @@ func SetUserData(ctx context.Context, sess *session.Session, request *packet.Set var userPtr *data.User = nil if request.User != nil { + if request.User.IsDeleted { + // Delete user + + pubKey, _, err := ed25519.GenerateKey(nil) + assert.NoError(err, "random should never fail") + err = queries.DeleteUser(ctx, data.DeleteUserParams{ + PublicKey: pubKey, + ID: sess.ID(), + }) + if err != nil { + slog.ErrorContext(ctx, "database error", "error", err) + return &ErrInternalError + } + + sess.Close() // Close connection and respond with nothing + return nil + } + name := request.User.Name if len(name) > packet.MaxUsernameBytes { return &packet.Error{Error: fmt.Sprintf( diff --git a/internal/server/server.go b/internal/server/server.go index 48d7d38..15c3a7a 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -60,7 +60,7 @@ const ( RateLimitCountThresholdMalicious = 10 ) -func getTlsConfig() *tls.Config { +func getTLSConfig() *tls.Config { path, ok := os.LookupEnv(CertFile) if !ok { // DEV MODE ONLY, DUMMY CERT @@ -219,7 +219,7 @@ func (s *server) Node() *snowflake.Node { func (s *server) Run() { slog.Info("starting eko-server...") - listener, err := tls.Listen("tcp4", ":"+strconv.Itoa(int(s.Port)), getTlsConfig()) + listener, err := tls.Listen("tcp4", ":"+strconv.Itoa(int(s.Port)), getTLSConfig()) if err != nil { slog.Error("error starting server", "error", err) assert.Abort("see logs") @@ -286,7 +286,7 @@ func (server *server) handleConnection(conn net.Conn) { defer conn.Close() var writerWg sync.WaitGroup - done := make(chan struct{}) + writeDone := make(chan struct{}) framer := packet.NewFramer() sess := session.NewSession(server, addr, cancel, &writerWg) @@ -306,7 +306,7 @@ func (server *server) handleConnection(conn net.Conn) { // Writer go func() { - defer close(done) + defer close(writeDone) defer conn.Close() // To unblock reader writeQueue := sess.Read() @@ -406,7 +406,7 @@ func (server *server) handleConnection(conn net.Conn) { close(framer.Out) // stop processing slog.InfoContext(ctx, "reader done, closed framer") - <-done + <-writeDone } func processPacket(ctx context.Context, sess *session.Session, pkt packet.Packet) bool { |
