@okta/stormpath-migration
Version:
Migration tool to import Stormpath data into an Okta tenant
51 lines (44 loc) • 1.93 kB
JavaScript
/*!
* Copyright (c) 2017, Okta, Inc. and/or its affiliates. All rights reserved.
* The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.")
*
* You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
* See the License for the specific language governing permissions and limitations under the License.
*/
const { each } = require('../../util/concurrency');
const linkUserToSocialIdp = require('../../functions/link-user-to-social-idp');
const logger = require('../../util/logger');
const cache = require('./cache');
const config = require('../../util/config');
function error(userId, idpId, msg) {
logger.error(`Unable to link userId=${userId} to idpId=${idpId} - ${msg}`);
}
function linkUsersFromSocialDirectory(directoryId) {
const userIds = cache.directoryUserMap[directoryId];
const idpId = cache.directoryIdpMap[directoryId];
if (!Array.isArray(userIds) || userIds.length === 0) {
return;
}
logger.info(`Linking ${userIds.length} users to Social IdP id=${idpId}`);
return each(userIds, async (userId) => {
try {
const accountRef = cache.userIdAccountMap[userId];
if (!accountRef) {
return error(userId, idpId, 'No unified account for user');
}
const account = await accountRef.getAccount();
const externalId = account.getExternalIdForDirectory(directoryId);
if (!externalId) {
return error(userId, idpId, `No externalId found`);
}
await linkUserToSocialIdp(userId, idpId, externalId);
} catch (err) {
logger.error(err);
}
}, config.concurrencyLimit);
}
module.exports = linkUsersFromSocialDirectory;