From ccf04ede061fe399ec97e00f15127bdd30d12eec Mon Sep 17 00:00:00 2001 From: Alexander Renz Date: Sat, 5 Apr 2025 13:02:39 +0200 Subject: [PATCH] removed useless networking monitoring option - release fixed 2.8 --- cmd/server/main.go | 113 ++++++++++++++------------------------------- 1 file changed, 34 insertions(+), 79 deletions(-) diff --git a/cmd/server/main.go b/cmd/server/main.go index 1d21aaf..959b461 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -542,10 +542,6 @@ func main() { ctx, cancel := context.WithCancel(context.Background()) defer cancel() - if conf.Server.NetworkEvents { - go monitorNetwork(ctx) - go handleNetworkEvents(ctx) - } go updateSystemMetrics(ctx) if conf.ClamAV.ClamAVEnabled { @@ -1749,6 +1745,14 @@ func handleRequest(w http.ResponseWriter, r *http.Request) { // handleUpload handles PUT requests for file uploads func handleUpload(w http.ResponseWriter, r *http.Request, absFilename, fileStorePath string, a url.Values) { + clientIP := getOriginalClientIP(r) + parsedIP := net.ParseIP(clientIP) + if parsedIP == nil { + log.Warnf("Invalid client IP address: %s", clientIP) + } else { + log.Infof("Handling upload from IP: %s (%s)", parsedIP.String(), detectIPVersion(parsedIP.String())) + } + log.Infof("Using storage path: %s", conf.Server.StoragePath) // HMAC validation @@ -1856,6 +1860,7 @@ func handleUpload(w http.ResponseWriter, r *http.Request, absFilename, fileStore } // Respond with 201 Created immediately + w.Header().Set("Content-Type", "text/plain") // Ensure correct interpretation w.WriteHeader(http.StatusCreated) if f, ok := w.(http.Flusher); ok { f.Flush() @@ -1960,7 +1965,14 @@ func handleDownload(w http.ResponseWriter, r *http.Request, absFilename, fileSto } else { startTime := time.Now() log.Infof("Initiating download for file: %s", absFilename) - http.ServeFile(w, r, absFilename) + f, err := os.Open(absFilename) + if err != nil { + log.Errorf("Couldn't open file: %v", err) + http.Error(w, "Internal Server Error", http.StatusInternalServerError) + return + } + defer f.Close() + http.ServeContent(w, r, filepath.Base(absFilename), fileInfo.ModTime(), f) downloadDuration.Observe(time.Since(startTime).Seconds()) downloadSizeBytes.Observe(float64(fileInfo.Size())) downloadsTotal.Inc() @@ -2160,73 +2172,6 @@ func getFileInfo(absFilename string) (os.FileInfo, error) { return fileInfo, nil } -func monitorNetwork(ctx context.Context) { - currentIP := getCurrentIPAddress() - - for { - select { - case <-ctx.Done(): - log.Info("Stopping network monitor.") - return - case <-time.After(10 * time.Second): - newIP := getCurrentIPAddress() - if newIP != currentIP && newIP != "" { - currentIP = newIP - select { - case networkEvents <- NetworkEvent{Type: "IP_CHANGE", Details: currentIP}: - log.WithField("new_ip", currentIP).Info("Queued IP_CHANGE event") - default: - log.Warn("Network event channel full. Dropping IP_CHANGE event.") - } - } - } - } -} - -func handleNetworkEvents(ctx context.Context) { - for { - select { - case <-ctx.Done(): - log.Info("Stopping network event handler.") - return - case event, ok := <-networkEvents: - if !ok { - log.Info("Network events channel closed.") - return - } - switch event.Type { - case "IP_CHANGE": - log.WithField("new_ip", event.Details).Info("Network change detected") - } - } - } -} - -func getCurrentIPAddress() string { - interfaces, err := net.Interfaces() - if err != nil { - log.WithError(err).Error("Failed to get network interfaces") - return "" - } - - for _, iface := range interfaces { - if iface.Flags&net.FlagUp == 0 || iface.Flags&net.FlagLoopback != 0 { - continue - } - addrs, err := iface.Addrs() - if err != nil { - log.WithError(err).Errorf("Failed to get addresses for interface %s", iface.Name) - continue - } - for _, addr := range addrs { - if ipnet, ok := addr.(*net.IPNet); ok && ipnet.IP.IsGlobalUnicast() && ipnet.IP.To4() != nil { - return ipnet.IP.String() - } - } - } - return "" -} - func setupGracefulShutdown(server *http.Server, cancel context.CancelFunc) { quit := make(chan os.Signal, 1) signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM) @@ -2812,13 +2757,23 @@ func detectIPVersion(ip string) string { } func getOriginalClientIP(r *http.Request) string { - if ip := r.Header.Get("X-Forwarded-For"); ip != "" { - parts := strings.Split(ip, ",") - return strings.TrimSpace(parts[0]) + if xff := r.Header.Get("X-Forwarded-For"); xff != "" { + parts := strings.Split(xff, ",") + for _, part := range parts { + ip := strings.TrimSpace(part) + if net.ParseIP(ip) != nil { + return ip + } + } } - if ip := r.Header.Get("X-Real-IP"); ip != "" { - return strings.TrimSpace(ip) + if rip := r.Header.Get("X-Real-IP"); rip != "" { + if net.ParseIP(rip) != nil { + return strings.TrimSpace(rip) + } } - host, _, _ := net.SplitHostPort(r.RemoteAddr) - return host + host, _, err := net.SplitHostPort(r.RemoteAddr) + if err == nil && host != "" && net.ParseIP(host) != nil { + return host + } + return "" }