Exemplo n.º 1
0
        private static void EnsureDataStorageIsReady(IServiceProvider scopedServices)
        {
            CoreNoDbStartup.InitializeDataAsync(scopedServices).Wait();



            CloudscribeIdentityServerIntegrationNoDbStorage.InitializeDatabaseAsync(scopedServices).Wait();
        }
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        // you can add things to this method signature and they will be injected as long as they were registered during
        // ConfigureServices
        public void Configure(
            IApplicationBuilder app,
            IHostingEnvironment env,
            ILoggerFactory loggerFactory,
            IOptions <cloudscribe.Core.Models.MultiTenantOptions> multiTenantOptionsAccessor,
            IServiceProvider serviceProvider,
            IOptions <RequestLocalizationOptions> localizationOptionsAccessor,
            cloudscribe.Logging.Web.ILogRepository logRepo
            )
        {
            loggerFactory.AddConsole(Configuration.GetSection("Logging"));
            loggerFactory.AddDebug();
            ConfigureLogging(loggerFactory, serviceProvider, logRepo);

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseBrowserLink();
            }
            else
            {
                app.UseExceptionHandler("/oops/error");
            }

            app.UseForwardedHeaders();
            app.UseStaticFiles();

            //app.UseSession();

            app.UseRequestLocalization(localizationOptionsAccessor.Value);

            var multiTenantOptions = multiTenantOptionsAccessor.Value;

            app.UseCloudscribeCore(
                loggerFactory,
                multiTenantOptions,
                SslIsAvailable,
                IdentityServerIntegratorFunc);

            UseMvc(app, multiTenantOptions.Mode == cloudscribe.Core.Models.MultiTenantMode.FolderName);

            CoreNoDbStartup.InitializeDataAsync(app.ApplicationServices).Wait();
            CloudscribeIdentityServerIntegrationNoDbStorage.InitializeDatabaseAsync(app.ApplicationServices).Wait();
        }
Exemplo n.º 3
0
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        // you can add things to this method signature and they will be injected as long as they were registered during
        // ConfigureServices
        public void Configure(
            IApplicationBuilder app,
            IHostingEnvironment env,
            ILoggerFactory loggerFactory,
            IOptions <cloudscribe.Core.Models.MultiTenantOptions> multiTenantOptionsAccessor,
            IServiceProvider serviceProvider,
            IOptions <RequestLocalizationOptions> localizationOptionsAccessor,
            cloudscribe.Logging.Web.ILogRepository logRepo
            )
        {
            loggerFactory.AddConsole(Configuration.GetSection("Logging"));
            loggerFactory.AddDebug();
            ConfigureLogging(loggerFactory, serviceProvider, logRepo);

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseBrowserLink();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
            }

            app.UseForwardedHeaders();
            app.UseStaticFiles();

            app.UseSession();

            app.UseRequestLocalization(localizationOptionsAccessor.Value);

            app.UseMultitenancy <cloudscribe.Core.Models.SiteContext>();

            var multiTenantOptions = multiTenantOptionsAccessor.Value;

            app.UsePerTenant <cloudscribe.Core.Models.SiteContext>((ctx, builder) =>
            {
                // custom 404 and error page - this preserves the status code (ie 404)
                if (string.IsNullOrEmpty(ctx.Tenant.SiteFolderName))
                {
                    builder.UseStatusCodePagesWithReExecute("/Home/Error/{0}");
                }
                else
                {
                    builder.UseStatusCodePagesWithReExecute("/" + ctx.Tenant.SiteFolderName + "/Home/Error/{0}");
                }

                builder.UseCloudscribeCoreDefaultAuthentication(
                    loggerFactory,
                    multiTenantOptions,
                    ctx.Tenant);

                // to make this multi tenant for folders
                // using a fork of IdentityServer4 and hoping to get changes so we don't need a fork
                // https://github.com/IdentityServer/IdentityServer4/issues/19

                builder.UseIdentityServer();

                // this sets up the authentication for apis within this application endpoint
                // ie apis that are hosted in the same web app endpoint with the authority server
                // this is not needed here if you are only using separate api endpoints
                // it is needed in the startup of those separate endpoints
                //builder.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions
                //{
                //    Authority = "https://localhost:5000",
                //    // using the site aliasid as the scope so each tenant has a different scope
                //    // you can view the aliasid from site settings
                //    // clients must be configured with the scope to have access to the apis for the tenant
                //    ApiName = ctx.Tenant.AliasId,

                //    RequireHttpsMetadata = false
                //});
            });

            UseMvc(app, multiTenantOptions.Mode == cloudscribe.Core.Models.MultiTenantMode.FolderName);

            CoreNoDbStartup.InitializeDataAsync(app.ApplicationServices).Wait();
            CloudscribeIdentityServerIntegrationNoDbStorage.InitializeDatabaseAsync(app.ApplicationServices).Wait();
        }
