public EntitiesController(
     IEntitiesRepository entitiesRepository,
     EntitiesDBContext dbContext,
     IQueryableRepository <Entities.FileInfo> filesRepository,
     IBlobRepository blobRepository)
 {
     this.entitiesRepository = entitiesRepository;
     this.dbContext          = dbContext;
     this.filesRepository    = filesRepository;
     this.blobRepository     = blobRepository;
 }
Example #2
0
        // 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();
        }
Example #3
0
        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();
        }