Beispiel #1
0
        public override void Configure(IFunctionsHostBuilder builder)
        {
            string identificationConfidence = GlobalSettings.GetKeyValue("IdentificationConfidence");

            if (string.IsNullOrEmpty(identificationConfidence))
            {
                AppConstants.IdentificationConfidence = double.Parse(identificationConfidence);
            }
            var checkForDbConsistency = bool.Parse(GlobalSettings.GetKeyValue("checkForDbConsistency"));
            //First register the db client (which is needed for the strongly typed repos)
            var cosmosDbEndpoint = GlobalSettings.GetKeyValue("cosmosDbEndpoint");
            var cosmosDbKey      = GlobalSettings.GetKeyValue("cosmosDbKey");
            var dbClient         = new DocumentClient(
                new Uri(cosmosDbEndpoint),
                cosmosDbKey,
                new ConnectionPolicy {
                EnableEndpointDiscovery = false
            });

            builder.Services.AddSingleton <ICosmosDbClientFactory>((s) =>
            {
                var factory = new CosmosDbClientFactory(
                    AppConstants.DbName,
                    new Dictionary <string, string> {
                    { AppConstants.DbColCrowdDemographics, AppConstants.DbColCrowdDemographicsPartitionKey },
                    { AppConstants.DbColVisitors, AppConstants.DbColVisitorsPartitionKey },
                    { AppConstants.DbColIdentifiedVisitor, AppConstants.DbColIdentifiedVisitorPartitionKey }
                },
                    dbClient);
                if (checkForDbConsistency)
                {
                    factory.EnsureDbSetupAsync().Wait();
                }
                return(factory);
            });

            //Register our cosmos db repository :)
            builder.Services.AddSingleton <ICrowdDemographicsRepository, CrowdDemographicsRepository>();
            builder.Services.AddSingleton <IVisitorsRepository, VisitorsRepository>();
            builder.Services.AddSingleton <IIdentifiedVisitorRepository, IdentifiedVisitorRepo>();

            //builder.Services.AddTransient<IVisitorIdentificationManager>((s) =>
            //{
            //    return new VisitorIdentificationManager(settings.CognitiveKey,
            //        settings.CognitiveEndpoint,
            //        settings.FaceWorkspaceDataFilter,
            //        settings.CosmosDbEndpoint,
            //        settings.CosmosDbKey,
            //        settings.CosmosDBName,
            //        settings.StorageConnection,
            //        settings.PersonsStorageContainer);
            //});

            //If you need further control over Service Bus, you can also inject the repo for it.
            //var serviceBusConnection = GlobalSettings.GetKeyValue("serviceBusConnection");
            //builder.Services.AddSingleton<IAzureServiceBusRepository>((s) =>
            //{
            //    return new AzureServiceBusRepository(serviceBusConnection, AppConstants.SBTopic, AppConstants.SBSubscription);
            //});
        }
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            List <string> collectionNames = new List <string>();

            collectionNames.Add("Users");
            collectionNames.Add("Sessions");
            DocumentClient _document = new DocumentClient(new Uri(Configuration["CosmosDB:URL"]),
                                                          Configuration["CosmosDB:PrimaryKey"]);

            services.Configure <CookiePolicyOptions>(options =>
            {
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded    = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });

            CosmosDbClientFactory myFactory = new CosmosDbClientFactory(Configuration["CosmosDB:DatabaseId"],
                                                                        collectionNames, _document);

            myFactory.EnsureDbSetupAsync().Wait();

            services.TryAddSingleton <IUserRepository, CosmosDBUserRepository>();
            services.TryAddTransient <ICosmosDbClientFactory>(S => new CosmosDbClientFactory(Configuration["CosmosDB:DatabaseId"], collectionNames, _document));
            services.TryAddSingleton <ISessionRepository, CosmosDBSessionRepository>();

            services.AddCustomMembership <CosmosDBMembership>((options) => {
                options.AuthenticationType     = CookieAuthenticationDefaults.AuthenticationScheme;
                options.DefaultPathAfterLogin  = "******";
                options.DefaultPathAfterLogout = "/Account/Login";
            });

            services.TryAddSingleton <IHttpContextAccessor, HttpContextAccessor>();

            services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
            .AddCookie((options) =>
            {
                options.LoginPath = new PathString("/account/login");
                options.Events    = new CookieAuthenticationEvents()
                {
                    OnValidatePrincipal = async(c) =>
                    {
                        var membership = c.HttpContext.RequestServices.GetRequiredService <ICustomMembership>();
                        var isValid    = await membership.ValidateLoginAsync(c.Principal);
                        if (!isValid)
                        {
                            c.RejectPrincipal();
                        }
                    }
                };
            });

            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

            services.AddMvc();
            services.AddOptions();
        }
        public static IServiceCollection AddCosmosDb(this IServiceCollection services, Uri serviceEndpoint,
                                                     string authKey, string databaseName, List <string> collectionNames)
        {
            var documentClient = new DocumentClient(serviceEndpoint, authKey, new JsonSerializerSettings
            {
                NullValueHandling    = NullValueHandling.Ignore,
                DefaultValueHandling = DefaultValueHandling.Ignore,
                ContractResolver     = new CamelCasePropertyNamesContractResolver()
            });

            documentClient.OpenAsync().Wait();

            var cosmosDbClientFactory = new CosmosDbClientFactory(databaseName, collectionNames, documentClient);

            cosmosDbClientFactory.EnsureDbSetupAsync().Wait();

            services.AddSingleton <ICosmosDbClientFactory>(cosmosDbClientFactory);

            return(services);
        }