Exemplo n.º 4
0
 private static void EnsureDataStorageIsReady(IServiceProvider scopedServices)
 {
     #if (Logging)
     #if (!NoDb)
     var deleteLogsOlderThanDays = 90;
     LoggingEFStartup.InitializeDatabaseAsync(scopedServices, deleteLogsOlderThanDays).Wait();
     #endif
     #endif
     #if (NoDb)
     CoreNoDbStartup.InitializeDataAsync(scopedServices).Wait();
     #else
     CoreEFStartup.InitializeDatabaseAsync(scopedServices).Wait();
     #endif
     #if (SimpleContentConfig != "z")
     #if (!NoDb)
     SimpleContentEFStartup.InitializeDatabaseAsync(scopedServices).Wait();
     #endif
     #endif
     #if (KvpCustomRegistration || Newsletter)
     #if (!NoDb)
     KvpEFCoreStartup.InitializeDatabaseAsync(scopedServices).Wait();
     #endif
     #endif
     #if (IdentityServer)
     #if (NoDb)
     CloudscribeIdentityServerIntegrationNoDbStorage.InitializeDatabaseAsync(scopedServices).Wait();
     #else
     CloudscribeIdentityServerIntegrationEFCoreStorage.InitializeDatabaseAsync(scopedServices).Wait();
     #endif
     #endif
     #if (FormBuilder)
     #if (!NoDb)
     FormsDatabase.InitializeDatabaseAsync(scopedServices).Wait();
     #endif
     #endif
     #if (Paywall)
     #if (!NoDb)
     MembershipDatabase.InitializeDatabaseAsync(scopedServices).Wait();
     #endif
     #endif
      #if (IncludeEmailQueue)
     #if (!NoDb)
     EmailQueueDatabase.InitializeDatabaseAsync(scopedServices).Wait();
     EmailTemplateDatabase.InitializeDatabaseAsync(scopedServices).Wait();
     #endif
     #endif
     #if (Newsletter)
     #if (!NoDb)
     EmailListDatabase.InitializeDatabaseAsync(scopedServices).Wait();
     #endif
     #endif
     #if (IncludeStripeIntegration)
     #if (!NoDb)
     StripeDatabase.InitializeDatabaseAsync(scopedServices).Wait();
     #endif
     #endif
     #if (DynamicPolicy)
     #if (!NoDb)
     DynamicPolicyEFCore.InitializeDatabaseAsync(scopedServices).Wait();
     #endif
     #endif
     #if (CommentSystem)
     #if (!NoDb)
     CommentsDatabase.InitializeDatabaseAsync(scopedServices).Wait();
     #endif
     #endif
     #if (Forum)
     #if (!NoDb)
     ForumDatabase.InitializeDatabaseAsync(scopedServices).Wait();
     #endif
     #endif
 }
