コード例 #1
0
        public void Build(IApplicationBuilder app, CloudyAdminOptions options)
        {
            if (options.StaticFilesFileProvider != null)
            {
                app.UseStaticFiles(new StaticFileOptions
                {
                    RequestPath       = "/files",
                    FileProvider      = options.StaticFilesFileProvider,
                    OnPrepareResponse = context => context.Context.Response.Headers["Cache-Control"] = "no-cache"
                });
                ((StaticFilesBasePathProvider)app.ApplicationServices.GetRequiredService <IStaticFilesBasePathProvider>()).StaticFilesBasePath = "./files";
            }
            else
            {
                ((StaticFilesBasePathProvider)app.ApplicationServices.GetRequiredService <IStaticFilesBasePathProvider>()).StaticFilesBasePath = options.StaticFilesBaseUri;
            }

            app.UseRouting();
            app.UseAuthentication();

            if (options.AuthorizeOptions != null)
            {
                if (app.ApplicationServices.GetService <IAuthorizationService>() == null)
                {
                    throw new Exception($"Could not find {nameof(IAuthorizationService)} in DI container. Call services.{nameof(PolicyServiceCollectionExtensions.AddAuthorization)}() in ConfigureServices");
                }

                app.Map(new PathString("/Login"), branch => app.ApplicationServices.GetService <ILoginPipelineBuilder>().Build(branch, options));

                var policy =
                    options.AuthorizeOptions != null?
                    AuthorizationPolicy.CombineAsync(app.ApplicationServices.GetRequiredService <IAuthorizationPolicyProvider>(), new List <IAuthorizeData> {
                    options.AuthorizeOptions
                }).Result:
                    new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build();

                app.UseMiddleware <AuthorizeMiddleware>(policy);
            }

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapGet("/", async context =>
                {
                    if (!PathEndsInSlash(context.Request.Path))
                    {
                        RedirectToPathWithSlash(context);
                        return;
                    }

                    await context.RequestServices.GetRequiredService <IPortalPageRenderer>().RenderPageAsync(context);
                });
                endpoints.MapAreaControllerRoute(null, "Cloudy.CMS", "{controller}/{action}");
            });
        }
コード例 #2
0
 public CloudyAdminConfigurator(CloudyAdminOptions options)
 {
     Options = options;
 }