20230405190240_oauth_refresh_tokens_index.mjs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import Helpers from './lib/helpers.mjs'
  2. const tags = ['server-ce', 'server-pro', 'saas']
  3. const OLD_INDEX = {
  4. key: { refreshToken: 1 },
  5. name: 'refreshToken_1',
  6. unique: true,
  7. }
  8. const NEW_INDEX = {
  9. key: { refreshToken: 1 },
  10. name: 'refreshToken_1',
  11. unique: true,
  12. partialFilterExpression: { refreshToken: { $exists: true } },
  13. }
  14. const TMP_INDEX = {
  15. key: { refreshToken: 1, dummyField: 1 },
  16. name: 'refreshToken_tmp',
  17. }
  18. const migrate = async client => {
  19. const { db } = client
  20. // Create a temporary index so that the refresh tokens are not left unindexed
  21. // while we drop the index and recreate it.
  22. await Helpers.addIndexesToCollection(db.oauthAccessTokens, [TMP_INDEX])
  23. // Drop and recreate the index with different options
  24. await Helpers.dropIndexesFromCollection(db.oauthAccessTokens, [OLD_INDEX])
  25. await Helpers.addIndexesToCollection(db.oauthAccessTokens, [NEW_INDEX])
  26. // Drop the temporary index
  27. await Helpers.dropIndexesFromCollection(db.oauthAccessTokens, [TMP_INDEX])
  28. }
  29. const rollback = async client => {
  30. const { db } = client
  31. // Create a temporary index so that the refresh tokens are not left unindexed
  32. // while we drop the index and recreate it.
  33. await Helpers.addIndexesToCollection(db.oauthAccessTokens, [TMP_INDEX])
  34. // Drop and recreate the index with different options
  35. await Helpers.dropIndexesFromCollection(db.oauthAccessTokens, [NEW_INDEX])
  36. await Helpers.addIndexesToCollection(db.oauthAccessTokens, [OLD_INDEX])
  37. // Drop the temporary index
  38. await Helpers.dropIndexesFromCollection(db.oauthAccessTokens, [TMP_INDEX])
  39. }
  40. export default {
  41. tags,
  42. migrate,
  43. rollback,
  44. }