mockserver.js 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. const express = require('express')
  2. const session = require('express-session')
  3. const { expects: { localZoomKey, localZoomSecret, localZoomVerificationToken } } = require('./fixtures/zoom')
  4. const defaultEnv = {
  5. NODE_ENV: 'test',
  6. COMPANION_PORT: 3020,
  7. COMPANION_DOMAIN: 'localhost:3020',
  8. COMPANION_SELF_ENDPOINT: 'localhost:3020',
  9. COMPANION_HIDE_METRICS: 'false',
  10. COMPANION_HIDE_WELCOME: 'false',
  11. COMPANION_STREAMING_UPLOAD: 'true',
  12. COMPANION_ALLOW_LOCAL_URLS: 'false',
  13. COMPANION_PROTOCOL: 'http',
  14. COMPANION_DATADIR: './test/output',
  15. COMPANION_SECRET: 'secret',
  16. COMPANION_PREAUTH_SECRET: 'different secret',
  17. COMPANION_DROPBOX_KEY: 'dropbox_key',
  18. COMPANION_DROPBOX_SECRET: 'dropbox_secret',
  19. COMPANION_BOX_KEY: 'box_key',
  20. COMPANION_BOX_SECRET: 'box_secret',
  21. COMPANION_GOOGLE_KEY: 'google_key',
  22. COMPANION_GOOGLE_SECRET: 'google_secret',
  23. COMPANION_INSTAGRAM_KEY: 'instagram_key',
  24. COMPANION_INSTAGRAM_SECRET: 'instagram_secret',
  25. COMPANION_FACEBOOK_KEY: 'facebook_key',
  26. COMPANION_FACEBOOK_SECRET: 'facebook_secret',
  27. COMPANION_ZOOM_KEY: localZoomKey,
  28. COMPANION_ZOOM_SECRET: localZoomSecret,
  29. COMPANION_ZOOM_VERIFICATION_TOKEN: localZoomVerificationToken,
  30. COMPANION_PATH: '',
  31. COMPANION_PERIODIC_PING_URLS: '',
  32. COMPANION_CLIENT_SOCKET_CONNECT_TIMEOUT: '',
  33. COMPANION_ENABLE_URL_ENDPOINT: 'true',
  34. }
  35. function updateEnv (env) {
  36. Object.keys(env).forEach((key) => {
  37. process.env[key] = env[key]
  38. })
  39. }
  40. module.exports.setDefaultEnv = () => updateEnv(defaultEnv)
  41. module.exports.grantToken = 'fake token'
  42. module.exports.getServer = (extraEnv) => {
  43. const env = {
  44. ...defaultEnv,
  45. ...extraEnv,
  46. }
  47. updateEnv(env)
  48. // companion stores certain global state like emitter, metrics, logger (frozen object), so we need to reset modules
  49. // todo rewrite companion to not use global state
  50. // https://github.com/transloadit/uppy/issues/3284
  51. jest.resetModules()
  52. // eslint-disable-next-line global-require
  53. const standalone = require('../src/standalone')
  54. const authServer = express()
  55. authServer.use(session({ secret: 'grant', resave: true, saveUninitialized: true }))
  56. authServer.all('*/callback', (req, res, next) => {
  57. req.session.grant = {
  58. response: { access_token: module.exports.grantToken },
  59. }
  60. next()
  61. })
  62. authServer.all(['*/send-token', '*/redirect'], (req, res, next) => {
  63. req.session.grant = { dynamic: { state: req.query.state || 'non-empty-value' } }
  64. next()
  65. })
  66. const { app } = standalone()
  67. authServer.use(app)
  68. return authServer
  69. }