Sfoglia il codice sorgente

Merge pull request #1564 from transloadit/send-version-header

Send version header
Ifedapo .A. Olarewaju 6 anni fa
parent
commit
824ce5f375

+ 4 - 0
packages/@uppy/companion/src/server/controllers/connect.js

@@ -21,5 +21,9 @@ module.exports = function connect (req, res) {
     state = oAuthState.addToState(state, { uppyInstance: req.uppy.buildURL('', true) }, secret)
   }
 
+  if (req.uppy.clientVersion) {
+    state = oAuthState.addToState(state, { clientVersion: req.uppy.clientVersion }, secret)
+  }
+
   res.redirect(req.uppy.buildURL(`/connect/${req.uppy.provider.authProvider}?state=${state}`, true))
 }

+ 27 - 1
packages/@uppy/companion/src/server/controllers/send-token.js

@@ -21,10 +21,16 @@ module.exports = function sendToken (req, res, next) {
   const state = (req.session.grant || {}).state
   if (state) {
     const origin = oAuthState.getFromState(state, 'origin', req.uppy.options.secret)
+    const clientVersion = oAuthState.getFromState(
+      state,
+      'clientVersion',
+      req.uppy.options.secret
+    )
     const allowedClients = req.uppy.options.clients
     // if no preset clients then allow any client
     if (!allowedClients || hasMatch(origin, allowedClients) || hasMatch(parseUrl(origin).host, allowedClients)) {
-      return res.send(htmlContent(uppyAuthToken, origin))
+      // @todo do a more secure client version check, see https://www.npmjs.com/package/semver
+      return res.send(clientVersion ? htmlContent(uppyAuthToken, origin) : oldHtmlContent(uppyAuthToken, origin))
     }
   }
   next()
@@ -49,3 +55,23 @@ const htmlContent = (token, origin) => {
     <body></body>
     </html>`
 }
+
+/**
+ * @todo remove this function in next major release
+ * @param {string} token uppy auth token
+ * @param {string} origin url string
+ */
+const oldHtmlContent = (token, origin) => {
+  return `
+    <!DOCTYPE html>
+    <html>
+    <head>
+        <meta charset="utf-8" />
+        <script>
+          window.opener.postMessage({token: "${token}"}, "${sanitizeHtml(origin)}")
+          window.close()
+        </script>
+    </head>
+    <body></body>
+    </html>`
+}

+ 2 - 1
packages/@uppy/companion/src/uppy.js

@@ -63,7 +63,7 @@ module.exports.app = (options = {}) => {
   app.use((req, res, next) => {
     res.header(
       'Access-Control-Allow-Headers',
-      [res.get('Access-Control-Allow-Headers'), 'uppy-auth-token'].join(', ')
+      [res.get('Access-Control-Allow-Headers'), 'uppy-auth-token', 'uppy-client'].join(', ')
     )
     next()
   })
@@ -218,6 +218,7 @@ const getOptionsMiddleware = (options) => {
       options,
       s3Client,
       authToken: req.header('uppy-auth-token') || req.query.uppyAuthToken,
+      clientVersion: req.header('uppy-versions') || req.query.uppyVersions,
       buildURL: getURLBuilder(options)
     }
     next()

+ 3 - 1
packages/@uppy/provider-views/src/index.js

@@ -411,7 +411,9 @@ module.exports = class ProviderView {
 
   handleAuth () {
     const authState = btoa(JSON.stringify({ origin: location.origin }))
-    const link = `${this.provider.authUrl()}?state=${authState}`
+    // @todo remove this hardcoded version
+    const clientVersion = 'companion-client:1.0.2'
+    const link = `${this.provider.authUrl()}?state=${authState}&uppyVersions=${clientVersion}`
 
     const authWindow = window.open(link, '_blank')
     const handleToken = (e) => {