Jelajahi Sumber

Merge pull request #12536 from overleaf/em-oauth-refresh-tokens-index

Allow OAuth access tokens without refresh tokens

GitOrigin-RevId: 5f95985b3a2e9b1c9a391b73476ce6b55875af87
Eric Mc Sween 3 tahun lalu
induk
melakukan
1f9cfd877a

+ 47 - 0
services/web/migrations/20230405190240_oauth_refresh_tokens_index.js

@@ -0,0 +1,47 @@
+const Helpers = require('./lib/helpers')
+
+exports.tags = ['server-ce', 'server-pro', 'saas']
+
+const OLD_INDEX = {
+  key: { refreshToken: 1 },
+  name: 'refreshToken_1',
+  unique: true,
+}
+const NEW_INDEX = {
+  key: { refreshToken: 1 },
+  name: 'refreshToken_1',
+  unique: true,
+  partialFilterExpression: { refreshToken: { $exists: true } },
+}
+const TMP_INDEX = {
+  key: { refreshToken: 1, dummyField: 1 },
+  name: 'refreshToken_tmp',
+}
+
+exports.migrate = async client => {
+  const { db } = client
+  // Create a temporary index so that the refresh tokens are not left unindexed
+  // while we drop the index and recreate it.
+  await Helpers.addIndexesToCollection(db.oauthAccessTokens, [TMP_INDEX])
+
+  // Drop and recreate the index with different options
+  await Helpers.dropIndexesFromCollection(db.oauthAccessTokens, [OLD_INDEX])
+  await Helpers.addIndexesToCollection(db.oauthAccessTokens, [NEW_INDEX])
+
+  // Drop the temporary index
+  await Helpers.dropIndexesFromCollection(db.oauthAccessTokens, [TMP_INDEX])
+}
+
+exports.rollback = async client => {
+  const { db } = client
+  // Create a temporary index so that the refresh tokens are not left unindexed
+  // while we drop the index and recreate it.
+  await Helpers.addIndexesToCollection(db.oauthAccessTokens, [TMP_INDEX])
+
+  // Drop and recreate the index with different options
+  await Helpers.dropIndexesFromCollection(db.oauthAccessTokens, [NEW_INDEX])
+  await Helpers.addIndexesToCollection(db.oauthAccessTokens, [OLD_INDEX])
+
+  // Drop the temporary index
+  await Helpers.dropIndexesFromCollection(db.oauthAccessTokens, [TMP_INDEX])
+}