From ae4360e85a4b649b544d502130bf4d76c90c51f9 Mon Sep 17 00:00:00 2001 From: Zac Date: Tue, 7 Apr 2026 00:30:28 -0400 Subject: [PATCH] Fix S3 test (use HeadBucket like VPM-Uploader), replace UDP button with grayed Electron App --- public/index.html | 3 ++- server.js | 16 +++------------- 2 files changed, 5 insertions(+), 14 deletions(-) diff --git a/public/index.html b/public/index.html index 257c68b..3468742 100644 --- a/public/index.html +++ b/public/index.html @@ -464,11 +464,12 @@ body::before{content:'';position:fixed;inset:0;background:radial-gradient(ellips
- +
HTTP Mode: Parallel chunked HTTP upload (6 concurrent 32 MB parts). Aspera-class speed — no UDP needed.
+
Electron App — Aspera-speed desktop application (coming soon)
diff --git a/server.js b/server.js index c34727d..c64490f 100644 --- a/server.js +++ b/server.js @@ -455,22 +455,12 @@ app.post("/api/s3/test", requireAdmin, async (req, res) => { return res.status(400).json({ success: false, error: "Bucket, Access Key ID, and Secret Key are required to test" }); const testClient = buildS3Client(testCfg); - const testKey = `_dragonwind_test_${Date.now()}.txt`; try { - // Upload a tiny test file - await testClient.send(new PutObjectCommand({ - Bucket: testCfg.bucket, - Key: testKey, - Body: Buffer.from("Dragon Wind S3 connection test"), - ContentType: "text/plain", - })); - // Delete it immediately - try { - await testClient.send(new DeleteObjectCommand({ Bucket: testCfg.bucket, Key: testKey })); - } catch (_) { /* delete failure is non-fatal */ } + // Test by checking if bucket exists and is accessible + await testClient.send(new HeadBucketCommand({ Bucket: testCfg.bucket })); - res.json({ success: true, message: "S3 connection confirmed! Test file uploaded and deleted successfully." }); + res.json({ success: true, message: "✓ S3 connection confirmed! Credentials are valid and the bucket is accessible." }); } catch (err) { let friendly = err.message; if (err.name === "NoSuchBucket") friendly = `Bucket "${testCfg.bucket}" does not exist`;