@uppy/companion
Version:
OAuth helper and remote fetcher for Uppy's (https://uppy.io) extensible file upload widget with support for drag&drop, resumable uploads, previews, restrictions, file processing/encoding, remote providers like Dropbox and Google Drive, S3 and more :dog:
44 lines (39 loc) • 1.13 kB
JavaScript
import qs from 'node:querystring'
import { URL } from 'node:url'
import * as oAuthState from '../helpers/oauth-state.js'
import { hasMatch } from '../helpers/utils.js'
/**
*
* @param {object} req
* @param {object} res
*/
export default function oauthRedirect(req, res) {
const params = qs.stringify(req.query)
const { oauthProvider } = req.companion.providerClass
if (!req.companion.options.server.oauthDomain) {
res.redirect(
req.companion.buildURL(
`/connect/${oauthProvider}/callback?${params}`,
true,
),
)
return
}
const { state } = oAuthState.getGrantDynamicFromRequest(req)
if (!state) {
res.status(400).send('Cannot find state in session')
return
}
const handler = oAuthState.getFromState(
state,
'companionInstance',
req.companion.options.secret,
)
const handlerHostName = new URL(handler).host
if (hasMatch(handlerHostName, req.companion.options.server.validHosts)) {
const url = `${handler}/connect/${oauthProvider}/callback?${params}`
res.redirect(url)
return
}
res.status(400).send('Invalid Host in state')
}