UNPKG

@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
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') }