public EntitiesController( IEntitiesRepository entitiesRepository, EntitiesDBContext dbContext, IQueryableRepository <Entities.FileInfo> filesRepository, IBlobRepository blobRepository) { this.entitiesRepository = entitiesRepository; this.dbContext = dbContext; this.filesRepository = filesRepository; this.blobRepository = blobRepository; }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddSingleton <IClaimsTransformation, ClaimsTransformer>(); services.AddScoped( typeof(IEntitiesRepository), sp => new EntitiesRepository()); services.AddScoped( typeof(EntitiesDBContext), sp => { var context = new EntitiesDBContext( #if RELEASE Environment.GetEnvironmentVariable("Azure.Sql.Connection"), #else @"Server=localhost;Database=NanoDataHub;Trusted_Connection=True;ConnectRetryCount=0", #endif sp.GetService <IEntitiesRepository>(), logger); return(context); }); services.AddScoped( typeof(IQueryableRepository <Entities.FileInfo>), sp => new EntityFrameworkRepository <Entities.FileInfo>(sp.GetService <EntitiesDBContext>())); services.AddScoped( typeof(IQueryableRepository <EventInfo>), sp => new EntityFrameworkRepository <EventInfo>(sp.GetService <EntitiesDBContext>())); #if RELEASE services.AddScoped( typeof(IBlobRepository), sp => new RepositoryFramework.Azure.Blob.AzureBlobRepository( Microsoft.WindowsAzure.Storage.CloudStorageAccount .Parse(Environment.GetEnvironmentVariable("Azure.Storage.Connection")) .CreateCloudBlobClient() .GetContainerReference(configuration["Azure.Blob:Container"]))); #else services.AddScoped( typeof(IBlobRepository), sp => new BlobRepository()); #endif #if RELEASE services.AddSingleton( typeof(ITimeseriesRepository), sp => new InfluxDBRepository( configuration["InfluxDB:Uri"], configuration["InfluxDB:Database"], configuration["InfluxDB:Measurement"], Environment.GetEnvironmentVariable("InfluxDB.Username"), Environment.GetEnvironmentVariable("InfluxDB.Password"), (message, exception) => logger.LogError(message, exception))); #else services.AddSingleton( typeof(ITimeseriesRepository), sp => new InfluxDBRepository("http://localhost:8086", configuration["InfluxDB:Database"], configuration["InfluxDB:Measurement"], null, null, (message, exception) => logger.LogError(message, exception))); #endif services.AddScoped( typeof(IEntityFrameworkRepository <TimeseriesMetadata>), sp => new EntityFrameworkRepository <TimeseriesMetadata>(sp.GetService <EntitiesDBContext>())); #if !NO_SECURITY services.AddAuthentication(sharedOptions => { sharedOptions.DefaultScheme = JwtBearerDefaults.AuthenticationScheme; }) .AddAzureAdBearer(options => configuration.Bind("AzureAd", options)); // Prerequisites: // Azure application registration manifest must contain "groupMembershipClaims": "SecurityGroup" // Reader and writer groups must be present in Azure AD and correct group Objects IDs must be in configuration services.AddAuthorization(options => { options.AddPolicy("Readers", policy => policy.RequireClaim("groups", configuration.GetValue <string>("AzureSecurityGroup:DataHubReadersObjectID"))); options.AddPolicy("Writers", policy => policy.RequireClaim("groups", configuration.GetValue <string>("AzureSecurityGroup:DataHubWritersObjectID"))); }); #endif services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); services.AddMvc().AddJsonOptions(options => { options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore; }); services.AddApplicationInsightsTelemetry(); services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new Info { Title = "Data Hub", Version = "v1" }); var filePath = Path.Combine(System.AppContext.BaseDirectory, "DataHub.xml"); c.IncludeXmlComments(filePath); c.OperationFilter <FileOperationFilter>(); c.CustomSchemaIds(type => type.FriendlyId().Replace("[", "Of").Replace("]", "")); #if !NO_SECURITY c.AddSecurityDefinition("oauth2", new OAuth2Scheme { Type = "oauth2", Flow = "implicit", AuthorizationUrl = configuration["AzureAd:Instance"] + configuration["AzureAd:TenantId"] + "/oauth2/authorize" }); c.AddSecurityRequirement(new Dictionary <string, IEnumerable <string> > { { "oauth2", new[] { "dummy" } } }); #endif }); services.AddCors(o => o.AddPolicy("CorsPolicy", builder => { builder.AllowAnyMethod() .AllowAnyHeader() .AllowCredentials() .WithOrigins("http://localhost:4200", "https://datahub-client.azurewebsites.net"); })); services.AddSignalR(); }
private void Seed(EntitiesDBContext dbContext) { if (dbContext.Set <Asset>().Count() == 0) { var timeseriesMetadata1 = new TimeseriesMetadata { Source = "Seed", Id = "1", Name = "ABC123", Description = "Some tag", Units = "Pa" }; var timeseriesMetadata2 = new TimeseriesMetadata { Source = "Seed", Id = "2", Name = "ABC234", Description = "Some other tag", Units = "Pa" }; dbContext.Set <TimeseriesMetadata>().Add(timeseriesMetadata1); dbContext.Set <TimeseriesMetadata>().Add(timeseriesMetadata2); dbContext.Set <TimeseriesMetadata>().Add(new TimeseriesMetadata { Source = "Seed", Id = "3", Name = "Orphan" }); dbContext.Set <TimeseriesMetadata>().Add(new TimeseriesMetadata { Source = "Seed", Id = "4", Name = "Parent", Children = new List <TimeseriesMetadata> { new TimeseriesMetadata { Source = "Seed", Id = "5", Name = "Child" } } }); dbContext.Set <Entities.EventInfo>() .Add(new Entities.EventInfo { Id = "1", Source = "Seed", Time = DateTime.Now, Name = "Type" }); dbContext.Set <Entities.EventInfo>() .Add(new Entities.EventInfo { Id = "2", Source = "Seed", Time = DateTime.Now, Name = "Type" }); var file1 = new Entities.FileInfo { Source = "Seed", Id = "1", Format = "CSV", Filename = "ABC123.CSV" }; dbContext.Set <Entities.FileInfo>().Add(file1); var file2 = new Entities.FileInfo { Source = "Seed", Id = "2", Format = "CSV", Filename = "ABC124.CSV" }; dbContext.Set <Entities.FileInfo>().Add(file2); dbContext.Set <Asset>().Add( new Asset { Source = "Seed", Id = "1", Tag = "Site 1", Description = "Site 1", Files = new List <Entities.FileInfo> { file1 }, Tags = new List <AssetTag> { new AssetTag { Source = "Seed", Id = "1", Name = "key1", Value = "value1" }, new AssetTag { Source = "Seed", Id = "2", Name = "key2", Value = "value3" } }, TimeSeries = new List <TimeseriesMetadata> { timeseriesMetadata1 }, Children = new List <Asset> { new Asset { Source = "Seed", Id = "2", Description = "Drilling equipment and systems", Tag = "3", Children = new List <Asset> { new Asset { Source = "Seed", Id = "3", Description = "Mud supply", Tag = "325", Children = new List <Asset> { new Asset { Source = "Seed", Id = "4", Tag = "325-G1", Description = "Mud pump no.1", Manufacturer = "Some producer", SerialNumber = "1234568790", TimeSeries = new List <TimeseriesMetadata> { timeseriesMetadata1 } }, new Asset { Source = "Seed", Id = "5", Description = "Mud pump no.2", Tag = "325-G2", Manufacturer = "Some other producer", SerialNumber = "0987654321", TimeSeries = new List <TimeseriesMetadata> { timeseriesMetadata2 }, } } } } } } }); } dbContext.SaveChanges(); }