Parcourir la source

s3: Resolve non-absolute URLs in <Location> response

Renée Kooi il y a 7 ans
Parent
commit
2e4d09e8c3
2 fichiers modifiés avec 7 ajouts et 3 suppressions
  1. 3 2
      package.json
  2. 4 1
      src/plugins/AwsS3/index.js

+ 3 - 2
package.json

@@ -77,6 +77,7 @@
     "glob": "^7.1.2",
     "isomorphic-fetch": "2.2.1",
     "jest": "^22.0.6",
+    "json3": "^3.3.2",
     "lint-staged": "^6.0.0",
     "minify-stream": "^1.1.0",
     "mkdirp": "0.5.1",
@@ -97,8 +98,7 @@
     "wdio-mocha-framework": "^0.5.12",
     "wdio-sauce-service": "^0.4.6",
     "wdio-static-server-service": "^1.0.1",
-    "webdriverio": "^4.10.1",
-    "json3": "^3.3.2"
+    "webdriverio": "^4.10.1"
   },
   "dependencies": {
     "classnames": "^2.2.5",
@@ -112,6 +112,7 @@
     "preact": "^8.2.7",
     "prettier-bytes": "1.0.4",
     "prop-types": "^15.5.10",
+    "resolve-url": "^0.2.1",
     "socket.io-client": "^2.0.4",
     "tus-js-client": "^1.4.5",
     "url-parse": "^1.2.0",

+ 4 - 1
src/plugins/AwsS3/index.js

@@ -1,3 +1,4 @@
+const resolveUrl = require('resolve-url')
 const Plugin = require('../../core/Plugin')
 const Translator = require('../../core/Translator')
 const { limitPromises } = require('../../core/Utils')
@@ -165,7 +166,9 @@ module.exports = class AwsS3 extends Plugin {
           return el ? el.textContent : ''
         }
         return {
-          location: getValue('Location'),
+          // Some S3 alternatives do not reply with an absolute URL.
+          // Eg DigitalOcean Spaces uses /$bucketName/xyz
+          location: resolveUrl(xhr.responseURL, getValue('Location')),
           bucket: getValue('Bucket'),
           key: getValue('Key'),
           etag: getValue('ETag')