Beispiel #1
0
        public override void ConfigureServices(IServiceCollection services)
        {
            services.AddSingleton <IAnchorTag, MediaAnchorTag>();

            services.Configure <TemplateOptions>(o =>
            {
                o.MemberAccessStrategy.Register <DisplayMediaFieldViewModel>();
                o.MemberAccessStrategy.Register <Anchor>();

                o.Filters.AddFilter("img_tag", MediaFilters.ImgTag);
            })
            .AddLiquidFilter <AssetUrlFilter>("asset_url")
            .AddLiquidFilter <ResizeUrlFilter>("resize_url");

            services.AddTransient <IConfigureOptions <MediaOptions>, MediaOptionsConfiguration>();

            services.AddSingleton <IMediaFileProvider>(serviceProvider =>
            {
                var shellOptions  = serviceProvider.GetRequiredService <IOptions <ShellOptions> >();
                var shellSettings = serviceProvider.GetRequiredService <ShellSettings>();
                var options       = serviceProvider.GetRequiredService <IOptions <MediaOptions> >().Value;

                var mediaPath = GetMediaPath(shellOptions.Value, shellSettings, options.AssetsPath);

                if (!Directory.Exists(mediaPath))
                {
                    Directory.CreateDirectory(mediaPath);
                }
                return(new MediaFileProvider(options.AssetsRequestPath, mediaPath));
            });

            services.AddSingleton <IStaticFileProvider, IMediaFileProvider>(serviceProvider =>
                                                                            serviceProvider.GetRequiredService <IMediaFileProvider>()
                                                                            );

            services.AddSingleton <IMediaFileStore>(serviceProvider =>
            {
                var shellOptions               = serviceProvider.GetRequiredService <IOptions <ShellOptions> >();
                var shellSettings              = serviceProvider.GetRequiredService <ShellSettings>();
                var mediaOptions               = serviceProvider.GetRequiredService <IOptions <MediaOptions> >().Value;
                var mediaEventHandlers         = serviceProvider.GetServices <IMediaEventHandler>();
                var mediaCreatingEventHandlers = serviceProvider.GetServices <IMediaCreatingEventHandler>();
                var logger = serviceProvider.GetRequiredService <ILogger <DefaultMediaFileStore> >();

                var mediaPath = GetMediaPath(shellOptions.Value, shellSettings, mediaOptions.AssetsPath);
                var fileStore = new FileSystemStore(mediaPath);

                var mediaUrlBase = "/" + fileStore.Combine(shellSettings.RequestUrlPrefix, mediaOptions.AssetsRequestPath);

                var originalPathBase = serviceProvider.GetRequiredService <IHttpContextAccessor>()
                                       .HttpContext?.Features.Get <ShellContextFeature>()?.OriginalPathBase ?? null;

                if (originalPathBase.HasValue)
                {
                    mediaUrlBase = fileStore.Combine(originalPathBase.Value, mediaUrlBase);
                }

                return(new DefaultMediaFileStore(fileStore, mediaUrlBase, mediaOptions.CdnBaseUrl, mediaEventHandlers, mediaCreatingEventHandlers, logger));
            });

            services.AddScoped <IPermissionProvider, Permissions>();
            services.AddScoped <IAuthorizationHandler, ManageMediaFolderAuthorizationHandler>();
            services.AddScoped <INavigationProvider, AdminMenu>();

            // ImageSharp

            // Add ImageSharp Configuration first, to override ImageSharp defaults.
            services.AddTransient <IConfigureOptions <ImageSharpMiddlewareOptions>, MediaImageSharpConfiguration>();

            services.AddImageSharp()
            .RemoveProvider <PhysicalFileSystemProvider>()
            .AddProvider <MediaResizingFileProvider>()
            .AddProcessor <ImageVersionProcessor>()
            .AddProcessor <TokenCommandProcessor>();

            services.AddScoped <MediaTokenSettingsUpdater>();
            services.AddScoped <IMediaTokenService, MediaTokenService>();
            services.AddTransient <IConfigureOptions <MediaTokenOptions>, MediaTokenOptionsConfiguration>();
            services.AddScoped <IFeatureEventHandler>(sp => sp.GetRequiredService <MediaTokenSettingsUpdater>());
            services.AddScoped <IModularTenantEvents>(sp => sp.GetRequiredService <MediaTokenSettingsUpdater>());

            // Media Field
            services.AddContentField <MediaField>()
            .UseDisplayDriver <MediaFieldDisplayDriver>();
            services.AddScoped <IContentPartFieldDefinitionDisplayDriver, MediaFieldSettingsDriver>();
            services.AddScoped <AttachedMediaFieldFileService, AttachedMediaFieldFileService>();
            services.AddScoped <IContentHandler, AttachedMediaFieldContentHandler>();
            services.AddScoped <IModularTenantEvents, TempDirCleanerService>();
            services.AddScoped <IDataMigration, Migrations>();

            services.AddRecipeExecutionStep <MediaStep>();

            // MIME types
            services.TryAddSingleton <IContentTypeProvider, FileExtensionContentTypeProvider>();

            services.AddTagHelpers <ImageTagHelper>();
            services.AddTagHelpers <ImageResizeTagHelper>();
            services.AddTagHelpers <AnchorTagHelper>();

            // Media Profiles
            services.AddScoped <MediaProfilesManager>();
            services.AddScoped <IMediaProfileService, MediaProfileService>();
            services.AddRecipeExecutionStep <MediaProfileStep>();

            // Media Name Normalizer
            services.AddScoped <IMediaNameNormalizerService, NullMediaNameNormalizerService>();

            services.AddScoped <IUserAssetFolderNameProvider, DefaultUserAssetFolderNameProvider>();
        }