Exemplo n.º 5
0
        private static void EnsureDataStorageIsReady(IConfiguration config, IServiceProvider services)
        {
            var storage = config["DevOptions:DbPlatform"];

            switch (storage)
            {
            case "NoDb":
                CoreNoDbStartup.InitializeDataAsync(services).Wait();

                // you can use this hack to add clients and scopes into the db during startup if needed
                // I used this before we implemented the UI for adding them
                // you should not use this on the first run that actually creates the initial cloudscribe data
                // you must wait until after that and then you can get the needed siteid from the database
                // this will only run at startup time and only add data if no data exists for the given site.
                // if you pass in an invalid siteid it will not fail, you will get data with a bad siteid
                // make note of your siteid, don't use these, these are from my NoDb storage
                // site1 05301194-da1d-43a8-9aa4-6c5f8959f37b
                // site2 a9e2c249-90b4-4770-9e99-9702d89f73b6
                // replace null with your siteid and run the app, then change it back to null since it can only be a one time task
                string sId = null;

                CloudscribeIdentityServerIntegrationNoDbStorage.InitializeDatabaseAsync(
                    services,
                    sId,
                    IdServerClients.Get(),
                    IdServerResources.GetApiResources(),
                    IdServerResources.GetIdentityResources()
                    ).Wait();

                break;

            case "ef":
            default:
                // this creates ensures the database is created and initial data
                CoreEFStartup.InitializeDatabaseAsync(services).Wait();

                // this one is only needed if using cloudscribe Logging with EF as the logging storage
                LoggingEFStartup.InitializeDatabaseAsync(services).Wait();

                KvpEFCoreStartup.InitializeDatabaseAsync(services).Wait();

                // you can use this hack to add clients and scopes into the db during startup if needed
                // I used this before we implemented the UI for adding them
                // you should not use this on the first run that actually creates the initial cloudscribe data
                // you must wait until after that and then you can get the needed siteid from the database
                // this will only run at startup time and only add data if no data exists for the given site.
                // if you pass in an invalid siteid it will not fail, you will get data with a bad siteid
                // make note of your siteid, don't use these, these are from my db
                // site1 8f54733c-3f3a-4971-bb1f-8950cea42f1a
                // site2 7c111db3-e270-497a-9a12-aed436c764c6
                // replace null with your siteid and run the app, then change it back to null since it can only be a one time task
                string siteId = null;

                CloudscribeIdentityServerIntegrationEFCoreStorage.InitializeDatabaseAsync(
                    services,
                    siteId,
                    IdServerClients.Get(),
                    IdServerResources.GetApiResources(),
                    IdServerResources.GetIdentityResources()
                    ).Wait();

                break;
            }
        }
