diff --git a/README.md b/README.md index ffae6e0..854e0b1 100644 --- a/README.md +++ b/README.md @@ -125,7 +125,7 @@ By default, the client picks up all file formats the device supports. Use `--dev | `/health` | GET | No | Liveness check | | `/upload` | POST | Bearer token | Upload a track file (multipart, field `file`) | -The `/upload` endpoint requires `X-Device-ID` and `X-Source-Format` headers, and optionally `X-Client-Host`. +The `/upload` endpoint requires `X-Device-ID` and `X-Source-Format` headers. ## NixOS module diff --git a/tracksync/internal/sync/sync.go b/tracksync/internal/sync/sync.go index a872738..98e0cf7 100644 --- a/tracksync/internal/sync/sync.go +++ b/tracksync/internal/sync/sync.go @@ -81,7 +81,7 @@ const ( StatusDuplicate // server already had this file ) -func Upload(client *http.Client, serverURL, token, deviceID, hostname, sourceFormat, filename string, data []byte) (UploadStatus, error) { +func Upload(client *http.Client, serverURL, token, deviceID, sourceFormat, filename string, data []byte) (UploadStatus, error) { var buf bytes.Buffer writer := multipart.NewWriter(&buf) part, err := writer.CreateFormFile("file", filename) @@ -102,7 +102,6 @@ func Upload(client *http.Client, serverURL, token, deviceID, hostname, sourceFor req.Header.Set("Content-Type", writer.FormDataContentType()) req.Header.Set("Authorization", "Bearer "+token) req.Header.Set("X-Device-ID", deviceID) - req.Header.Set("X-Client-Host", hostname) req.Header.Set("X-Source-Format", sourceFormat) resp, err := client.Do(req) @@ -134,7 +133,7 @@ type Summary struct { } // SyncFiles syncs a list of found files to the server. -func SyncFiles(db *sql.DB, client *http.Client, serverURL, token, deviceID, hostname string, files []device.FoundFile) Summary { +func SyncFiles(db *sql.DB, client *http.Client, serverURL, token, deviceID string, files []device.FoundFile) Summary { var summary Summary for _, ff := range files { @@ -161,7 +160,7 @@ func SyncFiles(db *sql.DB, client *http.Client, serverURL, token, deviceID, host continue } - status, err := Upload(client, serverURL, token, deviceID, hostname, ff.Format, name, data) + status, err := Upload(client, serverURL, token, deviceID, ff.Format, name, data) if err != nil { slog.Error("upload failed", "file", name, "error", err) summary.Errors++ diff --git a/tracksync/internal/sync/sync_test.go b/tracksync/internal/sync/sync_test.go index b9f93c2..ac46308 100644 --- a/tracksync/internal/sync/sync_test.go +++ b/tracksync/internal/sync/sync_test.go @@ -100,7 +100,6 @@ func TestUpload_Created(t *testing.T) { ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { assert.Equal(t, "Bearer tok", r.Header.Get("Authorization")) assert.Equal(t, "dev-1", r.Header.Get("X-Device-ID")) - assert.Equal(t, "myhost", r.Header.Get("X-Client-Host")) assert.Equal(t, "gpx_1.1", r.Header.Get("X-Source-Format")) w.WriteHeader(http.StatusCreated) _, _ = fmt.Fprintln(w, "uploaded") @@ -108,7 +107,7 @@ func TestUpload_Created(t *testing.T) { defer ts.Close() client := &http.Client{Timeout: 5 * time.Second} - status, err := Upload(client, ts.URL, "tok", "dev-1", "myhost", "gpx_1.1", "track.gpx", []byte("")) + status, err := Upload(client, ts.URL, "tok", "dev-1", "gpx_1.1", "track.gpx", []byte("")) require.NoError(t, err) assert.Equal(t, StatusUploaded, status) } @@ -121,7 +120,7 @@ func TestUpload_Duplicate(t *testing.T) { defer ts.Close() client := &http.Client{Timeout: 5 * time.Second} - status, err := Upload(client, ts.URL, "tok", "dev", "host", "gpx_1.1", "f.gpx", []byte("data")) + status, err := Upload(client, ts.URL, "tok", "dev", "gpx_1.1", "f.gpx", []byte("data")) require.NoError(t, err) assert.Equal(t, StatusDuplicate, status) } @@ -134,7 +133,7 @@ func TestUpload_ServerError(t *testing.T) { defer ts.Close() client := &http.Client{Timeout: 5 * time.Second} - _, err := Upload(client, ts.URL, "tok", "dev", "host", "gpx_1.1", "f.gpx", []byte("data")) + _, err := Upload(client, ts.URL, "tok", "dev", "gpx_1.1", "f.gpx", []byte("data")) assert.Error(t, err) } @@ -150,7 +149,7 @@ func TestSyncFiles_Uploaded(t *testing.T) { require.NoError(t, os.WriteFile(filepath.Join(dir, "track.gpx"), []byte(""), 0644)) files := []device.FoundFile{{Path: filepath.Join(dir, "track.gpx"), Format: "gpx_1.1"}} - summary := SyncFiles(db, &http.Client{Timeout: 5 * time.Second}, ts.URL, "tok", "dev", "host", files) + summary := SyncFiles(db, &http.Client{Timeout: 5 * time.Second}, ts.URL, "tok", "dev", files) assert.Equal(t, 1, summary.Uploaded) assert.Equal(t, 0, summary.Duplicate) @@ -171,7 +170,7 @@ func TestSyncFiles_Duplicate(t *testing.T) { require.NoError(t, os.WriteFile(filepath.Join(dir, "track.gpx"), []byte(""), 0644)) files := []device.FoundFile{{Path: filepath.Join(dir, "track.gpx"), Format: "gpx_1.1"}} - summary := SyncFiles(db, &http.Client{Timeout: 5 * time.Second}, ts.URL, "tok", "dev", "host", files) + summary := SyncFiles(db, &http.Client{Timeout: 5 * time.Second}, ts.URL, "tok", "dev", files) assert.Equal(t, 0, summary.Uploaded) assert.Equal(t, 1, summary.Duplicate) @@ -195,7 +194,7 @@ func TestSyncFiles_SkippedClientSide(t *testing.T) { require.NoError(t, RecordUpload(db, SHA256Hex(data), "track.gpx", "dev")) files := []device.FoundFile{{Path: filepath.Join(dir, "track.gpx"), Format: "gpx_1.1"}} - summary := SyncFiles(db, &http.Client{Timeout: 5 * time.Second}, ts.URL, "tok", "dev", "host", files) + summary := SyncFiles(db, &http.Client{Timeout: 5 * time.Second}, ts.URL, "tok", "dev", files) assert.Equal(t, 0, summary.Uploaded) assert.Equal(t, 0, summary.Duplicate) @@ -215,7 +214,7 @@ func TestSyncFiles_UploadError(t *testing.T) { require.NoError(t, os.WriteFile(filepath.Join(dir, "track.gpx"), []byte(""), 0644)) files := []device.FoundFile{{Path: filepath.Join(dir, "track.gpx"), Format: "gpx_1.1"}} - summary := SyncFiles(db, &http.Client{Timeout: 5 * time.Second}, ts.URL, "tok", "dev", "host", files) + summary := SyncFiles(db, &http.Client{Timeout: 5 * time.Second}, ts.URL, "tok", "dev", files) assert.Equal(t, 0, summary.Uploaded) assert.Equal(t, 0, summary.Duplicate) @@ -252,7 +251,7 @@ func TestSyncFiles_MixedResults(t *testing.T) { {Path: filepath.Join(dir, "dup.gpx"), Format: "gpx_1.1"}, {Path: filepath.Join(dir, "skip.gpx"), Format: "gpx_1.1"}, } - summary := SyncFiles(db, &http.Client{Timeout: 5 * time.Second}, ts.URL, "tok", "dev", "host", files) + summary := SyncFiles(db, &http.Client{Timeout: 5 * time.Second}, ts.URL, "tok", "dev", files) assert.Equal(t, 1, summary.Uploaded) assert.Equal(t, 1, summary.Duplicate) diff --git a/tracksync/main.go b/tracksync/main.go index 67ef0c8..ada842b 100644 --- a/tracksync/main.go +++ b/tracksync/main.go @@ -122,7 +122,6 @@ func main() { return } - hostname, _ := os.Hostname() httpClient := &http.Client{Timeout: *timeout} slog.Info("starting sync", "device", *deviceID, @@ -130,7 +129,7 @@ func main() { "files", len(files), ) - summary := sync.SyncFiles(db, httpClient, *serverURL, token, *deviceID, hostname, files) + summary := sync.SyncFiles(db, httpClient, *serverURL, token, *deviceID, files) slog.Info("sync complete", "uploaded", summary.Uploaded,