mirror of
https://github.com/azure/login.git
synced 2026-03-15 09:20:56 -04:00
71 lines
2.8 KiB
TypeScript
71 lines
2.8 KiB
TypeScript
import * as core from '@actions/core';
|
|
|
|
import Utils from './Utilities/Utils';
|
|
import PowerShellToolRunner from './Utilities/PowerShellToolRunner';
|
|
import ScriptBuilder from './Utilities/ScriptBuilder';
|
|
import Constants from './Constants';
|
|
|
|
export class ServicePrincipalLogin implements IAzurePowerShellSession {
|
|
static readonly scopeLevel: string = Constants.Subscription;
|
|
static readonly scheme: string = Constants.ServicePrincipal;
|
|
environment: string;
|
|
servicePrincipalId: string;
|
|
servicePrincipalKey: string;
|
|
tenantId: string;
|
|
subscriptionId: string;
|
|
resourceManagerEndpointUrl: string;
|
|
allowNoSubscriptionsLogin: boolean;
|
|
|
|
constructor(servicePrincipalId: string,
|
|
servicePrincipalKey: string,
|
|
tenantId: string,
|
|
subscriptionId: string,
|
|
allowNoSubscriptionsLogin: boolean,
|
|
environment: string,
|
|
resourceManagerEndpointUrl: string) {
|
|
|
|
this.servicePrincipalId = servicePrincipalId;
|
|
this.servicePrincipalKey = servicePrincipalKey;
|
|
this.tenantId = tenantId;
|
|
this.subscriptionId = subscriptionId;
|
|
this.environment = environment;
|
|
this.resourceManagerEndpointUrl = resourceManagerEndpointUrl;
|
|
this.allowNoSubscriptionsLogin = allowNoSubscriptionsLogin;
|
|
}
|
|
|
|
async initialize() {
|
|
Utils.setPSModulePath();
|
|
const azLatestVersion: string = await Utils.getLatestModule(Constants.moduleName);
|
|
core.debug(`Az Module version used: ${azLatestVersion}`);
|
|
Utils.setPSModulePath(`${Constants.prefix}${azLatestVersion}`);
|
|
}
|
|
|
|
async login() {
|
|
let output: string = "";
|
|
const options: any = {
|
|
listeners: {
|
|
stdout: (data: Buffer) => {
|
|
output += data.toString();
|
|
}
|
|
}
|
|
};
|
|
const args: any = {
|
|
servicePrincipalId: this.servicePrincipalId,
|
|
servicePrincipalKey: this.servicePrincipalKey,
|
|
subscriptionId: this.subscriptionId,
|
|
environment: this.environment,
|
|
scopeLevel: ServicePrincipalLogin.scopeLevel,
|
|
allowNoSubscriptionsLogin: this.allowNoSubscriptionsLogin,
|
|
resourceManagerEndpointUrl: this.resourceManagerEndpointUrl
|
|
}
|
|
const script: string = new ScriptBuilder().getAzPSLoginScript(ServicePrincipalLogin.scheme, this.tenantId, args);
|
|
await PowerShellToolRunner.init();
|
|
await PowerShellToolRunner.executePowerShellScriptBlock(script, options);
|
|
const result: any = JSON.parse(output.trim());
|
|
if (!(Constants.Success in result)) {
|
|
throw new Error(`Azure PowerShell login failed with error: ${result[Constants.Error]}`);
|
|
}
|
|
console.log(`Azure PowerShell session successfully initialized`);
|
|
}
|
|
|
|
} |