From d161cf6bbc8968d0cb126dcf09cbf2788985ca68 Mon Sep 17 00:00:00 2001 From: Miguel Serrano Date: Thu, 22 Jan 2026 11:02:18 +0100 Subject: [PATCH] [web] Add `--append` to `scripts/update_institution_user_saml_ids` (#30851) * [Add `--append` to `scripts/update_institution_user_saml_ids` * Added a `--search-regexp` argument GitOrigin-RevId: e78cd8b61365145d18176a0ee1a4f98ba2cabda6 --- .../update_institution_user_saml_ids.mjs | 36 +++++++++++++------ 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/services/web/scripts/update_institution_user_saml_ids.mjs b/services/web/scripts/update_institution_user_saml_ids.mjs index a7284a2f2b..0297398a43 100644 --- a/services/web/scripts/update_institution_user_saml_ids.mjs +++ b/services/web/scripts/update_institution_user_saml_ids.mjs @@ -8,16 +8,22 @@ function usage() { 'Usage: node update_institution_user_saml_ids.mjs -i -s [-r ]' ) console.log( - 'Performs string replacement on external user IDs for all users in an institution' + 'Performs string replacement on external user IDs for all users in an institution. A search-and-replace or/and an append operation must be specified.' ) console.log('Options:') console.log( ' --institution-id, -i Institution ID to update' ) console.log(' --search, -s String to search for') + console.log( + ' --search-regexp Regular expression to search for (ignored if --search is provided)' + ) console.log( ' --replace, -r String to replace with (optional, defaults to empty string)' ) + console.log( + ' --append, -a String to append at the end' + ) console.log( ' --dry-run, -d Shows changes but does not perform updates' ) @@ -31,15 +37,18 @@ const { 'dry-run': dryRun, 'institution-id': providerId, search, + 'search-regexp': searchRegexp, replace, + append, help, } = minimist(process.argv.slice(2), { - string: ['institution-id', 'search', 'replace'], + string: ['institution-id', 'search', 'search-regexp', 'replace'], boolean: ['dry-run', 'help'], alias: { 'institution-id': 'i', search: 's', replace: 'r', + append: 'a', 'dry-run': 'd', help: 'h', }, @@ -50,7 +59,9 @@ const { }) async function main() { - if (help || !providerId || !search) { + const hasSearchOrAppend = + Boolean(search) || Boolean(searchRegexp) || Boolean(append) + if (help || !providerId || !hasSearchOrAppend) { usage() } @@ -68,17 +79,20 @@ async function main() { u => u.providerId === providerId ) - if ( - !matchingIdentifier || - !matchingIdentifier.externalUserId.includes(search) - ) { + if (!matchingIdentifier) { continue } - const updatedId = matchingIdentifier.externalUserId.replaceAll( - search, - replace - ) + let updatedId + if (search) { + updatedId = matchingIdentifier.externalUserId.replaceAll(search, replace) + } else if (searchRegexp) { + const regexp = new RegExp(searchRegexp, 'g') + updatedId = matchingIdentifier.externalUserId.replaceAll(regexp, replace) + } + if (append) { + updatedId = matchingIdentifier.externalUserId + append + } usersToUpdate = usersToUpdate + 1 console.log(`${user._id},${matchingIdentifier.externalUserId},${updatedId}`)