provider-manager.js 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. const providerManager = require('../../src/server/provider')
  2. const { getCompanionOptions } = require('../../src/standalone/helper')
  3. const { setDefaultEnv } = require('../mockserver')
  4. let grantConfig
  5. let companionOptions
  6. describe('Test Provider options', () => {
  7. beforeEach(() => {
  8. setDefaultEnv()
  9. // eslint-disable-next-line global-require
  10. grantConfig = require('../../src/config/grant')()
  11. companionOptions = getCompanionOptions()
  12. })
  13. test('adds provider options', () => {
  14. providerManager.addProviderOptions(companionOptions, grantConfig)
  15. expect(grantConfig.dropbox.key).toBe('dropbox_key')
  16. expect(grantConfig.dropbox.secret).toBe('dropbox_secret')
  17. expect(grantConfig.box.key).toBe('box_key')
  18. expect(grantConfig.box.secret).toBe('box_secret')
  19. expect(grantConfig.google.key).toBe('google_key')
  20. expect(grantConfig.google.secret).toBe('google_secret')
  21. expect(grantConfig.instagram.key).toBe('instagram_key')
  22. expect(grantConfig.instagram.secret).toBe('instagram_secret')
  23. expect(grantConfig.zoom.key).toBe('zoom_key')
  24. expect(grantConfig.zoom.secret).toBe('zoom_secret')
  25. })
  26. test('adds extra provider config', () => {
  27. process.env.COMPANION_INSTAGRAM_KEY = '123456'
  28. providerManager.addProviderOptions(getCompanionOptions(), grantConfig)
  29. expect(grantConfig.instagram).toEqual({
  30. transport: 'session',
  31. callback: '/instagram/callback',
  32. redirect_uri: 'http://localhost:3020/instagram/redirect',
  33. key: '123456',
  34. secret: 'instagram_secret',
  35. protocol: 'https',
  36. scope: ['user_profile', 'user_media'],
  37. })
  38. expect(grantConfig.dropbox).toEqual({
  39. key: 'dropbox_key',
  40. secret: 'dropbox_secret',
  41. transport: 'session',
  42. redirect_uri: 'http://localhost:3020/dropbox/redirect',
  43. authorize_url: 'https://www.dropbox.com/oauth2/authorize',
  44. access_url: 'https://api.dropbox.com/oauth2/token',
  45. callback: '/dropbox/callback',
  46. custom_params: {
  47. token_access_type: 'offline',
  48. },
  49. })
  50. expect(grantConfig.box).toEqual({
  51. key: 'box_key',
  52. secret: 'box_secret',
  53. transport: 'session',
  54. redirect_uri: 'http://localhost:3020/box/redirect',
  55. authorize_url: 'https://account.box.com/api/oauth2/authorize',
  56. access_url: 'https://api.box.com/oauth2/token',
  57. callback: '/box/callback',
  58. })
  59. expect(grantConfig.google).toEqual({
  60. key: 'google_key',
  61. secret: 'google_secret',
  62. transport: 'session',
  63. redirect_uri: 'http://localhost:3020/drive/redirect',
  64. scope: [
  65. 'https://www.googleapis.com/auth/drive.readonly',
  66. ],
  67. callback: '/drive/callback',
  68. custom_params: {
  69. access_type: 'offline',
  70. },
  71. })
  72. expect(grantConfig.zoom).toEqual({
  73. key: 'zoom_key',
  74. secret: 'zoom_secret',
  75. transport: 'session',
  76. authorize_url: 'https://zoom.us/oauth/authorize',
  77. redirect_uri: 'http://localhost:3020/zoom/redirect',
  78. access_url: 'https://zoom.us/oauth/token',
  79. callback: '/zoom/callback',
  80. })
  81. })
  82. test('adds provider options for secret files', () => {
  83. process.env.COMPANION_DROPBOX_SECRET_FILE = `${process.env.PWD}/test/resources/dropbox_secret_file`
  84. process.env.COMPANION_BOX_SECRET_FILE = `${process.env.PWD}/test/resources/box_secret_file`
  85. process.env.COMPANION_GOOGLE_SECRET_FILE = `${process.env.PWD}/test/resources/google_secret_file`
  86. process.env.COMPANION_INSTAGRAM_SECRET_FILE = `${process.env.PWD}/test/resources/instagram_secret_file`
  87. process.env.COMPANION_ZOOM_SECRET_FILE = `${process.env.PWD}/test/resources/zoom_secret_file`
  88. process.env.COMPANION_ZOOM_VERIFICATION_TOKEN_FILE = `${process.env.PWD}/test/resources/zoom_verification_token_file`
  89. companionOptions = getCompanionOptions()
  90. providerManager.addProviderOptions(companionOptions, grantConfig)
  91. expect(grantConfig.dropbox.secret).toBe('xobpord')
  92. expect(grantConfig.box.secret).toBe('xwbepqd')
  93. expect(grantConfig.google.secret).toBe('elgoog')
  94. expect(grantConfig.instagram.secret).toBe('margatsni')
  95. expect(grantConfig.zoom.secret).toBe('u8Z5ceq')
  96. expect(companionOptions.providerOptions.zoom.verificationToken).toBe('o0u8Z5c')
  97. })
  98. test('does not add provider options if protocol and host are not set', () => {
  99. delete companionOptions.server.host
  100. delete companionOptions.server.protocol
  101. providerManager.addProviderOptions(companionOptions, grantConfig)
  102. expect(grantConfig.dropbox.key).toBeUndefined()
  103. expect(grantConfig.dropbox.secret).toBeUndefined()
  104. expect(grantConfig.box.key).toBeUndefined()
  105. expect(grantConfig.box.secret).toBeUndefined()
  106. expect(grantConfig.google.key).toBeUndefined()
  107. expect(grantConfig.google.secret).toBeUndefined()
  108. expect(grantConfig.instagram.key).toBeUndefined()
  109. expect(grantConfig.instagram.secret).toBeUndefined()
  110. expect(grantConfig.zoom.key).toBeUndefined()
  111. expect(grantConfig.zoom.secret).toBeUndefined()
  112. })
  113. test('sets a main redirect uri, if oauthDomain is set', () => {
  114. companionOptions.server.oauthDomain = 'domain.com'
  115. providerManager.addProviderOptions(companionOptions, grantConfig)
  116. expect(grantConfig.dropbox.redirect_uri).toBe('http://domain.com/dropbox/redirect')
  117. expect(grantConfig.box.redirect_uri).toBe('http://domain.com/box/redirect')
  118. expect(grantConfig.google.redirect_uri).toBe('http://domain.com/drive/redirect')
  119. expect(grantConfig.instagram.redirect_uri).toBe('http://domain.com/instagram/redirect')
  120. expect(grantConfig.zoom.redirect_uri).toBe('http://domain.com/zoom/redirect')
  121. })
  122. })
  123. describe('Test Custom Provider options', () => {
  124. test('adds custom provider options', () => {
  125. const providers = providerManager.getDefaultProviders()
  126. providerManager.addCustomProviders({
  127. foo: {
  128. config: {
  129. key: 'foo_key',
  130. secret: 'foo_secret',
  131. },
  132. module: { authProvider: 'some_provider' },
  133. },
  134. }, providers, grantConfig)
  135. expect(grantConfig.foo.key).toBe('foo_key')
  136. expect(grantConfig.foo.secret).toBe('foo_secret')
  137. expect(providers.foo).toBeTruthy()
  138. })
  139. })