Beispiel #2
0
        public override void ConfigureServices(IServiceCollection services)
        {
            services.AddSingleton <IMediaFileStore>(serviceProvider =>
            {
                var shellOptions  = serviceProvider.GetRequiredService <IOptions <ShellOptions> >();
                var shellSettings = serviceProvider.GetRequiredService <ShellSettings>();

                var mediaPath = GetMediaPath(shellOptions.Value, shellSettings);
                var fileStore = new FileSystemStore(mediaPath);

                var mediaUrlBase = "/" + fileStore.Combine(shellSettings.RequestUrlPrefix, AssetsUrlPrefix);

                return(new MediaFileStore(fileStore, mediaUrlBase));
            });

            services.AddScoped <IPermissionProvider, Permissions>();
            services.AddScoped <INavigationProvider, AdminMenu>();

            services.AddSingleton <ContentPart, ImageMediaPart>();
            services.AddMedia();

            services.AddLiquidFilter <MediaUrlFilter>("asset_url");
            services.AddLiquidFilter <ResizeUrlFilter>("resize_url");
            services.AddLiquidFilter <ImageTagFilter>("img_tag");

            // ImageSharp

            services.AddImageSharpCore(
                options =>
            {
                options.Configuration       = Configuration.Default;
                options.MaxBrowserCacheDays = 7;
                options.MaxCacheDays        = 365;
                options.CachedNameLength    = 12;
                options.OnValidate          = validation =>
                {
                    // Force some parameters to prevent disk filling.
                    // For more advanced resize parameters the usage of profiles will be necessary.
                    // This can be done with a custom IImageWebProcessor implementation that would
                    // accept profile names.

                    validation.Commands.Remove(ResizeWebProcessor.Compand);
                    validation.Commands.Remove(ResizeWebProcessor.Sampler);
                    validation.Commands.Remove(ResizeWebProcessor.Xy);
                    validation.Commands.Remove(ResizeWebProcessor.Anchor);
                    validation.Commands.Remove(BackgroundColorWebProcessor.Color);

                    if (validation.Commands.Count > 0)
                    {
                        if (!validation.Commands.ContainsKey(ResizeWebProcessor.Mode))
                        {
                            validation.Commands[ResizeWebProcessor.Mode] = "max";
                        }

                        if (validation.Commands.TryGetValue(ResizeWebProcessor.Width, out var width))
                        {
                            if (Int32.TryParse(width, out var parsedWidth))
                            {
                                if (Array.BinarySearch <int>(Sizes, parsedWidth) == -1)
                                {
                                    validation.Commands.Clear();
                                }
                            }
                            else
                            {
                                validation.Commands.Remove(ResizeWebProcessor.Width);
                            }
                        }

                        if (validation.Commands.TryGetValue(ResizeWebProcessor.Height, out var height))
                        {
                            if (Int32.TryParse(height, out var parsedHeight))
                            {
                                if (Array.BinarySearch <int>(Sizes, parsedHeight) == -1)
                                {
                                    validation.Commands.Clear();
                                }
                            }
                            else
                            {
                                validation.Commands.Remove(ResizeWebProcessor.Height);
                            }
                        }
                    }
                };
                options.OnProcessed       = _ => { };
                options.OnPrepareResponse = _ => { };
            })
            .SetRequestParser <QueryCollectionRequestParser>()
            .SetBufferManager <PooledBufferManager>()
            .SetCacheHash <CacheHash>()
            .SetAsyncKeyLock <AsyncKeyLock>()
            .SetCache <PhysicalFileSystemCache>()
            .AddResolver <MediaFileSystemResolver>()
            .AddProcessor <ResizeWebProcessor>();

            // Media Field
            services.AddSingleton <ContentField, MediaField>();
            services.AddScoped <IContentFieldDisplayDriver, MediaFieldDisplayDriver>();
            services.AddScoped <IContentPartFieldDefinitionDisplayDriver, MediaFieldSettingsDriver>();

            services.AddRecipeExecutionStep <MediaStep>();

            // MIME types
            services.TryAddSingleton <IContentTypeProvider, FileExtensionContentTypeProvider>();

            services.AddTagHelpers <ImageTagHelper>();
            services.AddTagHelpers <ImageResizeTagHelper>();
        }
        public override void ConfigureServices(IServiceCollection services)
        {
            services.AddTransient <IConfigureOptions <MediaOptions>, MediaOptionsConfiguration>();

            services.AddSingleton <IMediaFileProvider>(serviceProvider =>
            {
                var shellOptions  = serviceProvider.GetRequiredService <IOptions <ShellOptions> >();
                var shellSettings = serviceProvider.GetRequiredService <ShellSettings>();
                var options       = serviceProvider.GetRequiredService <IOptions <MediaOptions> >().Value;

                var mediaPath = GetMediaPath(shellOptions.Value, shellSettings, options.AssetsPath);

                if (!Directory.Exists(mediaPath))
                {
                    Directory.CreateDirectory(mediaPath);
                }
                return(new MediaFileProvider(options.AssetsRequestPath, mediaPath));
            });

            services.AddSingleton <IStaticFileProvider, IMediaFileProvider>(serviceProvider =>
                                                                            serviceProvider.GetRequiredService <IMediaFileProvider>()
                                                                            );

            services.AddSingleton <IMediaFileStore>(serviceProvider =>
            {
                var shellOptions  = serviceProvider.GetRequiredService <IOptions <ShellOptions> >();
                var shellSettings = serviceProvider.GetRequiredService <ShellSettings>();
                var mediaOptions  = serviceProvider.GetRequiredService <IOptions <MediaOptions> >().Value;

                var mediaPath = GetMediaPath(shellOptions.Value, shellSettings, mediaOptions.AssetsPath);
                var fileStore = new FileSystemStore(mediaPath);

                var mediaUrlBase = "/" + fileStore.Combine(shellSettings.RequestUrlPrefix, mediaOptions.AssetsRequestPath);

                var originalPathBase = serviceProvider.GetRequiredService <IHttpContextAccessor>()
                                       .HttpContext?.Features.Get <ShellContextFeature>()?.OriginalPathBase ?? null;

                if (originalPathBase.HasValue)
                {
                    mediaUrlBase = fileStore.Combine(originalPathBase.Value, mediaUrlBase);
                }

                return(new DefaultMediaFileStore(fileStore, mediaUrlBase, mediaOptions.CdnBaseUrl));
            });

            services.AddScoped <IPermissionProvider, Permissions>();
            services.AddScoped <IAuthorizationHandler, AttachedMediaFieldsFolderAuthorizationHandler>();
            services.AddScoped <INavigationProvider, AdminMenu>();
            services.AddContentPart <ImageMediaPart>();
            services.AddMedia();

            services.AddLiquidFilter <MediaUrlFilter>("asset_url");
            services.AddLiquidFilter <ResizeUrlFilter>("resize_url");
            services.AddLiquidFilter <ImageTagFilter>("img_tag");

            // ImageSharp

            // Add ImageSharp Configuration first, to override ImageSharp defaults.
            services.AddTransient <IConfigureOptions <ImageSharpMiddlewareOptions>, MediaImageSharpConfiguration>();

            services.AddImageSharpCore()
            .SetRequestParser <QueryCollectionRequestParser>()
            .SetMemoryAllocator <ArrayPoolMemoryAllocator>()
            .SetCache <PhysicalFileSystemCache>()
            .SetCacheHash <CacheHash>()
            .AddProvider <MediaResizingFileProvider>()
            .AddProcessor <ResizeWebProcessor>()
            .AddProcessor <FormatWebProcessor>()
            .AddProcessor <ImageVersionProcessor>()
            .AddProcessor <BackgroundColorWebProcessor>();

            // Media Field
            services.AddContentField <MediaField>();
            services.AddScoped <IContentFieldDisplayDriver, MediaFieldDisplayDriver>();
            services.AddScoped <IContentPartFieldDefinitionDisplayDriver, MediaFieldSettingsDriver>();
            services.AddScoped <AttachedMediaFieldFileService, AttachedMediaFieldFileService>();
            services.AddScoped <IContentHandler, AttachedMediaFieldContentHandler>();
            services.AddScoped <IModularTenantEvents, TempDirCleanerService>();
            services.AddScoped <IDataMigration, Migrations>();

            services.AddRecipeExecutionStep <MediaStep>();

            // MIME types
            services.TryAddSingleton <IContentTypeProvider, FileExtensionContentTypeProvider>();

            services.AddTagHelpers <ImageTagHelper>();
            services.AddTagHelpers <ImageResizeTagHelper>();
        }
