From f8ba3705f3a4d290769590bcd33bbd6ecb7a8e61 Mon Sep 17 00:00:00 2001 From: Eric Mc Sween <5454374+emcsween@users.noreply.github.com> Date: Mon, 10 Apr 2023 07:58:53 -0400 Subject: [PATCH] Merge pull request #12536 from overleaf/em-oauth-refresh-tokens-index Allow OAuth access tokens without refresh tokens GitOrigin-RevId: 5f95985b3a2e9b1c9a391b73476ce6b55875af87 --- ...230405190240_oauth_refresh_tokens_index.js | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 services/web/migrations/20230405190240_oauth_refresh_tokens_index.js diff --git a/services/web/migrations/20230405190240_oauth_refresh_tokens_index.js b/services/web/migrations/20230405190240_oauth_refresh_tokens_index.js new file mode 100644 index 0000000000..b66da0c52a --- /dev/null +++ b/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]) +}