avp-cli
Version:
Small CLI to help interacts with the Amazon Verified Permissions (AVP) service.
245 lines (238 loc) • 7.27 kB
JavaScript
import { getAnswers } from "./answers.js";
import {
batchIsAuthorized,
batchIsAuthorizedWithToken,
createPolicyStore,
createStaticPolicy,
createPolicyTemplate,
createTemplatePolicy,
deletePolicy,
deletePolicyTemplate,
getIdentitySource,
getPolicyTemplate,
deletePolicyStore,
deleteIdentitySource,
getPolicy,
getPolicyStore,
getSchema,
IsAuthorized,
isAuthorizedWithToken,
listPolicies,
listPolicyStores,
listPolicyTemplates,
listIdentitySources,
putSchema,
updateStaticPolicy,
updatePolicyStore,
updatePolicyTemplate,
updateIdentitySource,
createIdentitySource,
useScenario,
} from "./awsOperations.js";
console.log("🚀 Welcome to the AVP CLI Tool!");
console.log(
"Designed to streamline your interactions with the Amazon Verified Permissions (AVP) service."
);
console.log(
"🔧 Create, manage, and delete policy stores, schemas, and policies. Plus, deploy and test with predefined scenarios!"
);
console.log(
"⚠️ Ensure your AWS credentials are correctly set up before proceeding."
);
const interactiveMode = async () => {
let exit = false;
while (!exit) {
try {
const answers = await getAnswers();
switch (answers.action) {
case "isAuthorized":
await IsAuthorized(answers.testFilePath);
break;
case "batchIsAuthorized":
await batchIsAuthorized(answers.batchTestFilePath);
break;
case "batchIsAuthorizedWithToken":
await batchIsAuthorizedWithToken(answers.batchWithTokenTestFilePath);
break;
case "isAuthorizedWithToken":
await isAuthorizedWithToken(answers.testFilePath);
break;
case "documentsScenario":
await useScenario("documentsScenario");
break;
case "ecommerceContextScenario":
await useScenario("ecommerceContextScenario");
break;
case "ecommerceGroupScenario":
await useScenario("ecommerceGroupScenario");
break;
case "ecommercePolicyTemplateScenario":
await useScenario("ecommercePolicyTemplateScenario");
break;
case "ecommerceHierarchyAndAbacScenario":
await useScenario("ecommerceHierarchyAndAbacScenario");
break;
case "ecommerceBatchScenario":
await useScenario("ecommerceBatchScenario");
break;
case "createPolicyStore":
await createPolicyStore(
answers.validationMode,
answers.policyStoreDescription
);
break;
case "createStaticPolicy":
await createStaticPolicy(
answers.policyStoreId,
answers.policyPath,
answers.description
);
break;
case "createPolicyTemplate":
await createPolicyTemplate(
answers.policyStoreId,
answers.policyPath,
answers.description
);
break;
case "createIdentitySource":
await createIdentitySource(
answers.policyStoreId,
answers.principalEntityType,
answers.userPoolArn,
answers.appClientId,
answers.groupEntityType
);
break;
case "updateIdentitySource":
await updateIdentitySource(
answers.policyStoreId,
answers.identitySourceId,
answers.principalEntityType,
answers.userPoolArn,
answers.appClientId
);
break;
case "createTemplatePolicy":
const principal = {
entityType: answers.principalEntityType,
entityId: answers.principalEntityId,
};
const resource = {
entityType: answers.resourceEntityType,
entityId: answers.resourceEntityId,
};
await createTemplatePolicy(
answers.policyStoreId,
answers.policyTemplateId,
principal,
resource
);
break;
case "ecommerceCognitoIntegrationScenario":
await useScenario(
"ecommerceCognitoIntegrationScenario",
answers.userPoolArn,
answers.appClientId
);
break;
case "ecommerceCognitoGroupsScenario":
await useScenario(
"ecommerceCognitoGroupsScenario",
answers.userPoolArn,
answers.appClientId
);
break;
case "deletePolicy":
await deletePolicy(answers.policyStoreId, answers.policyId);
break;
case "deletePolicyTemplate":
await deletePolicyTemplate(
answers.policyStoreId,
answers.policyTemplateId
);
break;
case "deletePolicyStore":
await deletePolicyStore(answers.policyStoreId);
break;
case "deleteIdentitySource":
await deleteIdentitySource(
answers.policyStoreId,
answers.identitySourceId
);
break;
case "updatePolicyTemplate":
await updatePolicyTemplate(
answers.policyStoreId,
answers.policyTemplateId,
answers.statement,
answers.description
);
break;
case "getPolicy":
await getPolicy(answers.policyStoreId, answers.policyId);
break;
case "getIdentitySource":
await getIdentitySource(
answers.policyStoreId,
answers.identitySourceId
);
break;
case "getPolicyStore":
await getPolicyStore(answers.policyStoreId);
break;
case "getPolicyTemplate":
await getPolicyTemplate(
answers.policyStoreId,
answers.policyTemplateId
);
break;
case "getSchema":
await getSchema(answers.policyStoreId);
break;
case "listPolicies":
await listPolicies(answers.policyStoreId);
break;
case "listPolicyStores":
await listPolicyStores();
break;
case "listIdentitySources":
await listIdentitySources(answers.policyStoreId);
break;
case "listPolicyTemplates":
await listPolicyTemplates(answers.policyStoreId);
break;
case "putSchema":
await putSchema(answers.policyStoreId, answers.pathToSchema);
break;
case "updatePolicyStore":
await updatePolicyStore(
answers.policyStoreId,
answers.validationMode,
answers.policyStoreDescription
);
break;
case "updateStaticPolicy":
await updateStaticPolicy(
answers.policyStoreId,
answers.policyId,
answers.policyPath,
answers.description
);
break;
case "exit":
exit = true;
break;
default:
console.error(`Unknown action: ${answers.action}`);
}
} catch (err) {
console.error(
`There was an error while processing your request: ${err.message}`,
err
);
}
}
};
interactiveMode();