private static async Task <DataStore> GetDataStoreWithToken(bool force = false)
        {
            // Read from file DataStore
            if (File.Exists("datastore.json") && !force)
            {
                string filecontents = File.ReadAllText("datastore.json");
                var    jsonObj      = JsonConvert.DeserializeObject <DataStore>(filecontents);


                RefreshAzureToken token = new RefreshAzureToken();
                ActionRequest     req   = new ActionRequest()
                {
                    DataStore = jsonObj
                };

                try
                {
                    var intercept = await token.CanInterceptAsync(null, req);

                    if (intercept == InterceptorStatus.Intercept)
                    {
                        await TestManager.ExecuteActionAsync("Microsoft-RefreshAzureToken", jsonObj);

                        System.IO.File.WriteAllText("datastore.json", JsonUtility.GetJObjectFromObject(jsonObj).ToString());
                    }

                    return(jsonObj);
                }
                catch (Exception)
                {
                    // Skip over error and try again
                }
            }


            // If not found or refresh failed prompt
            Credential.Load();
            var dataStore = await AAD.GetUserTokenFromPopup();

            var subscriptionResult = await TestManager.ExecuteActionAsync("Microsoft-GetAzureSubscriptions", dataStore);

            Assert.IsTrue(subscriptionResult.IsSuccess);
            var subscriptionId = subscriptionResult.Body.GetJObject()["value"].SingleOrDefault(p => p["DisplayName"].ToString().StartsWith("PBI_"));

            dataStore.AddToDataStore("SelectedSubscription", subscriptionId, DataStoreType.Public);

            var locationResult = await TestManager.ExecuteActionAsync("Microsoft-GetLocations", dataStore);

            var location = locationResult.Body.GetJObject()["value"][5];

            dataStore.AddToDataStore("SelectedLocation", location, DataStoreType.Public);
            dataStore.AddToDataStore("SelectedResourceGroup", ResourceGroup);

            var resourceGroupResult = await TestManager.ExecuteActionAsync("Microsoft-CreateResourceGroup", dataStore);

            Assert.IsTrue(resourceGroupResult.IsSuccess);

            System.IO.File.WriteAllText("datastore.json", JsonUtility.GetJObjectFromObject(dataStore).ToString());
            return(dataStore);
        }
Beispiel #2
0
        private static async Task <DataStore> GetDataStoreWithToken(bool force = false, Dictionary <string, string> extraTokens = null, string subscriptionId = null, string resourceGroup = null, string region = null)
        {
            // Read from file DataStore
            if (File.Exists("datastore.json") && !force)
            {
                string filecontents = File.ReadAllText("datastore.json");
                var    jsonObj      = JsonConvert.DeserializeObject <DataStore>(filecontents);

                RefreshAzureToken token = new RefreshAzureToken();
                ActionRequest     req   = new ActionRequest()
                {
                    DataStore = jsonObj
                };

                try
                {
                    var intercept = await token.CanInterceptAsync(null, req);

                    if (intercept == InterceptorStatus.Intercept)
                    {
                        await TestManager.ExecuteActionAsync("Microsoft-RefreshAzureToken", jsonObj);

                        System.IO.File.WriteAllText("datastore.json", JsonUtility.GetJObjectFromObject(jsonObj).ToString());
                    }

                    return(jsonObj);
                }
                catch (Exception)
                {
                    // Skip over error and try again
                }
            }

            // If not found or refresh failed prompt
            Credential.Load();
            var dataStore = await AAD.GetUserTokenFromPopup();

            if (extraTokens != null)
            {
                foreach (KeyValuePair <string, string> pair in extraTokens)
                {
                    var datastoreExtra = await AAD.GetUserTokenFromPopup(pair.Key);           // see AAD case 'powerbi'

                    dataStore.AddToDataStore(pair.Value, datastoreExtra.GetJson(pair.Value)); // {PBIToken:val}
                    dataStore.AddToDataStore("code" + pair.Key, datastoreExtra.GetValue("code"));
                    dataStore.AddToDataStore("state" + pair.Key, datastoreExtra.GetValue("state"));
                    dataStore.AddToDataStore("sessionstate" + pair.Key, datastoreExtra.GetValue("session_state"));
                }
            }

            var subscriptionResult = await TestManager.ExecuteActionAsync("Microsoft-GetAzureSubscriptions", dataStore);

            JToken subscription = null;

            Assert.IsTrue(subscriptionResult.IsSuccess);
            if (subscriptionId == null)
            {
                subscription = subscriptionResult.Body.GetJObject()["value"].SingleOrDefault(p => p["DisplayName"].ToString().StartsWith("PBI_"));
                if (subscription == null)
                {
                    subscription = subscriptionResult.Body.GetJObject()["value"].FirstOrDefault();
                }
            }
            else
            {
                subscription = subscriptionResult.Body.GetJObject()["value"].SingleOrDefault(p => p["SubscriptionId"].ToString().Equals(subscriptionId, StringComparison.OrdinalIgnoreCase));
            }

            dataStore.AddToDataStore("SelectedSubscription", subscription, DataStoreType.Public);

            var locationResult = await TestManager.ExecuteActionAsync("Microsoft-GetLocations", dataStore);

            var location = locationResult.Body.GetJObject()["value"][5];

            if (!string.IsNullOrWhiteSpace(region))
            {
                location = locationResult.Body.GetJObject()["value"].SingleOrDefault(l => l["Name"].ToString().Equals(region, StringComparison.OrdinalIgnoreCase));
            }

            dataStore.AddToDataStore("SelectedLocation", location, DataStoreType.Public);
            dataStore.AddToDataStore("SelectedResourceGroup", resourceGroup ?? ResourceGroup);

            var resourceGroupResult = await TestManager.ExecuteActionAsync("Microsoft-CreateResourceGroup", dataStore);

            System.IO.File.WriteAllText("datastore.json", JsonUtility.GetJObjectFromObject(dataStore).ToString());
            return(dataStore);
        }