indraq_cli 1.5.8 → 1.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +1517 -1686
- package/cloud-api/.dockerignore +18 -0
- package/cloud-api/.env.example +14 -0
- package/cloud-api/Dockerfile +19 -0
- package/cloud-api/README.md +141 -0
- package/cloud-api/package-lock.json +2250 -0
- package/cloud-api/package.json +29 -0
- package/cloud-api/sql/001_init.sql +8 -0
- package/cloud-api/sql/002_user_providers_and_project_resources.sql +40 -0
- package/cloud-api/sql/003_environment_infrastructure.sql +19 -0
- package/cloud-api/sql/004_managed_aws_credentials.sql +20 -0
- package/cloud-api/sql/005_project_members_and_resource_grants.sql +22 -0
- package/cloud-api/sql/006_catalog_identity_password_security.sql +96 -0
- package/cloud-api/sql/007_aws_access_key_rotation.sql +16 -0
- package/cloud-api/src/index.ts +1254 -0
- package/cloud-api/tsconfig.json +18 -0
- package/dist/cli/create-program.d.ts.map +1 -1
- package/dist/cli/create-program.js +21 -3
- package/dist/cli/create-program.js.map +1 -1
- package/dist/cli/doctor.command.d.ts +1 -1
- package/dist/cli/doctor.command.d.ts.map +1 -1
- package/dist/cli/doctor.command.js +70 -12
- package/dist/cli/doctor.command.js.map +1 -1
- package/dist/cli/help-content.d.ts +1 -1
- package/dist/cli/help-content.d.ts.map +1 -1
- package/dist/cli/help-content.js +256 -177
- package/dist/cli/help-content.js.map +1 -1
- package/dist/modules/access/commands/access.command.d.ts +3 -0
- package/dist/modules/access/commands/access.command.d.ts.map +1 -0
- package/dist/modules/access/commands/access.command.js +226 -0
- package/dist/modules/access/commands/access.command.js.map +1 -0
- package/dist/modules/access/index.d.ts +3 -0
- package/dist/modules/access/index.d.ts.map +1 -0
- package/dist/modules/access/index.js +11 -0
- package/dist/modules/access/index.js.map +1 -0
- package/dist/modules/aws/commands/configure-aws.command.d.ts +2 -0
- package/dist/modules/aws/commands/configure-aws.command.d.ts.map +1 -0
- package/dist/modules/aws/commands/configure-aws.command.js +7 -0
- package/dist/modules/aws/commands/configure-aws.command.js.map +1 -0
- package/dist/modules/aws/commands/dns.command.d.ts +22 -0
- package/dist/modules/aws/commands/dns.command.d.ts.map +1 -0
- package/dist/modules/aws/commands/dns.command.js +229 -0
- package/dist/modules/aws/commands/dns.command.js.map +1 -0
- package/dist/modules/aws/commands/healthcheck.command.d.ts +22 -0
- package/dist/modules/aws/commands/healthcheck.command.d.ts.map +1 -0
- package/dist/modules/aws/commands/healthcheck.command.js +125 -0
- package/dist/modules/aws/commands/healthcheck.command.js.map +1 -0
- package/dist/modules/aws/commands/iam.command.d.ts +24 -0
- package/dist/modules/aws/commands/iam.command.d.ts.map +1 -0
- package/dist/modules/aws/commands/iam.command.js +219 -0
- package/dist/modules/aws/commands/iam.command.js.map +1 -0
- package/dist/modules/aws/config/aws-config.d.ts +23 -0
- package/dist/modules/aws/config/aws-config.d.ts.map +1 -0
- package/dist/modules/aws/config/aws-config.js +72 -0
- package/dist/modules/aws/config/aws-config.js.map +1 -0
- package/dist/modules/aws/index.d.ts +3 -0
- package/dist/modules/aws/index.d.ts.map +1 -0
- package/dist/modules/aws/index.js +54 -0
- package/dist/modules/aws/index.js.map +1 -0
- package/dist/modules/aws/services/aws-clients.d.ts +9 -0
- package/dist/modules/aws/services/aws-clients.d.ts.map +1 -0
- package/dist/modules/aws/services/aws-clients.js +43 -0
- package/dist/modules/aws/services/aws-clients.js.map +1 -0
- package/dist/modules/aws/services/route53-lookup.service.d.ts +9 -0
- package/dist/modules/aws/services/route53-lookup.service.d.ts.map +1 -0
- package/dist/modules/aws/services/route53-lookup.service.js +57 -0
- package/dist/modules/aws/services/route53-lookup.service.js.map +1 -0
- package/dist/modules/cloud/commands/cloud.command.d.ts +38 -0
- package/dist/modules/cloud/commands/cloud.command.d.ts.map +1 -0
- package/dist/modules/cloud/commands/cloud.command.js +443 -0
- package/dist/modules/cloud/commands/cloud.command.js.map +1 -0
- package/dist/modules/cloud/commands/credentials.command.d.ts +5 -0
- package/dist/modules/cloud/commands/credentials.command.d.ts.map +1 -0
- package/dist/modules/cloud/commands/credentials.command.js +25 -0
- package/dist/modules/cloud/commands/credentials.command.js.map +1 -0
- package/dist/modules/cloud/commands/environment.command.d.ts +6 -0
- package/dist/modules/cloud/commands/environment.command.d.ts.map +1 -0
- package/dist/modules/cloud/commands/environment.command.js +75 -0
- package/dist/modules/cloud/commands/environment.command.js.map +1 -0
- package/dist/modules/cloud/commands/provider.command.d.ts +3 -0
- package/dist/modules/cloud/commands/provider.command.d.ts.map +1 -0
- package/dist/modules/cloud/commands/provider.command.js +193 -0
- package/dist/modules/cloud/commands/provider.command.js.map +1 -0
- package/dist/modules/cloud/config/cloud-config.d.ts +19 -0
- package/dist/modules/cloud/config/cloud-config.d.ts.map +1 -0
- package/dist/modules/cloud/config/cloud-config.js +53 -0
- package/dist/modules/cloud/config/cloud-config.js.map +1 -0
- package/dist/modules/cloud/index.d.ts +3 -0
- package/dist/modules/cloud/index.d.ts.map +1 -0
- package/dist/modules/cloud/index.js +62 -0
- package/dist/modules/cloud/index.js.map +1 -0
- package/dist/modules/cloud/services/cloud-api.service.d.ts +17 -0
- package/dist/modules/cloud/services/cloud-api.service.d.ts.map +1 -0
- package/dist/modules/cloud/services/cloud-api.service.js +61 -0
- package/dist/modules/cloud/services/cloud-api.service.js.map +1 -0
- package/dist/modules/cloud/services/cloud-aws.service.d.ts +23 -0
- package/dist/modules/cloud/services/cloud-aws.service.d.ts.map +1 -0
- package/dist/modules/cloud/services/cloud-aws.service.js +26 -0
- package/dist/modules/cloud/services/cloud-aws.service.js.map +1 -0
- package/dist/modules/cloud/services/cloud-ghcr.service.d.ts +12 -0
- package/dist/modules/cloud/services/cloud-ghcr.service.d.ts.map +1 -0
- package/dist/modules/cloud/services/cloud-ghcr.service.js +31 -0
- package/dist/modules/cloud/services/cloud-ghcr.service.js.map +1 -0
- package/dist/modules/cloud/services/cloud-jenkins.service.d.ts +29 -0
- package/dist/modules/cloud/services/cloud-jenkins.service.d.ts.map +1 -0
- package/dist/modules/cloud/services/cloud-jenkins.service.js +236 -0
- package/dist/modules/cloud/services/cloud-jenkins.service.js.map +1 -0
- package/dist/modules/cloud/services/cloud-npm.service.d.ts +3 -0
- package/dist/modules/cloud/services/cloud-npm.service.d.ts.map +1 -0
- package/dist/modules/cloud/services/cloud-npm.service.js +13 -0
- package/dist/modules/cloud/services/cloud-npm.service.js.map +1 -0
- package/dist/modules/cloud/services/environment.service.d.ts +25 -0
- package/dist/modules/cloud/services/environment.service.d.ts.map +1 -0
- package/dist/modules/cloud/services/environment.service.js +21 -0
- package/dist/modules/cloud/services/environment.service.js.map +1 -0
- package/dist/modules/cloud/services/managed-aws-credential.service.d.ts +36 -0
- package/dist/modules/cloud/services/managed-aws-credential.service.d.ts.map +1 -0
- package/dist/modules/cloud/services/managed-aws-credential.service.js +35 -0
- package/dist/modules/cloud/services/managed-aws-credential.service.js.map +1 -0
- package/dist/modules/cloud/services/project-cloud.service.d.ts +28 -0
- package/dist/modules/cloud/services/project-cloud.service.d.ts.map +1 -0
- package/dist/modules/cloud/services/project-cloud.service.js +50 -0
- package/dist/modules/cloud/services/project-cloud.service.js.map +1 -0
- package/dist/modules/cloud/services/user-provider.service.d.ts +17 -0
- package/dist/modules/cloud/services/user-provider.service.d.ts.map +1 -0
- package/dist/modules/cloud/services/user-provider.service.js +25 -0
- package/dist/modules/cloud/services/user-provider.service.js.map +1 -0
- package/dist/modules/configure/configure.command.d.ts.map +1 -1
- package/dist/modules/configure/configure.command.js +17 -94
- package/dist/modules/configure/configure.command.js.map +1 -1
- package/dist/modules/deploy/commands/build.command.d.ts +1 -2
- package/dist/modules/deploy/commands/build.command.d.ts.map +1 -1
- package/dist/modules/deploy/commands/build.command.js +82 -124
- package/dist/modules/deploy/commands/build.command.js.map +1 -1
- package/dist/modules/deploy/index.d.ts.map +1 -1
- package/dist/modules/deploy/index.js +10 -30
- package/dist/modules/deploy/index.js.map +1 -1
- package/dist/modules/deploy/services/docker.service.d.ts +6 -3
- package/dist/modules/deploy/services/docker.service.d.ts.map +1 -1
- package/dist/modules/deploy/services/docker.service.js +8 -11
- package/dist/modules/deploy/services/docker.service.js.map +1 -1
- package/dist/modules/dockerfile/commands/create-dockerfile.command.d.ts +13 -0
- package/dist/modules/dockerfile/commands/create-dockerfile.command.d.ts.map +1 -0
- package/dist/modules/dockerfile/commands/create-dockerfile.command.js +39 -0
- package/dist/modules/dockerfile/commands/create-dockerfile.command.js.map +1 -0
- package/dist/modules/dockerfile/index.d.ts +3 -0
- package/dist/modules/dockerfile/index.d.ts.map +1 -0
- package/dist/modules/dockerfile/index.js +7 -0
- package/dist/modules/dockerfile/index.js.map +1 -0
- package/dist/modules/jenkins/commands/admin.command.d.ts +22 -0
- package/dist/modules/jenkins/commands/admin.command.d.ts.map +1 -0
- package/dist/modules/jenkins/commands/admin.command.js +128 -0
- package/dist/modules/jenkins/commands/admin.command.js.map +1 -0
- package/dist/modules/jenkins/commands/create-deployment.command.d.ts +13 -0
- package/dist/modules/jenkins/commands/create-deployment.command.d.ts.map +1 -0
- package/dist/modules/jenkins/commands/create-deployment.command.js +115 -0
- package/dist/modules/jenkins/commands/create-deployment.command.js.map +1 -0
- package/dist/modules/jenkins/index.d.ts +3 -0
- package/dist/modules/jenkins/index.d.ts.map +1 -0
- package/dist/modules/jenkins/index.js +28 -0
- package/dist/modules/jenkins/index.js.map +1 -0
- package/dist/modules/mobile/commands/build-mobile.command.d.ts.map +1 -1
- package/dist/modules/mobile/commands/build-mobile.command.js +4 -22
- package/dist/modules/mobile/commands/build-mobile.command.js.map +1 -1
- package/dist/modules/mobile/commands/configure-mobile.command.d.ts +1 -1
- package/dist/modules/mobile/commands/configure-mobile.command.d.ts.map +1 -1
- package/dist/modules/mobile/commands/configure-mobile.command.js +11 -9
- package/dist/modules/mobile/commands/configure-mobile.command.js.map +1 -1
- package/dist/modules/mobile/services/jenkins-mobile.service.d.ts +2 -2
- package/dist/modules/mobile/services/jenkins-mobile.service.d.ts.map +1 -1
- package/dist/modules/mobile/services/jenkins-mobile.service.js +1 -2
- package/dist/modules/mobile/services/jenkins-mobile.service.js.map +1 -1
- package/dist/modules/mobile/services/project.service.d.ts +2 -2
- package/dist/modules/mobile/services/project.service.d.ts.map +1 -1
- package/dist/modules/prebuild/commands/prebuild.command.d.ts +13 -0
- package/dist/modules/prebuild/commands/prebuild.command.d.ts.map +1 -0
- package/dist/modules/prebuild/commands/prebuild.command.js +507 -0
- package/dist/modules/prebuild/commands/prebuild.command.js.map +1 -0
- package/dist/modules/prebuild/index.d.ts +3 -0
- package/dist/modules/prebuild/index.d.ts.map +1 -0
- package/dist/modules/prebuild/index.js +19 -0
- package/dist/modules/prebuild/index.js.map +1 -0
- package/dist/modules/proxy/commands/configure-proxy.command.d.ts +2 -0
- package/dist/modules/proxy/commands/configure-proxy.command.d.ts.map +1 -0
- package/dist/modules/proxy/commands/configure-proxy.command.js +7 -0
- package/dist/modules/proxy/commands/configure-proxy.command.js.map +1 -0
- package/dist/modules/proxy/commands/npm-user.command.d.ts +28 -0
- package/dist/modules/proxy/commands/npm-user.command.d.ts.map +1 -0
- package/dist/modules/proxy/commands/npm-user.command.js +77 -0
- package/dist/modules/proxy/commands/npm-user.command.js.map +1 -0
- package/dist/modules/proxy/commands/proxy.command.d.ts +22 -0
- package/dist/modules/proxy/commands/proxy.command.d.ts.map +1 -0
- package/dist/modules/proxy/commands/proxy.command.js +173 -0
- package/dist/modules/proxy/commands/proxy.command.js.map +1 -0
- package/dist/modules/proxy/config/npm-config.d.ts +17 -0
- package/dist/modules/proxy/config/npm-config.d.ts.map +1 -0
- package/dist/modules/proxy/config/npm-config.js +50 -0
- package/dist/modules/proxy/config/npm-config.js.map +1 -0
- package/dist/modules/proxy/index.d.ts +3 -0
- package/dist/modules/proxy/index.d.ts.map +1 -0
- package/dist/modules/proxy/index.js +21 -0
- package/dist/modules/proxy/index.js.map +1 -0
- package/dist/modules/proxy/services/npm-api.service.d.ts +76 -0
- package/dist/modules/proxy/services/npm-api.service.d.ts.map +1 -0
- package/dist/modules/proxy/services/npm-api.service.js +82 -0
- package/dist/modules/proxy/services/npm-api.service.js.map +1 -0
- package/dist/modules/scaffold/commands/init.command.d.ts +6 -0
- package/dist/modules/scaffold/commands/init.command.d.ts.map +1 -0
- package/dist/modules/scaffold/commands/init.command.js +193 -0
- package/dist/modules/scaffold/commands/init.command.js.map +1 -0
- package/dist/modules/scaffold/config/project-metadata.d.ts +9 -0
- package/dist/modules/scaffold/config/project-metadata.d.ts.map +1 -0
- package/dist/modules/scaffold/config/project-metadata.js +75 -0
- package/dist/modules/scaffold/config/project-metadata.js.map +1 -0
- package/dist/modules/scaffold/index.d.ts +3 -0
- package/dist/modules/scaffold/index.d.ts.map +1 -0
- package/dist/modules/scaffold/index.js +7 -0
- package/dist/modules/scaffold/index.js.map +1 -0
- package/dist/modules/scaffold/services/docker-template.service.d.ts +3 -0
- package/dist/modules/scaffold/services/docker-template.service.d.ts.map +1 -0
- package/dist/modules/scaffold/services/docker-template.service.js +131 -0
- package/dist/modules/scaffold/services/docker-template.service.js.map +1 -0
- package/dist/modules/scaffold/services/filesystem.service.d.ts +7 -0
- package/dist/modules/scaffold/services/filesystem.service.d.ts.map +1 -0
- package/dist/modules/scaffold/services/filesystem.service.js +97 -0
- package/dist/modules/scaffold/services/filesystem.service.js.map +1 -0
- package/dist/modules/scaffold/services/project-template.service.d.ts +4 -0
- package/dist/modules/scaffold/services/project-template.service.d.ts.map +1 -0
- package/dist/modules/scaffold/services/project-template.service.js +82 -0
- package/dist/modules/scaffold/services/project-template.service.js.map +1 -0
- package/dist/modules/scaffold/types.d.ts +65 -0
- package/dist/modules/scaffold/types.d.ts.map +1 -0
- package/dist/modules/scaffold/types.js +3 -0
- package/dist/modules/scaffold/types.js.map +1 -0
- package/dist/modules/users/commands/user.command.d.ts +22 -0
- package/dist/modules/users/commands/user.command.d.ts.map +1 -0
- package/dist/modules/users/commands/user.command.js +350 -0
- package/dist/modules/users/commands/user.command.js.map +1 -0
- package/dist/modules/users/index.d.ts +3 -0
- package/dist/modules/users/index.d.ts.map +1 -0
- package/dist/modules/users/index.js +34 -0
- package/dist/modules/users/index.js.map +1 -0
- package/dist/modules/users/providers/aws-user.provider.d.ts +11 -0
- package/dist/modules/users/providers/aws-user.provider.d.ts.map +1 -0
- package/dist/modules/users/providers/aws-user.provider.js +129 -0
- package/dist/modules/users/providers/aws-user.provider.js.map +1 -0
- package/dist/modules/users/providers/jenkins-user.provider.d.ts +6 -0
- package/dist/modules/users/providers/jenkins-user.provider.d.ts.map +1 -0
- package/dist/modules/users/providers/jenkins-user.provider.js +97 -0
- package/dist/modules/users/providers/jenkins-user.provider.js.map +1 -0
- package/dist/modules/users/providers/npm-user.provider.d.ts +4 -0
- package/dist/modules/users/providers/npm-user.provider.d.ts.map +1 -0
- package/dist/modules/users/providers/npm-user.provider.js +47 -0
- package/dist/modules/users/providers/npm-user.provider.js.map +1 -0
- package/dist/shared/config/config-files.d.ts.map +1 -1
- package/dist/shared/config/config-files.js +14 -10
- package/dist/shared/config/config-files.js.map +1 -1
- package/dist/shared/github/github-api.service.d.ts.map +1 -1
- package/dist/shared/github/github-api.service.js +25 -37
- package/dist/shared/github/github-api.service.js.map +1 -1
- package/dist/shared/jenkins/jenkins.service.d.ts +2 -0
- package/dist/shared/jenkins/jenkins.service.d.ts.map +1 -1
- package/dist/shared/jenkins/jenkins.service.js +30 -1
- package/dist/shared/jenkins/jenkins.service.js.map +1 -1
- package/dist/shared/listing.d.ts +9 -0
- package/dist/shared/listing.d.ts.map +1 -0
- package/dist/shared/listing.js +29 -0
- package/dist/shared/listing.js.map +1 -0
- package/docs/ARCHITECTURE.md +29 -0
- package/docs/CREATE-DEPLOYMENT-reference.groovy +1105 -0
- package/package.json +76 -59
- package/templates/jenkins/CREATE-DEPLOYMENT.groovy +1105 -0
- package/templates/jenkins/Jenkinsfile-Mobile-App +759 -759
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.deleteUnifiedUser = exports.updateUnifiedUser = exports.createUnifiedUser = exports.listUnifiedUsers = void 0;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
9
|
+
const node_crypto_1 = require("node:crypto");
|
|
10
|
+
const aws_user_provider_1 = require("../providers/aws-user.provider");
|
|
11
|
+
const npm_user_provider_1 = require("../providers/npm-user.provider");
|
|
12
|
+
const jenkins_user_provider_1 = require("../providers/jenkins-user.provider");
|
|
13
|
+
const cloud_config_1 = require("../../cloud/config/cloud-config");
|
|
14
|
+
const cloud_api_service_1 = require("../../cloud/services/cloud-api.service");
|
|
15
|
+
const user_provider_service_1 = require("../../cloud/services/user-provider.service");
|
|
16
|
+
const managed_aws_credential_service_1 = require("../../cloud/services/managed-aws-credential.service");
|
|
17
|
+
const listing_1 = require("../../../shared/listing");
|
|
18
|
+
const csv = (value) => (value || '').split(',').map((x) => x.trim()).filter(Boolean);
|
|
19
|
+
const configuredProviders = async () => {
|
|
20
|
+
const configured = [];
|
|
21
|
+
if ((0, cloud_config_1.getCloudConfig)()?.token)
|
|
22
|
+
configured.push('cloud');
|
|
23
|
+
if (!(0, cloud_config_1.getCloudConfig)()?.token)
|
|
24
|
+
return configured;
|
|
25
|
+
const globals = await (0, user_provider_service_1.listUserProviders)();
|
|
26
|
+
if (globals.some((x) => x.provider === 'aws' && x.has_secret))
|
|
27
|
+
configured.push('aws');
|
|
28
|
+
if (globals.some((x) => x.provider === 'npm' && x.has_secret))
|
|
29
|
+
configured.push('npm');
|
|
30
|
+
if (globals.some((x) => (x.provider === 'jenkins-prod' || x.provider === 'jenkins-dev') && x.has_secret))
|
|
31
|
+
configured.push('jenkins');
|
|
32
|
+
return configured;
|
|
33
|
+
};
|
|
34
|
+
const requireManagerIdentity = async () => {
|
|
35
|
+
if (!(0, cloud_config_1.getCloudConfig)()?.token)
|
|
36
|
+
throw new Error('Unified user management requires an IndraQ Cloud login. Run `indraq login`.');
|
|
37
|
+
const me = await new cloud_api_service_1.CloudApiService().request('/auth/me');
|
|
38
|
+
if (me.role !== 'manager' && me.role !== 'admin')
|
|
39
|
+
throw new Error('Unified user management requires manager or admin access.');
|
|
40
|
+
return me;
|
|
41
|
+
};
|
|
42
|
+
const selectProviders = async (options) => {
|
|
43
|
+
const explicit = [...csv(options.providers), ...(options.cloud ? ['cloud'] : []), ...(options.aws ? ['aws'] : []), ...(options.npm ? ['npm'] : []), ...(options.jenkins ? ['jenkins'] : [])];
|
|
44
|
+
const configured = await configuredProviders();
|
|
45
|
+
if (!configured.length)
|
|
46
|
+
throw new Error('No user-management providers are configured. Configure IndraQ Cloud/provider credentials first.');
|
|
47
|
+
const invalid = explicit.filter((x) => !['cloud', 'aws', 'npm', 'jenkins'].includes(x));
|
|
48
|
+
if (invalid.length)
|
|
49
|
+
throw new Error(`Unknown providers: ${invalid.join(', ')}`);
|
|
50
|
+
if (explicit.length) {
|
|
51
|
+
const missing = explicit.filter((p) => !configured.includes(p));
|
|
52
|
+
if (missing.length)
|
|
53
|
+
throw new Error(`These selected providers are not configured: ${missing.join(', ')}.`);
|
|
54
|
+
return [...new Set(explicit)];
|
|
55
|
+
}
|
|
56
|
+
const a = await inquirer_1.default.prompt([{ type: 'checkbox', name: 'selected', message: 'Create/manage this user in:', choices: configured.map((p) => ({ name: p === 'cloud' ? 'INDRAQ CLOUD' : p.toUpperCase(), value: p, checked: true })), validate: (v) => v.length > 0 || 'Select at least one provider.' }]);
|
|
57
|
+
return a.selected;
|
|
58
|
+
};
|
|
59
|
+
const selectRole = async (actor, requested) => {
|
|
60
|
+
const allowed = actor.role === 'admin' ? ['user', 'manager', 'admin'] : ['user'];
|
|
61
|
+
if (requested) {
|
|
62
|
+
const role = requested.trim().toLowerCase();
|
|
63
|
+
if (!allowed.includes(role))
|
|
64
|
+
throw new Error(`You may assign only: ${allowed.join(', ')}.`);
|
|
65
|
+
return role;
|
|
66
|
+
}
|
|
67
|
+
if (allowed.length === 1)
|
|
68
|
+
return allowed[0];
|
|
69
|
+
return (await inquirer_1.default.prompt([{ type: 'list', name: 'role', message: 'IndraQ access level:', choices: [
|
|
70
|
+
{ name: 'USER — normal project access', value: 'user' },
|
|
71
|
+
{ name: 'MANAGER — manage normal users + audit access', value: 'manager' },
|
|
72
|
+
{ name: 'ADMIN — full control including managers/admins/environments', value: 'admin' }
|
|
73
|
+
] }])).role;
|
|
74
|
+
};
|
|
75
|
+
const generatedTemporaryPassword = () => {
|
|
76
|
+
// 18 random bytes -> 24 base64url chars; prepend classes to satisfy common provider policies.
|
|
77
|
+
return `Iq!9-${(0, node_crypto_1.randomBytes)(18).toString('base64url')}`;
|
|
78
|
+
};
|
|
79
|
+
const temporaryPassword = (explicit) => {
|
|
80
|
+
if (explicit) {
|
|
81
|
+
if (explicit.length < 10)
|
|
82
|
+
throw new Error('Temporary password must be at least 10 characters.');
|
|
83
|
+
return explicit;
|
|
84
|
+
}
|
|
85
|
+
return generatedTemporaryPassword();
|
|
86
|
+
};
|
|
87
|
+
const printResults = (results) => {
|
|
88
|
+
console.log(chalk_1.default.bold('\nProvider results'));
|
|
89
|
+
for (const r of results)
|
|
90
|
+
console.log(r.ok ? chalk_1.default.green(` ✓ ${r.provider}`) : chalk_1.default.red(` ✗ ${r.provider}: ${r.error}`));
|
|
91
|
+
};
|
|
92
|
+
const listCloudUsersInternal = async (options = {}) => new cloud_api_service_1.CloudApiService().request(`/users${(0, listing_1.queryString)(options)}`);
|
|
93
|
+
const selectCloudUser = async (usernameArg, email, options = {}) => {
|
|
94
|
+
if (usernameArg || email) {
|
|
95
|
+
const query = email || usernameArg || '';
|
|
96
|
+
const users = await listCloudUsersInternal({ search: query, all: true });
|
|
97
|
+
const found = users.find((u) => (email && u.email.toLowerCase() === email.toLowerCase()) || (usernameArg && u.name.toLowerCase() === usernameArg.toLowerCase()));
|
|
98
|
+
if (!found)
|
|
99
|
+
throw new Error(`IndraQ Cloud user ${query} was not found.`);
|
|
100
|
+
return found;
|
|
101
|
+
}
|
|
102
|
+
const users = await listCloudUsersInternal(options);
|
|
103
|
+
if (!users.length)
|
|
104
|
+
throw new Error('No organization users were found.');
|
|
105
|
+
const id = (await inquirer_1.default.prompt([{ type: 'list', name: 'id', message: 'User:', pageSize: 15, choices: users.map((u) => ({ name: `${u.email} — ${u.name} (${u.role})${u.is_active === false ? ' [disabled]' : ''}`, value: u.id })) }])).id;
|
|
106
|
+
return users.find((u) => u.id === id);
|
|
107
|
+
};
|
|
108
|
+
const findCloudUser = async (username, email) => {
|
|
109
|
+
const query = email || username;
|
|
110
|
+
const users = await listCloudUsersInternal({ search: query, all: true });
|
|
111
|
+
return users.find((u) => (email && u.email.toLowerCase() === email.toLowerCase()) || u.name.toLowerCase() === username.toLowerCase());
|
|
112
|
+
};
|
|
113
|
+
const registerManagedExternal = async (cloudUser, provider, externalUsername, externalEmail, reason) => {
|
|
114
|
+
await new cloud_api_service_1.CloudApiService().request(`/users/${cloudUser.id}/external-accounts/${provider}`, {
|
|
115
|
+
method: 'PUT', body: JSON.stringify({ externalUsername, ...(externalEmail ? { externalEmail } : {}), reason })
|
|
116
|
+
});
|
|
117
|
+
};
|
|
118
|
+
const provisionPasswordProvider = async (cloudUser, provider, password, email, username, reason) => {
|
|
119
|
+
const providers = await (0, user_provider_service_1.listUserProviders)();
|
|
120
|
+
const managerProvider = providers.find((p) => p.provider === provider && p.has_secret);
|
|
121
|
+
if (!managerProvider)
|
|
122
|
+
throw new Error(`Your ${provider} provider is not configured.`);
|
|
123
|
+
if (provider === 'npm') {
|
|
124
|
+
await (0, user_provider_service_1.provisionUserProvider)(cloudUser.id, 'npm', managerProvider.config, { identity: email, secret: password }, reason);
|
|
125
|
+
await registerManagedExternal(cloudUser, 'npm', username, email, reason);
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
await (0, user_provider_service_1.provisionUserProvider)(cloudUser.id, provider, managerProvider.config, { username, secret: password }, reason);
|
|
129
|
+
await registerManagedExternal(cloudUser, provider, username, email, reason);
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
const listUnifiedUsers = async (options) => {
|
|
133
|
+
await requireManagerIdentity();
|
|
134
|
+
const users = await listCloudUsersInternal(options);
|
|
135
|
+
console.table(users.map((u) => ({ email: u.email, name: u.name, role: u.role, active: u.is_active !== false, temporaryPassword: !!u.must_change_password, lastLogin: u.last_login_at || '' })));
|
|
136
|
+
};
|
|
137
|
+
exports.listUnifiedUsers = listUnifiedUsers;
|
|
138
|
+
const createUnifiedUser = async (usernameArg, options) => {
|
|
139
|
+
const actor = await requireManagerIdentity();
|
|
140
|
+
const username = usernameArg?.trim() || (await inquirer_1.default.prompt([{ type: 'input', name: 'username', message: 'Username:', validate: (v) => !!v.trim() || 'Required' }])).username.trim();
|
|
141
|
+
const selected = await selectProviders(options);
|
|
142
|
+
let role = await selectRole(actor, options.role);
|
|
143
|
+
let email = options.email;
|
|
144
|
+
if (selected.some((p) => p === 'npm' || p === 'cloud' || p === 'aws') && !email)
|
|
145
|
+
email = (await inquirer_1.default.prompt([{ type: 'input', name: 'email', message: 'Email:', validate: (v) => /^\S+@\S+\.\S+$/.test(v) || 'Enter a valid email.' }])).email;
|
|
146
|
+
const needsPassword = selected.some((p) => p === 'cloud' || p === 'npm' || p === 'jenkins');
|
|
147
|
+
const password = needsPassword ? temporaryPassword(options.password) : undefined;
|
|
148
|
+
// Run the highest-risk administrative preflight before creating anything in
|
|
149
|
+
// the other providers. This catches Jenkins CSRF/security-realm problems early.
|
|
150
|
+
if (selected.includes('jenkins')) {
|
|
151
|
+
console.log(chalk_1.default.gray('Checking Jenkins user-management access before creating providers...'));
|
|
152
|
+
await (0, jenkins_user_provider_1.preflightJenkinsUserManagement)(csv(options.jenkinsRoles));
|
|
153
|
+
console.log(chalk_1.default.green('✓ Jenkins user-management preflight passed.'));
|
|
154
|
+
}
|
|
155
|
+
const results = [];
|
|
156
|
+
const createdProviders = [];
|
|
157
|
+
let cloudUser;
|
|
158
|
+
if (selected.includes('cloud')) {
|
|
159
|
+
try {
|
|
160
|
+
cloudUser = await new cloud_api_service_1.CloudApiService().request('/users', { method: 'POST', body: JSON.stringify({ email, name: username, password, role, reason: options.reason || 'Create user through unified IndraQ CLI' }) });
|
|
161
|
+
results.push({ provider: 'cloud', ok: true });
|
|
162
|
+
createdProviders.push('cloud');
|
|
163
|
+
}
|
|
164
|
+
catch (e) {
|
|
165
|
+
results.push({ provider: 'cloud', ok: false, error: e instanceof Error ? e.message : String(e) });
|
|
166
|
+
printResults(results);
|
|
167
|
+
throw e;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
else if (selected.some((p) => p === 'aws' || p === 'npm' || p === 'jenkins')) {
|
|
171
|
+
cloudUser = await findCloudUser(username, email);
|
|
172
|
+
if (!cloudUser)
|
|
173
|
+
throw new Error('External provider users must be linked to an IndraQ Cloud user so access and password recovery can be managed. Include INDRAQ CLOUD, or create the Cloud user first.');
|
|
174
|
+
if (options.role && role !== cloudUser.role)
|
|
175
|
+
throw new Error(`Provider role assignment must match the existing IndraQ Cloud role (${cloudUser.role}). Update the Cloud role first or include INDRAQ CLOUD in the unified operation.`);
|
|
176
|
+
role = cloudUser.role;
|
|
177
|
+
}
|
|
178
|
+
let failure;
|
|
179
|
+
let generatedAws;
|
|
180
|
+
for (const provider of selected.filter((p) => p !== 'cloud')) {
|
|
181
|
+
try {
|
|
182
|
+
if (provider === 'aws') {
|
|
183
|
+
if (!cloudUser)
|
|
184
|
+
throw new Error('A linked IndraQ Cloud user is required to store recoverable AWS credentials.');
|
|
185
|
+
const key = await (0, aws_user_provider_1.createAwsUnifiedUser)(username, csv(options.awsPolicies), role);
|
|
186
|
+
generatedAws = key;
|
|
187
|
+
try {
|
|
188
|
+
await (0, managed_aws_credential_service_1.storeManagedAwsCredential)(cloudUser.id, username, key.accessKeyId, key.secretAccessKey, role, options.reason || 'Store generated AWS CLI credential for user recovery');
|
|
189
|
+
}
|
|
190
|
+
catch (storeError) {
|
|
191
|
+
try {
|
|
192
|
+
await (0, aws_user_provider_1.deleteAwsUnifiedUser)(username);
|
|
193
|
+
}
|
|
194
|
+
catch { /* avoid leaving an untracked secret when possible */ }
|
|
195
|
+
throw new Error(`AWS user was created but its secret could not be stored safely in IndraQ Cloud, so cleanup was attempted: ${storeError instanceof Error ? storeError.message : String(storeError)}`);
|
|
196
|
+
}
|
|
197
|
+
console.log(chalk_1.default.green(` AWS key stored encrypted for ${email}. The user can retrieve it after login with: indraq iam credentials ${username}`));
|
|
198
|
+
console.log(chalk_1.default.gray(` AWS inline role policy: IndraQBaseRole (${role})`));
|
|
199
|
+
if (key.attachedPolicies.length)
|
|
200
|
+
console.log(chalk_1.default.gray(` Additional AWS managed policies (${role}): ${key.attachedPolicies.join(', ')}`));
|
|
201
|
+
}
|
|
202
|
+
else if (provider === 'npm') {
|
|
203
|
+
if (!cloudUser)
|
|
204
|
+
throw new Error('A linked IndraQ Cloud user is required for managed NPM access.');
|
|
205
|
+
const npmRole = options.npmRole || (role === 'user' ? 'user' : 'admin');
|
|
206
|
+
await (0, npm_user_provider_1.createNpmUnifiedUser)(username, email, password, npmRole);
|
|
207
|
+
await provisionPasswordProvider(cloudUser, 'npm', password, email, username, options.reason || 'Provision managed NPM account for first-login password rotation');
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
if (!cloudUser)
|
|
211
|
+
throw new Error('A linked IndraQ Cloud user is required for managed Jenkins access.');
|
|
212
|
+
await (0, jenkins_user_provider_1.createJenkinsUser)(username, password, csv(options.jenkinsRoles));
|
|
213
|
+
const providers = await (0, user_provider_service_1.listUserProviders)();
|
|
214
|
+
const jenkinsProvider = providers.some((p) => p.provider === 'jenkins-prod' && p.has_secret) ? 'jenkins-prod' : 'jenkins-dev';
|
|
215
|
+
await provisionPasswordProvider(cloudUser, jenkinsProvider, password, email || `${username}@local.invalid`, username, options.reason || 'Provision managed Jenkins account for first-login password rotation');
|
|
216
|
+
}
|
|
217
|
+
results.push({ provider, ok: true });
|
|
218
|
+
createdProviders.push(provider);
|
|
219
|
+
}
|
|
220
|
+
catch (e) {
|
|
221
|
+
failure = e instanceof Error ? e : new Error(String(e));
|
|
222
|
+
results.push({ provider, ok: false, error: failure.message });
|
|
223
|
+
break;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
if (!failure && generatedAws && cloudUser) {
|
|
227
|
+
try {
|
|
228
|
+
await (0, user_provider_service_1.provisionUserProvider)(cloudUser.id, 'aws', generatedAws.providerConfig, { accessKeyId: generatedAws.accessKeyId, secretAccessKey: generatedAws.secretAccessKey }, options.reason || 'Provision generated AWS credentials for the new user');
|
|
229
|
+
console.log(chalk_1.default.green(` ✓ AWS provider is ready in ${email}'s IndraQ account; no second AWS setup is required.`));
|
|
230
|
+
}
|
|
231
|
+
catch (error) {
|
|
232
|
+
failure = error instanceof Error ? error : new Error(String(error));
|
|
233
|
+
results.push({ provider: 'aws', ok: false, error: `Target Cloud AWS provider provisioning failed: ${failure.message}` });
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
if (failure) {
|
|
237
|
+
console.log(chalk_1.default.yellow('\nA provider failed. Rolling back users created by this command...'));
|
|
238
|
+
for (const provider of [...createdProviders].reverse()) {
|
|
239
|
+
try {
|
|
240
|
+
if (provider === 'jenkins')
|
|
241
|
+
await (0, jenkins_user_provider_1.deleteJenkinsUser)(username);
|
|
242
|
+
else if (provider === 'npm')
|
|
243
|
+
await (0, npm_user_provider_1.deleteNpmUnifiedUser)(email || username);
|
|
244
|
+
else if (provider === 'aws') {
|
|
245
|
+
await (0, aws_user_provider_1.deleteAwsUnifiedUser)(username);
|
|
246
|
+
if (cloudUser)
|
|
247
|
+
await (0, managed_aws_credential_service_1.deleteManagedAwsCredential)(cloudUser.id, username, options.reason || 'Rollback stored AWS credential after unified user creation failure');
|
|
248
|
+
}
|
|
249
|
+
else if (cloudUser) {
|
|
250
|
+
await new cloud_api_service_1.CloudApiService().request(`/users/${cloudUser.id}`, { method: 'DELETE', body: JSON.stringify({ reason: options.reason || 'Rollback Cloud user after unified user creation failure' }) });
|
|
251
|
+
}
|
|
252
|
+
console.log(chalk_1.default.gray(` ↶ rolled back ${provider}`));
|
|
253
|
+
}
|
|
254
|
+
catch (rollbackError) {
|
|
255
|
+
console.log(chalk_1.default.yellow(` ⚠ rollback failed for ${provider}: ${rollbackError instanceof Error ? rollbackError.message : String(rollbackError)}`));
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
printResults(results);
|
|
260
|
+
if (failure)
|
|
261
|
+
throw new Error(`Unified user creation failed and best-effort rollback was attempted: ${failure.message}`);
|
|
262
|
+
if (password) {
|
|
263
|
+
console.log(chalk_1.default.yellow('\nTemporary first-login password (show this to the user securely):'));
|
|
264
|
+
console.log(chalk_1.default.bold(password));
|
|
265
|
+
console.log(chalk_1.default.gray("The user is forced to replace this password on first IndraQ login. Managed NPM/Jenkins passwords are rotated to the user's new password at the same time."));
|
|
266
|
+
}
|
|
267
|
+
};
|
|
268
|
+
exports.createUnifiedUser = createUnifiedUser;
|
|
269
|
+
const updateUnifiedUser = async (usernameArg, options) => {
|
|
270
|
+
const actor = await requireManagerIdentity();
|
|
271
|
+
const target = await selectCloudUser(usernameArg, options.email, options);
|
|
272
|
+
const username = target.name;
|
|
273
|
+
const selected = await selectProviders(options);
|
|
274
|
+
let role = target?.role || 'user';
|
|
275
|
+
if (options.role)
|
|
276
|
+
role = await selectRole(actor, options.role);
|
|
277
|
+
if (target && options.role && role !== target.role)
|
|
278
|
+
await new cloud_api_service_1.CloudApiService().request(`/users/${target.id}/role`, { method: 'PATCH', body: JSON.stringify({ role, reason: options.reason || 'Update user role through unified CLI' }) });
|
|
279
|
+
const password = options.password ? temporaryPassword(options.password) : undefined;
|
|
280
|
+
const results = [];
|
|
281
|
+
for (const provider of selected) {
|
|
282
|
+
try {
|
|
283
|
+
if (provider === 'cloud') {
|
|
284
|
+
if (!target)
|
|
285
|
+
throw new Error('IndraQ Cloud user not found.');
|
|
286
|
+
if (password)
|
|
287
|
+
await new cloud_api_service_1.CloudApiService().request(`/users/${target.id}/password`, { method: 'PATCH', body: JSON.stringify({ password, reason: options.reason || 'Password update through unified CLI' }) });
|
|
288
|
+
}
|
|
289
|
+
else if (provider === 'aws')
|
|
290
|
+
await (0, aws_user_provider_1.updateAwsUnifiedUser)(username, csv(options.awsPolicies), role);
|
|
291
|
+
else if (provider === 'npm')
|
|
292
|
+
await (0, npm_user_provider_1.updateNpmUnifiedUser)(username, target.email, password, options.npmRole);
|
|
293
|
+
else
|
|
294
|
+
await (0, jenkins_user_provider_1.updateJenkinsUser)(username, password, csv(options.jenkinsRoles));
|
|
295
|
+
results.push({ provider, ok: true });
|
|
296
|
+
}
|
|
297
|
+
catch (e) {
|
|
298
|
+
results.push({ provider, ok: false, error: e instanceof Error ? e.message : String(e) });
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
printResults(results);
|
|
302
|
+
if (results.some((r) => !r.ok))
|
|
303
|
+
throw new Error('One or more providers failed; review the result summary.');
|
|
304
|
+
};
|
|
305
|
+
exports.updateUnifiedUser = updateUnifiedUser;
|
|
306
|
+
const deleteUnifiedUser = async (usernameArg, options) => {
|
|
307
|
+
await requireManagerIdentity();
|
|
308
|
+
const target = await selectCloudUser(usernameArg, options.email, options);
|
|
309
|
+
const username = target.name;
|
|
310
|
+
const selected = await selectProviders(options);
|
|
311
|
+
if (!options.yes) {
|
|
312
|
+
const a = await inquirer_1.default.prompt([{ type: 'confirm', name: 'ok', message: `Delete ${target.email} (${username}) from ${selected.join(', ')}?`, default: false }]);
|
|
313
|
+
if (!a.ok)
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
316
|
+
const results = [];
|
|
317
|
+
for (const provider of selected) {
|
|
318
|
+
try {
|
|
319
|
+
if (provider === 'cloud') {
|
|
320
|
+
if (!target)
|
|
321
|
+
throw new Error('IndraQ Cloud user not found.');
|
|
322
|
+
await new cloud_api_service_1.CloudApiService().request(`/users/${target.id}`, { method: 'DELETE', body: JSON.stringify({ reason: options.reason || 'Delete user through unified CLI' }) });
|
|
323
|
+
}
|
|
324
|
+
else if (provider === 'aws') {
|
|
325
|
+
await (0, aws_user_provider_1.deleteAwsUnifiedUser)(username);
|
|
326
|
+
if (target)
|
|
327
|
+
await (0, managed_aws_credential_service_1.deleteManagedAwsCredential)(target.id, username, options.reason || 'Delete stored AWS credential after unified AWS user deletion');
|
|
328
|
+
}
|
|
329
|
+
else if (provider === 'npm') {
|
|
330
|
+
await (0, npm_user_provider_1.deleteNpmUnifiedUser)(target.email || username);
|
|
331
|
+
await new cloud_api_service_1.CloudApiService().request(`/users/${target.id}/external-accounts/npm`, { method: 'DELETE', body: JSON.stringify({ reason: options.reason || 'Remove managed NPM identity after deletion' }) });
|
|
332
|
+
}
|
|
333
|
+
else {
|
|
334
|
+
await (0, jenkins_user_provider_1.deleteJenkinsUser)(username);
|
|
335
|
+
const providers = await (0, user_provider_service_1.listUserProviders)();
|
|
336
|
+
const jenkinsProvider = providers.some((p) => p.provider === 'jenkins-prod' && p.has_secret) ? 'jenkins-prod' : 'jenkins-dev';
|
|
337
|
+
await new cloud_api_service_1.CloudApiService().request(`/users/${target.id}/external-accounts/${jenkinsProvider}`, { method: 'DELETE', body: JSON.stringify({ reason: options.reason || 'Remove managed Jenkins identity after deletion' }) });
|
|
338
|
+
}
|
|
339
|
+
results.push({ provider, ok: true });
|
|
340
|
+
}
|
|
341
|
+
catch (e) {
|
|
342
|
+
results.push({ provider, ok: false, error: e instanceof Error ? e.message : String(e) });
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
printResults(results);
|
|
346
|
+
if (results.some((r) => !r.ok))
|
|
347
|
+
throw new Error('One or more providers failed; review the result summary.');
|
|
348
|
+
};
|
|
349
|
+
exports.deleteUnifiedUser = deleteUnifiedUser;
|
|
350
|
+
//# sourceMappingURL=user.command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user.command.js","sourceRoot":"","sources":["../../../../src/modules/users/commands/user.command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/users/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBpC,eAAO,MAAM,kBAAkB,GAAI,SAAS,OAAO,KAAG,IAWrD,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerUserModule = void 0;
|
|
4
|
+
const user_command_1 = require("./commands/user.command");
|
|
5
|
+
const common = (c) => c
|
|
6
|
+
.option('--email <email>')
|
|
7
|
+
.option('--password <password>', 'Temporary password; create generates one automatically when omitted')
|
|
8
|
+
.option('--providers <list>', 'cloud,aws,npm,jenkins')
|
|
9
|
+
.option('--cloud', 'Only/include IndraQ Cloud')
|
|
10
|
+
.option('--aws', 'Only/include AWS')
|
|
11
|
+
.option('--npm', 'Only/include NPM')
|
|
12
|
+
.option('--jenkins', 'Only/include Jenkins')
|
|
13
|
+
.option('--role <role>', 'IndraQ role: user, manager, or admin')
|
|
14
|
+
.option('--reason <reason>', 'Audit reason')
|
|
15
|
+
.option('--aws-policies <arns>')
|
|
16
|
+
.option('--npm-role <role>')
|
|
17
|
+
.option('--jenkins-roles <roles>')
|
|
18
|
+
.option('--search <text>', 'Filter the organization user selector')
|
|
19
|
+
.option('--limit <number>', 'Number of users to load', '10')
|
|
20
|
+
.option('--all', 'Load all users');
|
|
21
|
+
const registerUserModule = (program) => {
|
|
22
|
+
const user = program.command('user').description('Manage organization users across IndraQ Cloud and configured providers.');
|
|
23
|
+
user.command('list')
|
|
24
|
+
.description('List organization users (manager/admin).')
|
|
25
|
+
.option('--search <text>')
|
|
26
|
+
.option('--limit <number>', 'Number of rows', '10')
|
|
27
|
+
.option('--all')
|
|
28
|
+
.action(user_command_1.listUnifiedUsers);
|
|
29
|
+
common(user.command('create [username]')).action(user_command_1.createUnifiedUser);
|
|
30
|
+
common(user.command('update [username]')).action(user_command_1.updateUnifiedUser);
|
|
31
|
+
common(user.command('delete [username]')).option('-y, --yes').action(user_command_1.deleteUnifiedUser);
|
|
32
|
+
};
|
|
33
|
+
exports.registerUserModule = registerUserModule;
|
|
34
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/users/index.ts"],"names":[],"mappings":";;;AACA,0DAAoH;AAEpH,MAAM,MAAM,GAAG,CAAC,CAAU,EAAW,EAAE,CAAC,CAAC;KACtC,MAAM,CAAC,iBAAiB,CAAC;KACzB,MAAM,CAAC,uBAAuB,EAAE,qEAAqE,CAAC;KACtG,MAAM,CAAC,oBAAoB,EAAE,uBAAuB,CAAC;KACrD,MAAM,CAAC,SAAS,EAAE,2BAA2B,CAAC;KAC9C,MAAM,CAAC,OAAO,EAAE,kBAAkB,CAAC;KACnC,MAAM,CAAC,OAAO,EAAE,kBAAkB,CAAC;KACnC,MAAM,CAAC,WAAW,EAAE,sBAAsB,CAAC;KAC3C,MAAM,CAAC,eAAe,EAAE,sCAAsC,CAAC;KAC/D,MAAM,CAAC,mBAAmB,EAAE,cAAc,CAAC;KAC3C,MAAM,CAAC,uBAAuB,CAAC;KAC/B,MAAM,CAAC,mBAAmB,CAAC;KAC3B,MAAM,CAAC,yBAAyB,CAAC;KACjC,MAAM,CAAC,iBAAiB,EAAE,uCAAuC,CAAC;KAClE,MAAM,CAAC,kBAAkB,EAAE,yBAAyB,EAAE,IAAI,CAAC;KAC3D,MAAM,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;AAE9B,MAAM,kBAAkB,GAAG,CAAC,OAAgB,EAAQ,EAAE;IAC3D,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,yEAAyE,CAAC,CAAC;IAC5H,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;SACjB,WAAW,CAAC,0CAA0C,CAAC;SACvD,MAAM,CAAC,iBAAiB,CAAC;SACzB,MAAM,CAAC,kBAAkB,EAAE,gBAAgB,EAAE,IAAI,CAAC;SAClD,MAAM,CAAC,OAAO,CAAC;SACf,MAAM,CAAC,+BAAgB,CAAC,CAAC;IAC5B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC,gCAAiB,CAAC,CAAC;IACpE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC,gCAAiB,CAAC,CAAC;IACpE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,gCAAiB,CAAC,CAAC;AAC1F,CAAC,CAAC;AAXW,QAAA,kBAAkB,sBAW7B"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type AwsConfig, type IndraQRole } from '../../cloud/services/cloud-aws.service';
|
|
2
|
+
export interface AwsCliCredential {
|
|
3
|
+
accessKeyId: string;
|
|
4
|
+
secretAccessKey: string;
|
|
5
|
+
attachedPolicies: string[];
|
|
6
|
+
providerConfig: AwsConfig;
|
|
7
|
+
}
|
|
8
|
+
export declare const createAwsUnifiedUser: (username: string, additionalArns: string[], role: IndraQRole) => Promise<AwsCliCredential>;
|
|
9
|
+
export declare const updateAwsUnifiedUser: (username: string, additionalArns: string[], role: IndraQRole) => Promise<void>;
|
|
10
|
+
export declare const deleteAwsUnifiedUser: (username: string) => Promise<void>;
|
|
11
|
+
//# sourceMappingURL=aws-user.provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aws-user.provider.d.ts","sourceRoot":"","sources":["../../../../src/modules/users/providers/aws-user.provider.ts"],"names":[],"mappings":"AAUA,OAAO,EAAyB,KAAK,SAAS,EAAwB,KAAK,UAAU,EAAE,MAAM,wCAAwC,CAAC;AA+DtI,MAAM,WAAW,gBAAgB;IAAG,WAAW,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAAC,cAAc,EAAE,SAAS,CAAC;CAAE;AA2C1I,eAAO,MAAM,oBAAoB,GAAU,UAAU,MAAM,EAAE,gBAAgB,MAAM,EAAE,EAAE,MAAM,UAAU,KAAG,OAAO,CAAC,gBAAgB,CAmBjI,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAU,UAAU,MAAM,EAAE,gBAAgB,MAAM,EAAE,EAAE,MAAM,UAAU,KAAG,OAAO,CAAC,IAAI,CAIrH,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,IAAI,CAIzE,CAAC"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.deleteAwsUnifiedUser = exports.updateAwsUnifiedUser = exports.createAwsUnifiedUser = void 0;
|
|
4
|
+
const client_iam_1 = require("@aws-sdk/client-iam");
|
|
5
|
+
const cloud_aws_service_1 = require("../../cloud/services/cloud-aws.service");
|
|
6
|
+
const iam_command_1 = require("../../aws/commands/iam.command");
|
|
7
|
+
const unique = (items) => [...new Set(items.map((v) => v.trim()).filter(Boolean))];
|
|
8
|
+
const basePolicyName = 'IndraQBaseRole';
|
|
9
|
+
const roleInlinePolicy = (role, hostedZoneId) => {
|
|
10
|
+
const zoneArn = hostedZoneId ? `arn:aws:route53:::hostedzone/${hostedZoneId.replace(/^\/hostedzone\//, '')}` : undefined;
|
|
11
|
+
const healthRead = {
|
|
12
|
+
Sid: 'IndraQHealthCheckRead', Effect: 'Allow',
|
|
13
|
+
Action: ['route53:ListHealthChecks', 'route53:GetHealthCheck', 'route53:GetHealthCheckStatus', 'route53:GetHealthCheckLastFailureReason', 'route53:ListTagsForResource', 'route53:GetChange'],
|
|
14
|
+
Resource: '*'
|
|
15
|
+
};
|
|
16
|
+
if (role === 'user') {
|
|
17
|
+
const statements = [healthRead];
|
|
18
|
+
if (zoneArn) {
|
|
19
|
+
statements.push({ Sid: 'IndraQDefaultHostedZoneRead', Effect: 'Allow', Action: 'route53:GetHostedZone', Resource: zoneArn }, {
|
|
20
|
+
Sid: 'IndraQCreateRecordsInDefaultZone', Effect: 'Allow',
|
|
21
|
+
Action: 'route53:ChangeResourceRecordSets', Resource: zoneArn,
|
|
22
|
+
Condition: { 'ForAllValues:StringEquals': { 'route53:ChangeResourceRecordSetsActions': ['CREATE'] } }
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
return { Version: '2012-10-17', Statement: statements };
|
|
26
|
+
}
|
|
27
|
+
const iamManagement = [
|
|
28
|
+
{
|
|
29
|
+
Sid: 'IndraQIamUserManagement', Effect: 'Allow',
|
|
30
|
+
Action: [
|
|
31
|
+
'iam:GetUser', 'iam:CreateUser', 'iam:DeleteUser', 'iam:CreateAccessKey', 'iam:DeleteAccessKey', 'iam:ListAccessKeys',
|
|
32
|
+
'iam:ListAttachedUserPolicies', 'iam:AttachUserPolicy', 'iam:DetachUserPolicy', 'iam:ListUserPolicies', 'iam:PutUserPolicy',
|
|
33
|
+
'iam:DeleteUserPolicy', 'iam:GetUserPolicy', 'iam:ListGroupsForUser', 'iam:RemoveUserFromGroup'
|
|
34
|
+
],
|
|
35
|
+
Resource: 'arn:aws:iam::*:user/*'
|
|
36
|
+
},
|
|
37
|
+
{ Sid: 'IndraQIamDiscovery', Effect: 'Allow', Action: ['iam:ListUsers', 'iam:ListPolicies'], Resource: '*' }
|
|
38
|
+
];
|
|
39
|
+
if (role === 'manager') {
|
|
40
|
+
return { Version: '2012-10-17', Statement: [
|
|
41
|
+
healthRead,
|
|
42
|
+
{ Sid: 'IndraQRoute53RecordDiscovery', Effect: 'Allow', Action: ['route53:ListHostedZones', 'route53:ListResourceRecordSets'], Resource: '*' },
|
|
43
|
+
{ Sid: 'IndraQRoute53RecordManagement', Effect: 'Allow', Action: ['route53:GetHostedZone', 'route53:ChangeResourceRecordSets'], Resource: 'arn:aws:route53:::hostedzone/*' },
|
|
44
|
+
...iamManagement
|
|
45
|
+
] };
|
|
46
|
+
}
|
|
47
|
+
return { Version: '2012-10-17', Statement: [
|
|
48
|
+
{ Sid: 'IndraQRoute53Admin', Effect: 'Allow', Action: 'route53:*', Resource: '*' },
|
|
49
|
+
...iamManagement
|
|
50
|
+
] };
|
|
51
|
+
};
|
|
52
|
+
const putBaseRolePolicy = async (iam, username, role, hostedZoneId) => {
|
|
53
|
+
await iam.send(new client_iam_1.PutUserPolicyCommand({
|
|
54
|
+
UserName: username,
|
|
55
|
+
PolicyName: basePolicyName,
|
|
56
|
+
PolicyDocument: JSON.stringify(roleInlinePolicy(role, hostedZoneId))
|
|
57
|
+
}));
|
|
58
|
+
};
|
|
59
|
+
const listAttachedPolicies = async (iam, username) => {
|
|
60
|
+
const result = [];
|
|
61
|
+
let marker;
|
|
62
|
+
do {
|
|
63
|
+
const output = await iam.send(new client_iam_1.ListAttachedUserPoliciesCommand({ UserName: username, ...(marker ? { Marker: marker } : {}) }));
|
|
64
|
+
result.push(...(output.AttachedPolicies || []).map((item) => item.PolicyArn ?? '').filter(Boolean));
|
|
65
|
+
marker = output.IsTruncated ? output.Marker : undefined;
|
|
66
|
+
} while (marker);
|
|
67
|
+
return unique(result);
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Reconcile only policies that IndraQ owns through its role mapping. Policies
|
|
71
|
+
* attached manually outside IndraQ are intentionally left alone.
|
|
72
|
+
*/
|
|
73
|
+
const reconcileRolePolicies = async (iam, username, rolePolicies, role, additionalArns) => {
|
|
74
|
+
const roleManaged = unique([
|
|
75
|
+
...(rolePolicies?.user || []),
|
|
76
|
+
...(rolePolicies?.manager || []),
|
|
77
|
+
...(rolePolicies?.admin || [])
|
|
78
|
+
]);
|
|
79
|
+
const desired = unique([...(rolePolicies?.[role] || []), ...additionalArns]);
|
|
80
|
+
const attached = await listAttachedPolicies(iam, username);
|
|
81
|
+
// Remove policy grants that came from another IndraQ role. This prevents a
|
|
82
|
+
// demoted admin/manager from retaining elevated AWS permissions.
|
|
83
|
+
for (const PolicyArn of attached.filter((arn) => roleManaged.includes(arn) && !desired.includes(arn))) {
|
|
84
|
+
await iam.send(new client_iam_1.DetachUserPolicyCommand({ UserName: username, PolicyArn }));
|
|
85
|
+
}
|
|
86
|
+
for (const PolicyArn of desired.filter((arn) => !attached.includes(arn))) {
|
|
87
|
+
await iam.send(new client_iam_1.AttachUserPolicyCommand({ UserName: username, PolicyArn }));
|
|
88
|
+
}
|
|
89
|
+
return desired;
|
|
90
|
+
};
|
|
91
|
+
const createAwsUnifiedUser = async (username, additionalArns, role) => {
|
|
92
|
+
const { iam, rolePolicies, region, hostedZoneId, hostedZoneName } = await (0, cloud_aws_service_1.createCloudAwsClients)('Create unified AWS user');
|
|
93
|
+
let created = false;
|
|
94
|
+
try {
|
|
95
|
+
await iam.send(new client_iam_1.CreateUserCommand({ UserName: username }));
|
|
96
|
+
created = true;
|
|
97
|
+
await putBaseRolePolicy(iam, username, role, hostedZoneId);
|
|
98
|
+
const attachedPolicies = await reconcileRolePolicies(iam, username, rolePolicies, role, additionalArns);
|
|
99
|
+
const output = await iam.send(new client_iam_1.CreateAccessKeyCommand({ UserName: username }));
|
|
100
|
+
const key = output.AccessKey;
|
|
101
|
+
if (!key?.AccessKeyId || !key.SecretAccessKey)
|
|
102
|
+
throw new Error('AWS did not return a complete access key.');
|
|
103
|
+
return { accessKeyId: key.AccessKeyId, secretAccessKey: key.SecretAccessKey, attachedPolicies, providerConfig: { region, ...(hostedZoneId ? { hostedZoneId } : {}), ...(hostedZoneName ? { hostedZoneName } : {}), ...(rolePolicies ? { rolePolicies } : {}) } };
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
if (created) {
|
|
107
|
+
try {
|
|
108
|
+
await (0, iam_command_1.purgeIamUserDependencies)(iam, username);
|
|
109
|
+
await iam.send(new client_iam_1.DeleteUserCommand({ UserName: username }));
|
|
110
|
+
}
|
|
111
|
+
catch { /* best effort rollback */ }
|
|
112
|
+
}
|
|
113
|
+
throw error;
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
exports.createAwsUnifiedUser = createAwsUnifiedUser;
|
|
117
|
+
const updateAwsUnifiedUser = async (username, additionalArns, role) => {
|
|
118
|
+
const { iam, rolePolicies, hostedZoneId } = await (0, cloud_aws_service_1.createCloudAwsClients)('Update unified AWS user');
|
|
119
|
+
await putBaseRolePolicy(iam, username, role, hostedZoneId);
|
|
120
|
+
await reconcileRolePolicies(iam, username, rolePolicies, role, additionalArns);
|
|
121
|
+
};
|
|
122
|
+
exports.updateAwsUnifiedUser = updateAwsUnifiedUser;
|
|
123
|
+
const deleteAwsUnifiedUser = async (username) => {
|
|
124
|
+
const { iam } = await (0, cloud_aws_service_1.createCloudAwsClients)('Delete unified AWS user');
|
|
125
|
+
await (0, iam_command_1.purgeIamUserDependencies)(iam, username);
|
|
126
|
+
await iam.send(new client_iam_1.DeleteUserCommand({ UserName: username }));
|
|
127
|
+
};
|
|
128
|
+
exports.deleteAwsUnifiedUser = deleteAwsUnifiedUser;
|
|
129
|
+
//# sourceMappingURL=aws-user.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aws-user.provider.js","sourceRoot":"","sources":["../../../../src/modules/users/providers/aws-user.provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const buildJenkinsUserScript: (operation: "create" | "update" | "delete", username: string, password?: string, roles?: string[]) => string;
|
|
2
|
+
export declare const createJenkinsUser: (username: string, password: string, roles: string[]) => Promise<void>;
|
|
3
|
+
export declare const updateJenkinsUser: (username: string, password: string | undefined, roles: string[]) => Promise<void>;
|
|
4
|
+
export declare const deleteJenkinsUser: (username: string) => Promise<void>;
|
|
5
|
+
export declare const preflightJenkinsUserManagement: (roles?: string[]) => Promise<void>;
|
|
6
|
+
//# sourceMappingURL=jenkins-user.provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jenkins-user.provider.d.ts","sourceRoot":"","sources":["../../../../src/modules/users/providers/jenkins-user.provider.ts"],"names":[],"mappings":"AAqCA,eAAO,MAAM,sBAAsB,GAAI,WAAW,QAAQ,GAAG,QAAQ,GAAG,QAAQ,EAAE,UAAU,MAAM,EAAE,WAAW,MAAM,EAAE,QAAO,MAAM,EAAO,KAAG,MA+B7I,CAAC;AAQF,eAAO,MAAM,iBAAiB,GAAU,UAAU,MAAM,EAAE,UAAU,MAAM,EAAE,OAAO,MAAM,EAAE,KAAG,OAAO,CAAC,IAAI,CAAsH,CAAC;AACjO,eAAO,MAAM,iBAAiB,GAAU,UAAU,MAAM,EAAE,UAAU,MAAM,GAAG,SAAS,EAAE,OAAO,MAAM,EAAE,KAAG,OAAO,CAAC,IAAI,CAAsH,CAAC;AAC7O,eAAO,MAAM,iBAAiB,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,IAAI,CAAqG,CAAC;AAE7K,eAAO,MAAM,8BAA8B,GAAU,QAAO,MAAM,EAAO,KAAG,OAAO,CAAC,IAAI,CAWvF,CAAC"}
|