From e7b230d17ab65013bab5edb0ad1212ab4f98b589 Mon Sep 17 00:00:00 2001 From: aksm-ms <58936966+aksm-ms@users.noreply.github.com> Date: Fri, 6 Nov 2020 15:37:06 +0530 Subject: [PATCH] adding params to escape symbols in az cli (#80) * adding params to escape symbols in az cli * addressed review comments --- lib/main.js | 36 +++++++++++++++++++++++++----------- src/main.ts | 33 +++++++++++++++++++++++++-------- 2 files changed, 50 insertions(+), 19 deletions(-) diff --git a/lib/main.js b/lib/main.js index 1527cd26..c3933519 100644 --- a/lib/main.js +++ b/lib/main.js @@ -37,16 +37,15 @@ function main() { core.exportVariable('AZUREPS_HOST_ENVIRONMENT', azurePSHostEnv); azPath = yield io.which("az", true); let output = ""; - const options = { + const execOptions = { listeners: { stdout: (data) => { output += data.toString(); } } }; - yield executeAzCliCommand("--version", true, options); + yield executeAzCliCommand("--version", true, execOptions); core.debug(`az cli version used:\n${output}`); - let creds = core.getInput('creds', { required: true }); let secrets = new actions_secret_parser_1.SecretParser(creds, actions_secret_parser_1.FormatType.JSON); let servicePrincipalId = secrets.getSecret("$.clientId", false); @@ -55,7 +54,6 @@ function main() { let subscriptionId = secrets.getSecret("$.subscriptionId", false); const enableAzPSSession = core.getInput('enable-AzPSSession').toLowerCase() === "true"; const allowNoSubscriptionsLogin = core.getInput('allow-no-subscriptions').toLowerCase() === "true"; - if (!servicePrincipalId || !servicePrincipalKey || !tenantId) { throw new Error("Not all values are present in the creds object. Ensure clientId, clientSecret and tenantId are supplied."); } @@ -64,11 +62,28 @@ function main() { } // Attempting Az cli login if (allowNoSubscriptionsLogin) { - yield executeAzCliCommand(`login --allow-no-subscriptions --service-principal -u "${servicePrincipalId}" -p "${servicePrincipalKey}" --tenant "${tenantId}"`, true); + let args = [ + "--allow-no-subscriptions", + "--service-principal", + "-u", servicePrincipalId, + "-p", servicePrincipalKey, + "--tenant", tenantId + ]; + yield executeAzCliCommand(`login`, true, {}, args); } else { - yield executeAzCliCommand(`login --service-principal -u "${servicePrincipalId}" -p "${servicePrincipalKey}" --tenant "${tenantId}"`, true); - yield executeAzCliCommand(`account set --subscription "${subscriptionId}"`, true); + let args = [ + "--service-principal", + "-u", servicePrincipalId, + "-p", servicePrincipalKey, + "--tenant", tenantId + ]; + yield executeAzCliCommand(`login`, true, {}, args); + args = [ + "--subscription", + subscriptionId + ]; + yield executeAzCliCommand(`account set`, true, {}, args); } isAzCLISuccess = true; if (enableAzPSSession) { @@ -96,12 +111,11 @@ function main() { } }); } - -function executeAzCliCommand(command, silent, options = {}) { +function executeAzCliCommand(command, silent, execOptions = {}, args = []) { return __awaiter(this, void 0, void 0, function* () { - options.silent = !!silent; + execOptions.silent = !!silent; try { - yield exec.exec(`"${azPath}" ${command}`, [], options); + yield exec.exec(`"${azPath}" ${command}`, args, execOptions); } catch (error) { throw new Error(error); diff --git a/src/main.ts b/src/main.ts index 3288986e..3fd4b03a 100644 --- a/src/main.ts +++ b/src/main.ts @@ -22,14 +22,14 @@ async function main() { azPath = await io.which("az", true); let output: string = ""; - const options: any = { + const execOptions: any = { listeners: { stdout: (data: Buffer) => { output += data.toString(); } } }; - await executeAzCliCommand("--version", true, options); + await executeAzCliCommand("--version", true, execOptions); core.debug(`az cli version used:\n${output}`); let creds = core.getInput('creds', { required: true }); @@ -50,11 +50,28 @@ async function main() { // Attempting Az cli login if (allowNoSubscriptionsLogin) { - await executeAzCliCommand(`login --allow-no-subscriptions --service-principal -u "${servicePrincipalId}" -p "${servicePrincipalKey}" --tenant "${tenantId}"`, true); + let args = [ + "--allow-no-subscriptions", + "--service-principal", + "-u", servicePrincipalId, + "-p", servicePrincipalKey, + "--tenant", tenantId + ]; + await executeAzCliCommand(`login`, true, {}, args); } else { - await executeAzCliCommand(`login --service-principal -u "${servicePrincipalId}" -p "${servicePrincipalKey}" --tenant "${tenantId}"`, true); - await executeAzCliCommand(`account set --subscription "${subscriptionId}"`, true); + let args = [ + "--service-principal", + "-u", servicePrincipalId, + "-p", servicePrincipalKey, + "--tenant", tenantId + ]; + await executeAzCliCommand(`login`, true, {}, args); + args = [ + "--subscription", + subscriptionId + ]; + await executeAzCliCommand(`account set`, true, {}, args); } isAzCLISuccess = true; if (enableAzPSSession) { @@ -79,10 +96,10 @@ async function main() { } } -async function executeAzCliCommand(command: string, silent?: boolean, options: any = {}) { - options.silent = !!silent; +async function executeAzCliCommand(command: string, silent?: boolean, execOptions: any = {}, args: any = []) { + execOptions.silent = !!silent; try { - await exec.exec(`"${azPath}" ${command}`, [], options); + await exec.exec(`"${azPath}" ${command}`, args, execOptions); } catch(error) { throw new Error(error);