From 35e4a6fc46fd47216821d1cd3f8a94bb4cff4565 Mon Sep 17 00:00:00 2001 From: Alexander Renz Date: Thu, 17 Jul 2025 18:05:59 +0200 Subject: [PATCH] feat: implement chunked upload handler and update config validation for session timeout --- cmd/server/chunked_upload_handler.go | 3 +-- cmd/server/config_validator.go | 8 ++++---- cmd/server/network_resilience.go | 2 +- test_upload.txt | 1 + 4 files changed, 7 insertions(+), 7 deletions(-) create mode 100644 test_upload.txt diff --git a/cmd/server/chunked_upload_handler.go b/cmd/server/chunked_upload_handler.go index 5f13a94..9dc70b3 100644 --- a/cmd/server/chunked_upload_handler.go +++ b/cmd/server/chunked_upload_handler.go @@ -3,6 +3,7 @@ package main import ( + "encoding/json" "fmt" "io" "net/http" @@ -32,8 +33,6 @@ func handleChunkedUpload(w http.ResponseWriter, r *http.Request) { // Extract headers for chunked upload sessionID := r.Header.Get("X-Upload-Session-ID") chunkNumberStr := r.Header.Get("X-Chunk-Number") - totalChunksStr := r.Header.Get("X-Total-Chunks") - contentRange := r.Header.Get("Content-Range") filename := r.Header.Get("X-Filename") // Handle session creation for new uploads diff --git a/cmd/server/config_validator.go b/cmd/server/config_validator.go index b31bf39..8fff89f 100644 --- a/cmd/server/config_validator.go +++ b/cmd/server/config_validator.go @@ -301,10 +301,10 @@ func validateUploadsConfig(uploads *UploadsConfig, result *ConfigValidationResul } } - // Validate resumable age - if uploads.MaxResumableAge != "" { - if _, err := time.ParseDuration(uploads.MaxResumableAge); err != nil { - result.AddError("uploads.max_resumable_age", uploads.MaxResumableAge, "invalid resumable age format") + // Validate session timeout (renamed from max_resumable_age) + if uploads.SessionTimeout != "" { + if _, err := time.ParseDuration(uploads.SessionTimeout); err != nil { + result.AddError("uploads.session_timeout", uploads.SessionTimeout, "invalid session timeout format") } } } diff --git a/cmd/server/network_resilience.go b/cmd/server/network_resilience.go index fa5f2b9..d9a9c12 100644 --- a/cmd/server/network_resilience.go +++ b/cmd/server/network_resilience.go @@ -251,7 +251,7 @@ func RetryableUploadWrapper(originalHandler http.HandlerFunc, maxRetries int) ht if attempt > 0 { // Exponential backoff with jitter delay := time.Duration(attempt*attempt) * time.Second - jitter := time.Duration(float64(delay) * 0.1 * (2*time.Now().UnixNano()%2 - 1)) + jitter := time.Duration(float64(delay.Nanoseconds()) * 0.1 * float64((time.Now().UnixNano()%2)*2-1)) time.Sleep(delay + jitter) log.Infof("Retrying upload attempt %d/%d", attempt+1, maxRetries+1) diff --git a/test_upload.txt b/test_upload.txt new file mode 100644 index 0000000..74c4948 --- /dev/null +++ b/test_upload.txt @@ -0,0 +1 @@ +Hello, HMAC File Server! Do 17. Jul 18:05:48 CEST 2025