Exemplo n.º 1
0
        public void Should_be_possible_to_create_new_WsHttpBinding_for_non_ssl_connection()
        {
            var certificateManagerMock = CreateCertificateManagerMock();
            var svcConfigHelper        = new ServiceConfigurationHelper(FAKE_SERVICE_URL_WITHOUT_SSL, certificateManagerMock);

            var wsHttpBinding = svcConfigHelper.CreateWsHttpBinding();

            Assert.AreEqual(SecurityMode.None, wsHttpBinding.Security.Mode, "The security mode must be 'none' for no ssl connections.");
            certificateManagerMock.AssertWasNotCalled <ServerCertificateManager>(svc => svc.CreateCertificateValidationCallback());
        }
Exemplo n.º 2
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            ServiceConfigurationHelper.ConfigSharedServices(Configuration, services);
            ServiceConfigurationHelper.ConfigureCatalogServices(Configuration, services);
            ConfigureCookieSettings(services);

            CreateIdentityIfNotCreated(services);

            services.AddScoped <ICatalogViewModelService, CachedCatalogViewModelService>();
            services.AddScoped <IBasketViewModelService, BasketViewModelService>();
            services.AddScoped <IOrderService, OrderService>();
            services.AddScoped <IOrderRepository, OrderRepository>();
            services.AddScoped <CatalogViewModelService>();

            services.AddMvc(options =>
            {
                options.Conventions.Add(new RouteTokenTransformerConvention(
                                            new SlugifyParameterTransformer()));
            }
                            )
            .AddRazorPagesOptions(options =>
            {
                options.Conventions.AuthorizePage("/Basket/Checkout");
                options.AllowAreas = true;
            })
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

            services.AddHttpContextAccessor();
            services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new Info {
                    Title = "My API", Version = "v1"
                }); });

            services.AddHealthChecks()
            .AddCheck <HomePageHealthCheck>("home_page_health_check")
            .AddCheck <ApiHealthCheck>("api_health_check");

            services.Configure <ServiceConfig>(config =>
            {
                config.Services = new List <ServiceDescriptor>(services);

                config.Path = "/allservices";
            });

            _services = services; // used to debug registered services
        }
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            ServiceConfigurationHelper.ConfigSharedServices(Configuration, services);
            ServiceConfigurationHelper.ConfigureCatalogServices(Configuration, services);

            // Get Identity Default Options
            IConfigurationSection identityDefaultOptionsConfigurationSection = Configuration.GetSection("IdentityDefaultOptions");

            services.Configure <IdentityDefaultOptions>(identityDefaultOptionsConfigurationSection);

            var identityDefaultOptions = identityDefaultOptionsConfigurationSection.Get <IdentityDefaultOptions>();

            services.AddIdentity <ApplicationUser, IdentityRole>(options =>
            {
                // Password settings
                options.Password.RequireDigit           = identityDefaultOptions.PasswordRequireDigit;
                options.Password.RequiredLength         = identityDefaultOptions.PasswordRequiredLength;
                options.Password.RequireNonAlphanumeric = identityDefaultOptions.PasswordRequireNonAlphanumeric;
                options.Password.RequireUppercase       = identityDefaultOptions.PasswordRequireUppercase;
                options.Password.RequireLowercase       = identityDefaultOptions.PasswordRequireLowercase;
                options.Password.RequiredUniqueChars    = identityDefaultOptions.PasswordRequiredUniqueChars;

                // Lockout settings
                options.Lockout.DefaultLockoutTimeSpan  = TimeSpan.FromMinutes(identityDefaultOptions.LockoutDefaultLockoutTimeSpanInMinutes);
                options.Lockout.MaxFailedAccessAttempts = identityDefaultOptions.LockoutMaxFailedAccessAttempts;
                options.Lockout.AllowedForNewUsers      = identityDefaultOptions.LockoutAllowedForNewUsers;

                // User settings
                options.User.RequireUniqueEmail = identityDefaultOptions.UserRequireUniqueEmail;

                // email confirmation require
                options.SignIn.RequireConfirmedEmail = identityDefaultOptions.SignInRequireConfirmedEmail;
            })
            .AddEntityFrameworkStores <ApplicationDbContext>()
            .AddDefaultTokenProviders();

            // cookie settings
            services.ConfigureApplicationCookie(options =>
            {
                // Cookie settings
                options.Cookie.HttpOnly   = identityDefaultOptions.CookieHttpOnly;
                options.Cookie.Expiration = TimeSpan.FromDays(identityDefaultOptions.CookieExpiration);
                options.LoginPath         = identityDefaultOptions.LoginPath;        // If the LoginPath is not set here, ASP.NET Core will default to /Account/Login
                options.LogoutPath        = identityDefaultOptions.LogoutPath;       // If the LogoutPath is not set here, ASP.NET Core will default to /Account/Logout
                options.AccessDeniedPath  = identityDefaultOptions.AccessDeniedPath; // If the AccessDeniedPath is not set here, ASP.NET Core will default to /Account/AccessDenied
                options.SlidingExpiration = identityDefaultOptions.SlidingExpiration;
            });


            // Get Super Admin Default options
            services.Configure <SuperAdminDefaultOptions>(Configuration.GetSection("SuperAdminDefaultOptions"));

            services.AddTransient <INumberSequence, Services.NumberSequence>();

            services.AddMvc()
            .AddJsonOptions(options =>
            {
                options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
                //pascal case json
                options.SerializerSettings.ContractResolver = new DefaultContractResolver();
            });


            services.AddMvc(options =>
            {
                options.Conventions.Add(new RouteTokenTransformerConvention(
                                            new SlugifyParameterTransformer()));
            }
                            )
            .AddRazorPagesOptions(options =>
            {
                options.Conventions.AuthorizePage("/Basket/Checkout");
                options.AllowAreas = true;
            })
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

            services.AddHttpContextAccessor();
            services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new Info {
                    Title = "My API", Version = "v1"
                }); });

            //services.AddHealthChecks()
            //  .AddCheck<HomePageHealthCheck>("home_page_health_check")
            //  .AddCheck<ApiHealthCheck>("api_health_check");

            //services.Configure<ServiceConfig>(config =>
            //{
            //  config.Services = new List<ServiceDescriptor>(services);

            //  config.Path = "/allservices";
            //});
        }
