/// <summary>
 /// Updates the vault certificate
 /// </summary>
 /// <param name="args">the certificate update arguments</param>
 /// <returns>Upload Certificate Response</returns>
 public async Task<UploadCertificateResponse> UpdateVaultCertificate(CertificateArgs args, string certFriendlyName)
 {
     return await this.recoveryServicesClient.VaultExtendedInfo.UploadCertificateAsync(
         arsVaultCreds.ResourceGroupName, 
         arsVaultCreds.ResourceName,
         args, certFriendlyName, 
         this.GetRequestHeaders());
 }
        /// <summary>
        /// Method to update vault certificate
        /// </summary>
        /// <param name="cert">certificate object </param>
        /// <returns>Upload Certificate Response</returns>
        private async Task<UploadCertificateResponse> UpdateVaultCertificate(X509Certificate2 cert)
        {
            var certificateArgs = new CertificateArgs();
            certificateArgs.Properties = new Dictionary<string, string>();
            certificateArgs.Properties.Add("certificate", Convert.ToBase64String(cert.GetRawCertData()));
            // CertificateArgs.Properties.Add("ContractVersion", "V2012_12");

            UploadCertificateResponse response = await this.UpdateVaultCertificate(certificateArgs, cert.FriendlyName);

            return response;
        }
 /// <summary>
 /// Get the vault extended info.
 /// </summary>
 /// <param name='operations'>
 /// Reference to the
 /// Microsoft.Azure.Management.RecoveryServices.IVaultExtendedInfoOperations.
 /// </param>
 /// <param name='resourceGroupName'>
 /// Required. The name of the resource group containing the job
 /// collection.
 /// </param>
 /// <param name='resourceName'>
 /// Required. The name of the resource.
 /// </param>
 /// <param name='parameters'>
 /// Required. Upload Vault Certificate input parameters.
 /// </param>
 /// <param name='certFriendlyName'>
 /// Required. Certificate friendly name
 /// </param>
 /// <param name='customRequestHeaders'>
 /// Optional. Request header parameters.
 /// </param>
 /// <returns>
 /// The response model for the upload certificate response
 /// </returns>
 public static Task<UploadCertificateResponse> UploadCertificateAsync(this IVaultExtendedInfoOperations operations, string resourceGroupName, string resourceName, CertificateArgs parameters, string certFriendlyName, CustomRequestHeaders customRequestHeaders)
 {
     return operations.UploadCertificateAsync(resourceGroupName, resourceName, parameters, certFriendlyName, customRequestHeaders, CancellationToken.None);
 }
        /// <summary>
        /// Upload cert to idmgmt
        /// </summary>
        /// <param name="managementCert">certificate to be uploaded</param>
        /// <param name="vault">vault object</param>
        /// <returns>Upload Certificate Response</returns>
        public UploadCertificateResponse UploadCertificate(X509Certificate2 managementCert, ARSVault vault)
        {
            var certificateArgs = new CertificateArgs();
            certificateArgs.Properties = new Dictionary<string, string>();
            certificateArgs.Properties.Add("certificate", Convert.ToBase64String(managementCert.GetRawCertData()));

            var response = this.recoveryServicesClient.VaultExtendedInfo.UploadCertificateAsync(
                vault.ResourceGroupName,
                vault.Name,
                certificateArgs, managementCert.FriendlyName,
                this.GetRequestHeaders());
            response.Wait();
            return response.Result;
        }
 /// <summary>
 /// Get the vault extended info.
 /// </summary>
 /// <param name='operations'>
 /// Reference to the
 /// Microsoft.Azure.Management.RecoveryServices.IVaultExtendedInfoOperations.
 /// </param>
 /// <param name='resourceGroupName'>
 /// Required. The name of the resource group containing the job
 /// collection.
 /// </param>
 /// <param name='resourceName'>
 /// Required. The name of the resource.
 /// </param>
 /// <param name='parameters'>
 /// Required. Upload Vault Certificate input parameters.
 /// </param>
 /// <param name='certFriendlyName'>
 /// Required. Certificate friendly name
 /// </param>
 /// <param name='customRequestHeaders'>
 /// Optional. Request header parameters.
 /// </param>
 /// <returns>
 /// The response model for the upload certificate response
 /// </returns>
 public static UploadCertificateResponse UploadCertificate(this IVaultExtendedInfoOperations operations, string resourceGroupName, string resourceName, CertificateArgs parameters, string certFriendlyName, CustomRequestHeaders customRequestHeaders)
 {
     return Task.Factory.StartNew((object s) => 
     {
         return ((IVaultExtendedInfoOperations)s).UploadCertificateAsync(resourceGroupName, resourceName, parameters, certFriendlyName, customRequestHeaders);
     }
     , operations, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default).Unwrap().GetAwaiter().GetResult();
 }