static AzureSession()
 {
     ClientFactory = new AzurePowerShellClientFactory();
     AuthenticationFactory = new AuthenticationFactory();
     CurrentContext = new AzureContext();
     CurrentContext.Environment = AzureEnvironment.PublicEnvironments[EnvironmentName.AzureCloud];
 }
 /// <summary>
 /// Creates new ActiveDirectoryClient using WindowsAzureSubscription.
 /// </summary>
 /// <param name="context"></param>
 public ActiveDirectoryClient(AzureContext context)
 {
     AccessTokenCredential creds = (AccessTokenCredential)AzureSession.AuthenticationFactory.GetSubscriptionCloudCredentials(context);
     GraphClient = AzureSession.ClientFactory.CreateCustomClient<GraphRbacManagementClient>(
         creds.TenantID,
         creds,
         context.Environment.GetEndpointAsUri(AzureEnvironment.Endpoint.Graph));
 }
 static AzureSession()
 {
     SubscriptionTokenCache = new Dictionary<Tuple<Guid, string>, IAccessToken>();
     ClientFactory = new AzurePowerShellClientFactory();
     AuthenticationFactory = new AuthenticationFactory();
     CurrentContext = new AzureContext();
     CurrentContext.Environment = AzureEnvironment.PublicEnvironments[EnvironmentName.AzureCloud];
 }
        public SubscriptionCloudCredentials GetSubscriptionCloudCredentials(AzureContext context)
        {
            if (context.Subscription == null)
            {
                throw new ApplicationException(Resources.InvalidCurrentSubscription);
            }

            var account = context.Account;

            if (!AzureSession.SubscriptionTokenCache.ContainsKey(Tuple.Create(context.Subscription.Id, context.Account.Id)))
            {
                // Try to re-authenticate
                var tenants = context.Subscription.GetPropertyAsArray(AzureSubscription.Property.Tenants)
                    .Intersect(context.Account.GetPropertyAsArray(AzureAccount.Property.Tenants));

                foreach (var tenant in tenants)
                {
                    try
                    {
                        AzureSession.SubscriptionTokenCache[Tuple.Create(context.Subscription.Id, context.Account.Id)] = Authenticate(ref account, context.Environment, tenant, null, ShowDialog.Never);
                        break;
                    }
                    catch
                    {
                        // Skip
                    }
                }
            }

            if (AzureSession.SubscriptionTokenCache.ContainsKey(Tuple.Create(context.Subscription.Id, context.Account.Id)))
            {
                return new AccessTokenCredential(context.Subscription.Id, AzureSession.SubscriptionTokenCache[Tuple.Create(context.Subscription.Id, context.Account.Id)]);
            }
            else if (account != null)
            {
                switch (account.Type)
                {
                    case AzureAccount.AccountType.User:
                    case AzureAccount.AccountType.ServicePrincipal:
                        if (!AzureSession.SubscriptionTokenCache.ContainsKey(Tuple.Create(context.Subscription.Id, account.Id)))
                        {
                            throw new ArgumentException(Resources.InvalidSubscriptionState);
                        }
                        return new AccessTokenCredential(context.Subscription.Id, AzureSession.SubscriptionTokenCache[Tuple.Create(context.Subscription.Id, account.Id)]);

                    case AzureAccount.AccountType.Certificate:
                        var certificate = ProfileClient.DataStore.GetCertificate(account.Id);
                        return new CertificateCloudCredentials(context.Subscription.Id.ToString(), certificate);

                    default:
                        throw new NotImplementedException("Error: couldn't do whatever it is we're trying to do here");
                }
            }
            else
            {
                throw new ArgumentException(Resources.InvalidSubscriptionState);
            }
        }
        /// <summary>
        /// Creates new ResourceManagementClient
        /// </summary>
        /// <param name="subscription">Subscription containing resources to manipulate</param>
        public ResourcesClient(AzureContext context)
            : this(
                AzureSession.ClientFactory.CreateClient<ResourceManagementClient>(context, AzureEnvironment.Endpoint.ResourceManager),
                new GalleryTemplatesClient(context),
                AzureSession.ClientFactory.CreateClient<EventsClient>(context, AzureEnvironment.Endpoint.ResourceManager),
                AzureSession.ClientFactory.CreateClient<AuthorizationManagementClient>(context, AzureEnvironment.Endpoint.ResourceManager))
        {

        }
        public static void SetCurrentContext(AzureSubscription subscription, AzureEnvironment environment, AzureAccount account)
        {
            if (environment == null)
            {
                if (subscription != null && CurrentContext != null &&
                    subscription.Environment == CurrentContext.Environment.Name)
                {
                    environment = CurrentContext.Environment;
                }
                else
                {
                    environment = AzureEnvironment.PublicEnvironments[EnvironmentName.AzureCloud];
                }

                if (subscription != null)
                {
                    subscription.Environment = environment.Name;
                }
            }

            if (account == null)
            {
                if (subscription != null && CurrentContext != null && subscription.Account != null)
                {
                    if (CurrentContext.Account != null && subscription.Account == CurrentContext.Account.Id)
                    {
                        account = CurrentContext.Account;
                    }
                    else
                    {
                        throw new ArgumentException(Resources.AccountIdDoesntMatchSubscription, "account");
                    }

                    subscription.Account = account.Id;

                }
            }

            if (subscription != null && subscription.Environment != environment.Name)
            {
                throw new ArgumentException(Resources.EnvironmentNameDoesntMatchSubscription, "environment");
            }

            CurrentContext = new AzureContext
            {
                Subscription = subscription,
                Account = account,
                Environment = environment
            };
        }
        public SubscriptionCloudCredentials GetSubscriptionCloudCredentials(AzureContext context)
        {
            if (context.Subscription == null)
            {
                throw new ApplicationException(Resources.InvalidCurrentSubscription);
            }
            
            if (context.Account == null)
            {
                throw new ArgumentException(Resources.InvalidSubscriptionState);
            }

            if (context.Account.Type == AzureAccount.AccountType.Certificate)
            {
                var certificate = ProfileClient.DataStore.GetCertificate(context.Account.Id);
                return new CertificateCloudCredentials(context.Subscription.Id.ToString(), certificate);
            }

            var tenant = context.Subscription.GetPropertyAsArray(AzureSubscription.Property.Tenants)
                  .Intersect(context.Account.GetPropertyAsArray(AzureAccount.Property.Tenants))
                  .FirstOrDefault();

            if (tenant == null)
            {
                throw new ArgumentException(Resources.InvalidSubscriptionState);
            }

            try
            {
                var token = Authenticate(context.Account, context.Environment, tenant, null, ShowDialog.Never);
                return new AccessTokenCredential(context.Subscription.Id, token);
            }
            catch (Exception ex)
            {
                throw new ArgumentException(Resources.InvalidSubscriptionState, ex);
            }
        }
 public SubscriptionCloudCredentials GetSubscriptionCloudCredentials(AzureContext context)
 {
     return new AccessTokenCredential(context.Subscription.Id, Token);
 }
 public RedisCacheClient(AzureContext context)
 {
     _client = AzureSession.ClientFactory.CreateClient<RedisManagementClient>(context, AzureEnvironment.Endpoint.ResourceManager);
 }
 /// <summary>
 /// Creates PoliciesClient using WindowsAzureSubscription instance.
 /// </summary>
 /// <param name="subscription">The WindowsAzureSubscription instance</param>
 public AuthorizationClient(AzureContext context)
 {
     ActiveDirectoryClient = new ActiveDirectoryClient(context);
     AuthorizationManagementClient = AzureSession.ClientFactory.CreateClient<AuthorizationManagementClient>(context, AzureEnvironment.Endpoint.ResourceManager);
 }
 public SubscriptionCloudCredentials GetSubscriptionCloudCredentials(AzureContext context)
 {
     return new CertificateCloudCredentials(context.Subscription.Id.ToString(), Certificate);
 }
        public GalleryTemplatesClient(AzureContext context)
            : this(AzureSession.ClientFactory.CreateClient<GalleryClient>(context, AzureEnvironment.Endpoint.Gallery))
        {

        }
 public DataFactoryClient(AzureContext context)
 {
     DataPipelineManagementClient = AzureSession.ClientFactory.CreateClient<DataPipelineManagementClient>(
         context, AzureEnvironment.Endpoint.ResourceManager);
 }
 public StreamAnalyticsClient(AzureContext context)
 {
     StreamAnalyticsManagementClient = AzureSession.ClientFactory.CreateClient<StreamAnalyticsManagementClient>(
         context, AzureEnvironment.Endpoint.ResourceManager);
 }
 /// <summary>
 /// Creates new ResourceManagementClient
 /// </summary>
 /// <param name="subscription">Context with subscription containing a batch account to manipulate</param>
 public BatchClient(AzureContext context)
     : this(AzureSession.ClientFactory.CreateClient<BatchManagementClient>(context, AzureEnvironment.Endpoint.ResourceManager),
     AzureSession.ClientFactory.CreateClient<ResourceManagementClient>(context, AzureEnvironment.Endpoint.ResourceManager))
 {
 }