33 lines
1.3 KiB
JavaScript
33 lines
1.3 KiB
JavaScript
import { CredentialsProviderError } from "@smithy/property-provider";
|
|
import { exec } from "child_process";
|
|
import { promisify } from "util";
|
|
import { getValidatedProcessCredentials } from "./getValidatedProcessCredentials";
|
|
export const resolveProcessCredentials = async (profileName, profiles) => {
|
|
const profile = profiles[profileName];
|
|
if (profiles[profileName]) {
|
|
const credentialProcess = profile["credential_process"];
|
|
if (credentialProcess !== undefined) {
|
|
const execPromise = promisify(exec);
|
|
try {
|
|
const { stdout } = await execPromise(credentialProcess);
|
|
let data;
|
|
try {
|
|
data = JSON.parse(stdout.trim());
|
|
}
|
|
catch {
|
|
throw Error(`Profile ${profileName} credential_process returned invalid JSON.`);
|
|
}
|
|
return getValidatedProcessCredentials(profileName, data);
|
|
}
|
|
catch (error) {
|
|
throw new CredentialsProviderError(error.message);
|
|
}
|
|
}
|
|
else {
|
|
throw new CredentialsProviderError(`Profile ${profileName} did not contain credential_process.`);
|
|
}
|
|
}
|
|
else {
|
|
throw new CredentialsProviderError(`Profile ${profileName} could not be found in shared credentials file.`);
|
|
}
|
|
};
|