Exemplo n.º 1
0
 public static SpacesSingleton Get(this SpacesClient that)
 {
     if (spacesSingletons == null)
     {
         spacesSingletons = new SpacesSingleton(that);
     }
     return(spacesSingletons);
 }
        static async Task Setup()
        {
            appSettings = new ConfigurationBuilder()
                          .SetBasePath(System.IO.Directory.GetCurrentDirectory())
                          .AddJsonFile("appSettings.json")
                          .Build()
                          .Get <AppSettings>();

            var logger = new Microsoft.Extensions.Logging.LoggerFactory().CreateLogger("DigitalTwins");

            httpClient = new HttpClient(new LoggingHttpHandler(logger))
            {
                BaseAddress = new Uri($"{appSettings.BaseUrl}/api/v1.0/"),
            };
            var accessTokenFilename = ".accesstoken";
            var accessToken         = System.IO.File.Exists(accessTokenFilename) ? System.IO.File.ReadAllText(accessTokenFilename) : null;

            if (accessToken != null)
            {
                httpClient.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken);
            }

            // just a random query to check if authorized
            if (!(await httpClient.GetAsync("ontologies")).IsSuccessStatusCode)
            {
                var authContext = new Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext(appSettings.Authority);
                var codeResult  = await authContext.AcquireDeviceCodeAsync(appSettings.Resource, appSettings.ClientId);

                Console.WriteLine(codeResult.Message);
                accessToken = (await authContext.AcquireTokenByDeviceCodeAsync(codeResult)).AccessToken;
                System.IO.File.WriteAllText(accessTokenFilename, accessToken);
                if (httpClient.DefaultRequestHeaders.Contains("Authorization"))
                {
                    httpClient.DefaultRequestHeaders.Remove("Authorization");
                }
                httpClient.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken);
            }

            clients = new Clients(httpClient);

            spaces  = clients.SpacesClient.Get();
            devices = clients.DevicesClient.Get();

            var ids = await clients.SpacesClient.RetrieveAsync(name : "root");

            if (ids.Any())
            {
                rootId = ids.First().Id;
            }
            else
            {
                rootId = await clients.SpacesClient.CreateAsync(new SpaceCreate
                {
                    Name   = "root",
                    TypeId = 59 // Tenant
                });
            }

            spaceTypes       = clients.TypesClient.Get(ExtendedTypeCreateCategory.SpaceType, rootId);
            deviceTypes      = clients.TypesClient.Get(ExtendedTypeCreateCategory.DeviceType, rootId);
            sensorTypes      = clients.TypesClient.Get(ExtendedTypeCreateCategory.SensorType, rootId);
            sensorDataTypes  = clients.TypesClient.Get(ExtendedTypeCreateCategory.SensorDataType, rootId);
            spaceBlobType    = clients.TypesClient.Get(ExtendedTypeCreateCategory.SpaceBlobType, rootId);
            spaceBlobSubType = clients.TypesClient.Get(ExtendedTypeCreateCategory.SpaceBlobSubtype, rootId);
        }