[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
This commit is contained in:
Miguel Serrano
2026-01-23 09:05:56 +00:00
committed by Copybot
parent 07a7db91c0
commit d161cf6bbc
@@ -8,16 +8,22 @@ function usage() {
'Usage: node update_institution_user_saml_ids.mjs -i <institution-id> -s <search> [-r <replace>]' 'Usage: node update_institution_user_saml_ids.mjs -i <institution-id> -s <search> [-r <replace>]'
) )
console.log( 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('Options:')
console.log( console.log(
' --institution-id, -i Institution ID to update' ' --institution-id, -i Institution ID to update'
) )
console.log(' --search, -s String to search for') console.log(' --search, -s String to search for')
console.log(
' --search-regexp Regular expression to search for (ignored if --search is provided)'
)
console.log( console.log(
' --replace, -r String to replace with (optional, defaults to empty string)' ' --replace, -r String to replace with (optional, defaults to empty string)'
) )
console.log(
' --append, -a String to append at the end'
)
console.log( console.log(
' --dry-run, -d Shows changes but does not perform updates' ' --dry-run, -d Shows changes but does not perform updates'
) )
@@ -31,15 +37,18 @@ const {
'dry-run': dryRun, 'dry-run': dryRun,
'institution-id': providerId, 'institution-id': providerId,
search, search,
'search-regexp': searchRegexp,
replace, replace,
append,
help, help,
} = minimist(process.argv.slice(2), { } = minimist(process.argv.slice(2), {
string: ['institution-id', 'search', 'replace'], string: ['institution-id', 'search', 'search-regexp', 'replace'],
boolean: ['dry-run', 'help'], boolean: ['dry-run', 'help'],
alias: { alias: {
'institution-id': 'i', 'institution-id': 'i',
search: 's', search: 's',
replace: 'r', replace: 'r',
append: 'a',
'dry-run': 'd', 'dry-run': 'd',
help: 'h', help: 'h',
}, },
@@ -50,7 +59,9 @@ const {
}) })
async function main() { async function main() {
if (help || !providerId || !search) { const hasSearchOrAppend =
Boolean(search) || Boolean(searchRegexp) || Boolean(append)
if (help || !providerId || !hasSearchOrAppend) {
usage() usage()
} }
@@ -68,17 +79,20 @@ async function main() {
u => u.providerId === providerId u => u.providerId === providerId
) )
if ( if (!matchingIdentifier) {
!matchingIdentifier ||
!matchingIdentifier.externalUserId.includes(search)
) {
continue continue
} }
const updatedId = matchingIdentifier.externalUserId.replaceAll( let updatedId
search, if (search) {
replace 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 usersToUpdate = usersToUpdate + 1
console.log(`${user._id},${matchingIdentifier.externalUserId},${updatedId}`) console.log(`${user._id},${matchingIdentifier.externalUserId},${updatedId}`)