public ExampleCapture(string secretsFile, string outputFolder, string outputFolderWorkarounds = null)
 {
     this.secrets                 = ExampleHelpers.ReadSecretsFile(secretsFile);
     this.outputFolder            = outputFolder;
     this.outputFolderWorkarounds = outputFolderWorkarounds;
     this.client      = ExampleHelpers.GetRealClient(secrets);
     this.rmClient    = ExampleHelpers.GetRealRmClient(secrets);
     this.authClient  = ExampleHelpers.GetAuthorizationClient(secrets);
     this.interceptor = new ExampleTracingInterceptor(client.SubscriptionId, client.ApiVersion);
     ServiceClientTracing.AddTracingInterceptor(interceptor);
 }
 public static Rm.IResourceManagementClient GetRealRmClient(ExampleSecrets secrets)
 {
     Rm.IResourceManagementClient client = null;
     if (secrets.Environment == "test")
     {
         string ArmTenant = secrets.TenantId;
         string ArmServicePrincipalIdentity = secrets.ClientId;
         string SubId = secrets.SubId;
         string Thumb = secrets.ClientSecret;
         // Use service principal with cert to authenticate against Azure
         X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
         store.Open(OpenFlags.ReadOnly);
         X509Certificate2           cert = store.Certificates.Find(X509FindType.FindByThumbprint, Thumb, false)[0];
         ClientAssertionCertificate cac  = new ClientAssertionCertificate(ArmServicePrincipalIdentity, cert);
         var context = new AuthenticationContext("https://login.windows-ppe.net/" + ArmTenant);
         AuthenticationResult     result = context.AcquireTokenAsync("https://management.core.windows.net/", cac).Result;
         ServiceClientCredentials creds  = new TokenCredentials(result.AccessToken);
         client = new Rm.ResourceManagementClient(creds)
         {
             SubscriptionId = secrets.SubId
         };
         client.BaseUri = new Uri("https://api-dogfood.resources.windows-int.net/");
     }
     else if (secrets.Environment == "dogfood")
     {
         string ArmTenant = secrets.TenantId;
         string ArmServicePrincipalIdentity = secrets.ClientId;
         string SubId = secrets.SubId;
         // Use service principal with cert to authenticate against Azure
         string secret  = secrets.ClientSecret;
         var    cac     = new ClientCredential(ArmServicePrincipalIdentity, secret);
         var    context = new AuthenticationContext("https://login.windows-ppe.net/" + ArmTenant);
         AuthenticationResult     result = context.AcquireTokenAsync("https://management.core.windows.net/", cac).Result;
         ServiceClientCredentials creds  = new TokenCredentials(result.AccessToken);
         client = new Rm.ResourceManagementClient(creds)
         {
             SubscriptionId = secrets.SubId
         };
         client.BaseUri = new Uri("https://api-dogfood.resources.windows-int.net/");
     }
     else if (secrets.Environment == "prod")
     {
         // Use Service Principal to authenticate against Azure
         var context = new AuthenticationContext("https://login.windows.net/" + secrets.TenantId);
         ClientCredential         cc     = new ClientCredential(secrets.ClientId, secrets.ClientSecret);
         AuthenticationResult     result = context.AcquireTokenAsync("https://management.azure.com/", cc).Result;
         ServiceClientCredentials creds  = new TokenCredentials(result.AccessToken);
         client = new Rm.ResourceManagementClient(creds)
         {
             SubscriptionId = secrets.SubId
         };
     }
     else if (secrets.Environment == "nightly")
     {
         return(null); // Nightly environment is direct access to our RP, so no ARM
     }
     else
     {
         throw new ArgumentException("Secrets environment must be test, prod, or nightly, currently {0}", secrets.Environment);
     }
     return(client);
 }