public static IApplicationBuilder UseHood(this IApplicationBuilder app, IWebHostEnvironment env, IConfiguration config)
        {
            CultureInfo.DefaultThreadCurrentCulture   = CultureInfo.GetCultureInfo("en-GB");
            CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.GetCultureInfo("en-GB");

            if (env.EnvironmentName == "Development" || env.EnvironmentName == "Hood")
            {
                app.UseDeveloperExceptionPage();
                app.UseMigrationsEndPoint();
            }
            else
            {
                app.UseExceptionHandler("/error/500");
                app.UseStatusCodePagesWithReExecute("/error/{0}");
            }

            var provider = new FileExtensionContentTypeProvider();

            provider.Mappings[".md"]          = "text/markdown";
            provider.Mappings[".webmanifest"] = "text/json";
            app.UseStaticFiles(new StaticFileOptions()
            {
                HttpsCompression    = Microsoft.AspNetCore.Http.Features.HttpsCompressionMode.Compress,
                ContentTypeProvider = provider,
                OnPrepareResponse   =
                    ctx =>
                {
                    ctx.Context.Response.Headers["Cache-Control"] = "max-age=600";
                }
            });

            app.UseRouting();
            app.UseCors();

            // Activate url helpers
            var httpContextAccessor = app.ApplicationServices.GetRequiredService <IHttpContextAccessor>();

            UrlHelpers.Configure(httpContextAccessor);

            if (config.IsDatabaseConnected())
            {
                app.UseAuthentication();
                app.UseAuthorization();

                var cookieName = config["Identity:Cookies:Name"].IsSet() ? config["Identity:Cookies:Name"] : Constants.CookieDefaultName;

                var builder = new CookieBuilder()
                {
                    Name = $".{cookieName}.Session"
                };
                builder.Expiration = TimeSpan.FromMinutes(config.GetValue("Session:Timeout", 60));

                app.UseSession(new SessionOptions()
                {
                    IdleTimeout = builder.Expiration.Value,
                    Cookie      = builder
                });
            }

            app.UseHoodComponents(env, config);
            app.UseHoodDefaultRoutes(config);

            return(app);
        }