Exemplo n.º 6
0
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        // you can add things to this method signature and they will be injected as long as they were registered during
        // ConfigureServices
        public void Configure(
            IApplicationBuilder app,
            IHostingEnvironment env,
            ILoggerFactory loggerFactory,
            IOptions <cloudscribe.Core.Models.MultiTenantOptions> multiTenantOptionsAccessor,
            IServiceProvider serviceProvider,
            IOptions <RequestLocalizationOptions> localizationOptionsAccessor
            , cloudscribe.Logging.Web.ILogRepository logRepo
            )
        {
            loggerFactory.AddConsole(Configuration.GetSection("Logging"));
            loggerFactory.AddDebug();
            ConfigureLogging(loggerFactory, serviceProvider, logRepo);

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseDatabaseErrorPage();
                app.UseBrowserLink();
            }

            var storage = Configuration["DevOptions:DbPlatform"];

            switch (storage)
            {
            case "NoDb":
                CoreNoDbStartup.InitializeDataAsync(app.ApplicationServices).Wait();

                // you can use this hack to add clients and scopes into the db since
                // there is currently no ui to do it
                // you should not use this on the first run that actually creates the initial cloudscribe data
                // you must wait until after that and then you can get the needed siteid from the database
                // this will only run at startup time and only add data if no data exists for the given site.
                // if you pass in an invalid siteid it will not fail, you will get data with a bad siteid
                // make note of your siteid, don't use these, these are from my NoDb storage
                // site1 05301194-da1d-43a8-9aa4-6c5f8959f37b
                // site2 a9e2c249-90b4-4770-9e99-9702d89f73b6
                // replace null with your siteid and run the app, then change it back to null since it can only be a one time task
                string sId = null;

                CloudscribeIdentityServerIntegrationNoDbStorage.InitializeDatabaseAsync(
                    app.ApplicationServices,
                    sId,
                    GetClients(),
                    GetScopes()
                    ).Wait();

                break;

            case "ef":
            default:
                // this creates ensures the database is created and initial data
                CoreEFStartup.InitializeDatabaseAsync(app.ApplicationServices).Wait();

                // this one is only needed if using cloudscribe Logging with EF as the logging storage
                LoggingEFStartup.InitializeDatabaseAsync(app.ApplicationServices).Wait();

                // you can use this hack to add clients and scopes into the db since
                // there is currently no ui to do it
                // you should not use this on the first run that actually creates the initial cloudscribe data
                // you must wait until after that and then you can get the needed siteid from the database
                // this will only run at startup time and only add data if no data exists for the given site.
                // if you pass in an invalid siteid it will not fail, you will get data with a bad siteid
                // make note of your siteid, don't use these, these are from my db
                // site1 8f54733c-3f3a-4971-bb1f-8950cea42f1a
                // site2 7c111db3-e270-497a-9a12-aed436c764c6
                // replace null with your siteid and run the app, then change it back to null since it can only be a one time task
                string siteId = null;

                CloudscribeIdentityServerIntegrationEFCoreStorage.InitializeDatabaseAsync(
                    app.ApplicationServices,
                    siteId,
                    GetClients(),
                    GetScopes()
                    ).Wait();

                break;
            }

            app.UseForwardedHeaders();

            app.UseStaticFiles();

            app.UseSession();

            app.UseRequestLocalization(localizationOptionsAccessor.Value);

            app.UseMultitenancy <cloudscribe.Core.Models.SiteContext>();

            var multiTenantOptions = multiTenantOptionsAccessor.Value;

            app.UsePerTenant <cloudscribe.Core.Models.SiteContext>((ctx, builder) =>
            {
                // custom 404 and error page - this preserves the status code (ie 404)
                if (string.IsNullOrEmpty(ctx.Tenant.SiteFolderName))
                {
                    builder.UseStatusCodePagesWithReExecute("/Home/Error/{0}");
                }
                else
                {
                    builder.UseStatusCodePagesWithReExecute("/" + ctx.Tenant.SiteFolderName + "/Home/Error/{0}");
                }


                builder.UseCloudscribeCoreDefaultAuthentication(
                    loggerFactory,
                    multiTenantOptions,
                    ctx.Tenant);

                // to make this multi tenant for folders
                // using a fork of IdentityServer4 and hoping to get changes so we don't need a fork
                // https://github.com/IdentityServer/IdentityServer4/issues/19

                builder.UseIdentityServer();

                // this sets up the authentication for apis within this application endpoint
                // ie apis that are hosted in the same web app endpoint with the authority server
                // this is not needed here if you are only using separate api endpoints
                // it is needed in the startup of those separate endpoints
                builder.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions
                {
                    Authority = "https://localhost:44399",
                    // using the site aliasid as the scope so each tenant has a different scope
                    // you can view the aliasid from site settings
                    // clients must be configured with the scope to have access to the apis for the tenant
                    ScopeName = ctx.Tenant.AliasId,

                    RequireHttpsMetadata = true
                });
            });



            UseMvc(app, multiTenantOptions.Mode == cloudscribe.Core.Models.MultiTenantMode.FolderName);
        }