UNPKG

@chevre/domain

Version:

Chevre Domain Library for Node.js

121 lines (107 loc) 4.99 kB
// tslint:disable:no-console import { CognitoIdentityProvider, ListUserPoolClientsCommandOutput, UserPoolClientDescription } from '@aws-sdk/client-cognito-identity-provider'; import { fromEnv } from '@aws-sdk/credential-providers'; import * as mongoose from 'mongoose'; import { chevre } from '../../../../lib/index'; const USERPOOL_PROVIDER_NAME = (typeof process.env.DISCONTINUE_PEOPLE_USERPOOL_PROVIDER_NAME === 'string') ? process.env.DISCONTINUE_PEOPLE_USERPOOL_PROVIDER_NAME : 'SSKTS'; // tslint:disable-next-line:max-func-body-length async function main(): Promise<void> { await mongoose.connect(<string>process.env.MONGOLAB_URI, { autoIndex: false }); const settingRepo = await chevre.repository.Setting.createInstance(mongoose.connection); const setting = await settingRepo.findOne({ project: { id: { $eq: '*' } } }, ['userPoolIdNew']); if (typeof setting?.userPoolIdNew !== 'string') { throw new chevre.factory.errors.NotFound('setting.userPoolIdNew'); } const userPoolId: string = setting.userPoolIdNew; const awsCredentials = fromEnv(); const cognitoIdentityServiceProvider = new CognitoIdentityProvider({ apiVersion: 'latest', region: 'ap-northeast-1', credentials: awsCredentials }); // create user const newPersonRepo = await chevre.repository.Person.createInstance({ userPoolId: userPoolId, cognitoIdentityServiceProvider }); const clients: UserPoolClientDescription[] = []; let nextToken: string | undefined = ''; let page: number = 0; while (typeof nextToken === 'string') { // tslint:disable-next-line:no-magic-numbers if (page > 1) { break; } page += 1; console.log('listUserPoolClients processing...', nextToken, page); const listUserPoolClientsResult = <ListUserPoolClientsCommandOutput>await newPersonRepo.cognitoIdentityServiceProvider.listUserPoolClients( { MaxResults: 50, UserPoolId: userPoolId, ...(typeof nextToken === 'string' && nextToken !== '') ? { NextToken: nextToken } : undefined } ); // tslint:disable-next-line:no-null-keyword console.dir(listUserPoolClientsResult.UserPoolClients?.at(0), { depth: null }); nextToken = listUserPoolClientsResult.NextToken; if (Array.isArray(listUserPoolClientsResult.UserPoolClients)) { clients.push(...listUserPoolClientsResult.UserPoolClients); } } console.log('listUsersInGroup processed', nextToken, page); console.log(clients.length, 'users found'); let i = 0; let providerSupportedCount = 0; for (const client of clients) { i += 1; const ClientId = client.ClientId; // disable link provider const describeUserPoolClientResult = await newPersonRepo.cognitoIdentityServiceProvider.describeUserPoolClient({ UserPoolId: userPoolId, ClientId }); const codeFlowAllowed = describeUserPoolClientResult.UserPoolClient?.AllowedOAuthFlows?.some( (flow) => flow !== 'client_credentials' ); if (codeFlowAllowed) { const providerSupported = describeUserPoolClientResult.UserPoolClient?.SupportedIdentityProviders?.some( (provider) => provider === USERPOOL_PROVIDER_NAME ); if (providerSupported) { providerSupportedCount += 1; console.log( 'describeUserPoolClientResult:', describeUserPoolClientResult.UserPoolClient?.AllowedOAuthFlows, describeUserPoolClientResult.UserPoolClient?.AllowedOAuthScopes, describeUserPoolClientResult.UserPoolClient?.SupportedIdentityProviders, describeUserPoolClientResult.UserPoolClient?.ClientName, ClientId, i ); } else { console.log( 'describeUserPoolClientResult:', describeUserPoolClientResult.UserPoolClient?.AllowedOAuthFlows, describeUserPoolClientResult.UserPoolClient?.AllowedOAuthScopes, describeUserPoolClientResult.UserPoolClient?.SupportedIdentityProviders, describeUserPoolClientResult.UserPoolClient?.ClientName, ClientId, i ); } } else { console.log( 'describeUserPoolClientResult:', describeUserPoolClientResult.UserPoolClient?.AllowedOAuthFlows, describeUserPoolClientResult.UserPoolClient?.ClientName, ClientId, i ); } } console.log(clients.length, 'clients processed'); console.log(providerSupportedCount, 'clients supported'); } main() .then() .catch(console.error);