Beispiel #4
0
        public override void ConfigureServices(IServiceCollection services)
        {
            services.AddSingleton <IMediaFileProvider>(serviceProvider =>
            {
                var shellOptions  = serviceProvider.GetRequiredService <IOptions <ShellOptions> >();
                var shellSettings = serviceProvider.GetRequiredService <ShellSettings>();

                var mediaPath = GetMediaPath(shellOptions.Value, shellSettings);

                if (!Directory.Exists(mediaPath))
                {
                    Directory.CreateDirectory(mediaPath);
                }
                return(new MediaFileProvider(AssetsRequestPath, mediaPath));
            });

            services.AddSingleton <IStaticFileProvider>(serviceProvider =>
            {
                return(serviceProvider.GetRequiredService <IMediaFileProvider>());
            });

            services.AddSingleton <IMediaFileStore>(serviceProvider =>
            {
                var shellOptions  = serviceProvider.GetRequiredService <IOptions <ShellOptions> >();
                var shellSettings = serviceProvider.GetRequiredService <ShellSettings>();

                var mediaPath = GetMediaPath(shellOptions.Value, shellSettings);
                var fileStore = new FileSystemStore(mediaPath);

                var mediaUrlBase = "/" + fileStore.Combine(shellSettings.RequestUrlPrefix, AssetsRequestPath);

                var originalPathBase = serviceProvider.GetRequiredService <IHttpContextAccessor>()
                                       .HttpContext?.Features.Get <ShellContextFeature>()?.OriginalPathBase ?? null;

                if (originalPathBase.HasValue)
                {
                    mediaUrlBase = fileStore.Combine(originalPathBase, mediaUrlBase);
                }

                return(new MediaFileStore(fileStore, mediaUrlBase));
            });

            services.AddScoped <IPermissionProvider, Permissions>();
            services.AddScoped <IAuthorizationHandler, AttachedMediaFieldsFolderAuthorizationHandler>();
            services.AddScoped <INavigationProvider, AdminMenu>();

            services.AddSingleton <ContentPart, ImageMediaPart>();
            services.AddMedia();

            services.AddLiquidFilter <MediaUrlFilter>("asset_url");
            services.AddLiquidFilter <ResizeUrlFilter>("resize_url");
            services.AddLiquidFilter <ImageTagFilter>("img_tag");

            // ImageSharp

            services.AddImageSharpCore(options =>
            {
                options.Configuration       = Configuration.Default;
                options.MaxBrowserCacheDays = _maxBrowserCacheDays;
                options.MaxCacheDays        = _maxCacheDays;
                options.CachedNameLength    = 12;
                options.OnParseCommands     = validation =>
                {
                    // Force some parameters to prevent disk filling.
                    // For more advanced resize parameters the usage of profiles will be necessary.
                    // This can be done with a custom IImageWebProcessor implementation that would
                    // accept profile names.

                    validation.Commands.Remove(ResizeWebProcessor.Compand);
                    validation.Commands.Remove(ResizeWebProcessor.Sampler);
                    validation.Commands.Remove(ResizeWebProcessor.Xy);
                    validation.Commands.Remove(ResizeWebProcessor.Anchor);
                    validation.Commands.Remove(BackgroundColorWebProcessor.Color);

                    if (validation.Commands.Count > 0)
                    {
                        if (!validation.Commands.ContainsKey(ResizeWebProcessor.Mode))
                        {
                            validation.Commands[ResizeWebProcessor.Mode] = "max";
                        }
                    }
                };
                options.OnProcessed       = _ => { };
                options.OnPrepareResponse = _ => { };
            })

            .SetRequestParser <QueryCollectionRequestParser>()
            .SetMemoryAllocator <ArrayPoolMemoryAllocator>()
            .SetCache <PhysicalFileSystemCache>()
            .SetCacheHash <CacheHash>()
            .AddProvider <MediaResizingFileProvider>()
            .AddProcessor <ResizeWebProcessor>()
            .AddProcessor <FormatWebProcessor>()
            .AddProcessor <ImageVersionProcessor>()
            .AddProcessor <BackgroundColorWebProcessor>();

            // Media Field
            services.AddSingleton <ContentField, MediaField>();
            services.AddScoped <IContentFieldDisplayDriver, MediaFieldDisplayDriver>();
            services.AddScoped <IContentPartFieldDefinitionDisplayDriver, MediaFieldSettingsDriver>();
            services.AddScoped <AttachedMediaFieldFileService, AttachedMediaFieldFileService>();
            services.AddScoped <IContentHandler, AttachedMediaFieldContentHandler>();
            services.AddScoped <IModularTenantEvents, TempDirCleanerService>();

            services.AddRecipeExecutionStep <MediaStep>();

            // MIME types
            services.TryAddSingleton <IContentTypeProvider, FileExtensionContentTypeProvider>();

            services.AddTagHelpers <ImageTagHelper>();
            services.AddTagHelpers <ImageResizeTagHelper>();
        }