Beispiel #4
0
    public static IServiceCollection AddCosmosDb(this IServiceCollection services, CosmosDbOptions cosmosDbOptions)
    {
        var documentClient = new DocumentClient(cosmosDbOptions.Endpoint, cosmosDbOptions.Key, new JsonSerializerSettings
        {
            NullValueHandling    = NullValueHandling.Ignore,
            DefaultValueHandling = DefaultValueHandling.Ignore,
            ContractResolver     = new CamelCasePropertyNamesContractResolver()
        });

        documentClient.OpenAsync().Wait();

        var collectionNames = cosmosDbOptions.Collections.Select(n => n.Name).ToList();

        var cosmosDbClientFactory = new CosmosDbClientFactory(cosmosDbOptions.DatabaseName, collectionNames, documentClient);

        cosmosDbClientFactory.EnsureDbSetupAsync().Wait();

        services.AddSingleton <ICosmosDbClientFactory>(cosmosDbClientFactory);

        return(services);
    }
Beispiel #5
0
        public override void Configure(IFunctionsHostBuilder builder)
        {
            var checkForDbConsistency = bool.Parse(GlobalSettings.GetKeyValue("checkForDbConsistency"));
            //First register the db client (which is needed for the strongly typed repos)
            var cosmosDbEndpoint = GlobalSettings.GetKeyValue("cosmosDbEndpoint");
            var cosmosDbKey      = GlobalSettings.GetKeyValue("cosmosDbKey");
            var dbClient         = new DocumentClient(
                new Uri(cosmosDbEndpoint),
                cosmosDbKey,
                new ConnectionPolicy {
                EnableEndpointDiscovery = false
            });

            builder.Services.AddSingleton <ICosmosDbClientFactory>((s) =>
            {
                var factory = new CosmosDbClientFactory(
                    AppConstants.DbName,
                    new Dictionary <string, string> {
                    { AppConstants.DbColCrowdDemographics, AppConstants.DbColCrowdDemographicsPartitionKey },
                    { AppConstants.DbColVisitors, AppConstants.DbColVisitorsPartitionKey },
                },
                    dbClient);
                if (checkForDbConsistency)
                {
                    factory.EnsureDbSetupAsync().Wait();
                }
                return(factory);
            });

            //Register our cosmos db repository :)
            builder.Services.AddSingleton <ICrowdDemographicsRepository, CrowdDemographicsRepository>();
            builder.Services.AddSingleton <IVisitorsRepository, VisitorsRepository>();

            //If you need further control over Service Bus, you can also inject the repo for it.
            //var serviceBusConnection = GlobalSettings.GetKeyValue("serviceBusConnection");
            //builder.Services.AddSingleton<IAzureServiceBusRepository>((s) =>
            //{
            //    return new AzureServiceBusRepository(serviceBusConnection, AppConstants.SBTopic, AppConstants.SBSubscription);
            //});
        }