UNPKG

@chevre/domain

Version:

Chevre Domain Library for Node.js

127 lines (112 loc) 4.29 kB
// tslint:disable:no-console import { CognitoIdentityProvider } from '@aws-sdk/client-cognito-identity-provider'; // tslint:disable-next-line:no-submodule-imports import type { UserPoolClientType } from '@aws-sdk/client-cognito-identity-provider/dist-types/models/models_0'; import { fromEnv } from '@aws-sdk/credential-providers'; import * as fs from 'fs'; // tslint:disable-next-line:no-implicit-dependencies import * as json2csv from 'json2csv'; import * as mongoose from 'mongoose'; import { chevre } from '../../../../lib/index'; // const project = { id: String(process.env.PROJECT_ID) }; // const excludedProject = { id: String(process.env.EXCLUDED_PROJECT_ID) }; const userPoolId = `${process.env.COGNITO_USER_POOL_ID}`; // tslint:disable-next-line:max-func-body-length async function main() { const awsCredentials = fromEnv(); const cognitoIdentityServiceProvider = new CognitoIdentityProvider({ apiVersion: 'latest', region: 'ap-northeast-1', credentials: awsCredentials }); await mongoose.connect(<string>process.env.MONGOLAB_URI, { autoIndex: false }); const memberRepo = await chevre.repository.Member.createInstance(mongoose.connection); const cursor = memberRepo.getCursor( { 'project.id': { $eq: '*' } // _id: { $eq: '67de46777ec0510590b68922' } }, { _id: 1, member: 1, project: 1, typeOf: 1 } ); console.log('docs found'); let i = 0; // let commonClients: { // clientId?: string; // clientSecret?: string; // name?: string; // }[] = []; const commonClients: { projectId: string; clientId: string; clientSecret: string; name: string; memberName: string; }[] = []; // tslint:disable-next-line:max-func-body-length await cursor.eachAsync(async (doc) => { i += 1; const member: Pick< chevre.factory.iam.IMember, 'member' | 'project' | 'typeOf' > = doc.toObject(); const client = await new Promise<UserPoolClientType>(async (resolve, reject) => { cognitoIdentityServiceProvider.describeUserPoolClient( { ClientId: member.member.id, UserPoolId: userPoolId }, {}, (err, data) => { if (err instanceof Error) { reject(err); } else { if (data?.UserPoolClient === undefined) { reject(new chevre.factory.errors.NotFound('UserPoolClient')); } else { resolve(data.UserPoolClient); } } } ); }); if (typeof client.ClientId !== 'string' || typeof client.ClientSecret !== 'string' || typeof client.ClientName !== 'string') { throw new Error('invalid client'); } const allowClientCredentials = client.AllowedOAuthFlows?.includes('client_credentials') === true; if (allowClientCredentials) { commonClients.push({ projectId: member.project.id, clientId: client.ClientId, clientSecret: client.ClientSecret, name: client.ClientName, memberName: String(member.member.name) }); } }); console.log(commonClients); // tslint:disable-next-line:no-null-keyword const json = JSON.stringify(commonClients, null, ''); // tslint:disable-next-line:non-literal-fs-path fs.writeFileSync(`${__dirname}/../../../commonClients.json`, json); console.log(i, 'docs checked'); const parser = new json2csv.Parser({ fields: ['projectId', 'clientId', 'clientSecret', 'name', 'memberName'] }); const csv = parser.parse(commonClients.sort( (a, b) => { return (String(a.name) > String(b.name)) ? 1 : -1; } )); // tslint:disable-next-line:non-literal-fs-path fs.writeFileSync(`${__dirname}/../../../commonClients.csv`, csv); } main() .then() .catch(console.error);