Exemplo n.º 4
0
        public static void AddCustomServices(this IServiceCollection services, IConfiguration Config)
        {
            var helper = new ServiceConfigurationHelper(services, Config);

            List <Assembly> allAssemblies     = new List <Assembly>();
            string          path              = Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory);
            var             compAssemblyPaths = Directory.GetFiles(path, "*SYE*.dll").ToList();

            foreach (string dllPath in compAssemblyPaths)
            {
                if (dllPath.Split('\\').LastOrDefault() != "SYE.Views.dll")
                {
                    var assemblyName = AssemblyLoadContext.GetAssemblyName(dllPath);

                    var assembly = Assembly.Load(assemblyName);

                    services.RegisterAssemblyPublicNonGenericClasses(assembly)
                    .AsPublicImplementedInterfaces();
                }
            }

            services.Configure <ApplicationSettings>(Config.GetSection("ApplicationSettings"));
            services.Configure <CQCRedirection>(Config.GetSection("ConnectionStrings").GetSection("CQCRedirection"));


            services.TryAddSingleton <IGdsValidation, GdsValidation>();


            string notificationApiKey = Config.GetSection("ConnectionStrings:GovUkNotify").GetValue <String>("ApiKey");

            if (string.IsNullOrWhiteSpace(notificationApiKey))
            {
                throw new ConfigurationErrorsException($"Failed to load {nameof(notificationApiKey)} from application configuration.");
            }
            services.TryAddSingleton <IAsyncNotificationClient>(_ => new NotificationClient(notificationApiKey));

            //Service Bus configuration
            var serviceBusConfiguration = Config.GetSection("ConnectionStrings:ServiceBus").Get <ServiceBusConfiguration>();

            helper.ConfirmPresent(serviceBusConfiguration);
            services.TryAddSingleton <IServiceBusConfiguration>(serviceBusConfiguration);
            services.TryAddSingleton <IServiceBusService>(provider => new ServiceBusService(provider.GetRequiredService <IServiceBusConfiguration>(), provider.GetRequiredService <ILogger <ServiceBusService> >()));

            //Hangfire fire-and-forget service (used for Service Bus)
            services.AddHangfire(c => c.UseMemoryStorage());
            //services.AddHangfireServer();
            services.TryAddSingleton <IBackgroundJobClient>(new BackgroundJobClient(new MemoryStorage()));

            //Search and location service configuration
            var searchConfiguration = Config.GetSection("ConnectionStrings:SearchDb").Get <SearchConfiguration>();

            helper.ConfirmPresent(searchConfiguration);
            services.TryAddSingleton <ICustomSearchIndexClient>(new CustomSearchIndexClient(searchConfiguration.SearchServiceName, searchConfiguration.IndexName, searchConfiguration.SearchApiKey));

            var locationDbConfig = Config.GetSection("ConnectionStrings:LocationSearchCosmosDB").Get <LocationConfiguration>();

            helper.ConfirmPresent(locationDbConfig);
            var locationDbPolicy = Config.GetSection("CosmosDBConnectionPolicy").Get <ConnectionPolicy>() ?? ConnectionPolicy.Default;

            SecureString secKey = new SecureString();

            locationDbConfig.Key.ToCharArray().ToList().ForEach(secKey.AppendChar);
            secKey.MakeReadOnly();

            services.TryAddSingleton <IDocClient>(new DocClient {
                Endpoint = locationDbConfig.Endpoint, Key = secKey, Policy = locationDbConfig.Policy
            });

            var locationDb = Config.GetSection("CosmosDBCollections:LocationSchemaDb").Get <LocationConfig <Location> >();

            helper.ConfirmPresent(locationDb);
            services.TryAddSingleton <ILocationConfig <Location> >(locationDb);


            //Cosmos database connection configuration
            var cosmosDatabaseConnectionConfiguration = Config.GetSection("ConnectionStrings:DefaultCosmosDB").Get <CosmosConnection>();

            helper.ConfirmPresent(cosmosDatabaseConnectionConfiguration);
            var cosmosDatabaseConnectionPolicy = Config.GetSection("CosmosDBConnectionPolicy").Get <ConnectionPolicy>() ?? ConnectionPolicy.Default;

            services.TryAddSingleton <IDocumentClient>(
                new DocumentClient(
                    new Uri(cosmosDatabaseConnectionConfiguration.Endpoint),
                    cosmosDatabaseConnectionConfiguration.Key,
                    cosmosDatabaseConnectionPolicy
                    )
                );

            //Add IAppConfiguration services for each database object
            helper.CreateDbObjectSingleton <FormVM>("FormSchemaDb");
            helper.CreateDbObjectSingleton <SubmissionVM>("SubmissionsDb");
            helper.CreateDbObjectSingleton <DocumentVm>("SubmissionsDb");
            helper.CreateDbObjectSingleton <ConfigVM>("ConfigDb");
            helper.CreateDbObjectSingleton <PfSurveyVM>("PostFeedbackDb");
            helper.CreateDbObjectSingleton <UserActionVM>("ActionsDb");


            //ESB service
            var esbConfig = Config.GetSection("ConnectionStrings:EsbConfig").Get <EsbConfiguration <EsbConfig> >();

            helper.ConfirmPresent(esbConfig);
            services.AddSingleton <IEsbConfiguration <EsbConfig> >(esbConfig);
            services.TryAddSingleton <IEsbWrapper>(new EsbWrapper(esbConfig));


            //Other general services
            IFileProvider physicalProvider = new PhysicalFileProvider(Directory.GetCurrentDirectory());

            services.AddSingleton <IFileProvider>(physicalProvider);

            services.TryAddScoped(typeof(IGenericRepository <>), typeof(GenericRepository <>));

            services.TryAddScoped(typeof(ILocationRepository <>), typeof(LocationRepository <>));

            services.TryAddScoped <IEsbConfiguration <EsbConfig>, EsbConfiguration <EsbConfig> >();
        }
Exemplo n.º 5
0
 public ServiceConfigurationHelperTests()
 {
     this.CertificateManagerMock        = this.CreateCertificateManagerMock();
     this.ServiceConfigHelperWithSslUrl = new ServiceConfigurationHelper(FAKE_SERVICE_URL_WITH_SSL, CertificateManagerMock);
 }