[backend/configuration] Add config validation for the image processing pipeline
This commit is contained in:
parent
e40cd7dbfd
commit
e379ff3f60
2 changed files with 50 additions and 3 deletions
|
@ -198,7 +198,7 @@ public sealed class Config
|
|||
public bool DisableValidation { get; init; } = false;
|
||||
}
|
||||
|
||||
public sealed class MediaProcessingSection
|
||||
public sealed class MediaProcessingSection : IValidatableObject
|
||||
{
|
||||
public ImagePipelineSection ImagePipeline { get; init; } = new();
|
||||
|
||||
|
@ -242,6 +242,43 @@ public sealed class Config
|
|||
};
|
||||
}
|
||||
}
|
||||
|
||||
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
|
||||
{
|
||||
List<ValidationResult> res = [];
|
||||
if (ImageProcessor == Enums.ImageProcessor.None) return res;
|
||||
|
||||
List<ImageFormatConfiguration> formats =
|
||||
[
|
||||
ImagePipeline.Thumbnail.Local,
|
||||
ImagePipeline.Thumbnail.Remote,
|
||||
ImagePipeline.Original.Local,
|
||||
ImagePipeline.Original.Remote,
|
||||
ImagePipeline.Public.Local,
|
||||
ImagePipeline.Public.Remote
|
||||
];
|
||||
|
||||
if (ImageProcessor == Enums.ImageProcessor.ImageSharp)
|
||||
{
|
||||
// @formatter:off
|
||||
if (formats.Any(p => p.Format is ImageFormatEnum.Avif or ImageFormatEnum.Jxl))
|
||||
return [new ValidationResult("ImageSharp does not support AVIF or JXL. Please choose a different format, or switch to LibVips.")];
|
||||
// @formatter:on
|
||||
}
|
||||
|
||||
// @formatter:off
|
||||
if (ImagePipeline.Original.Local.Format == ImageFormatEnum.None || ImagePipeline.Original.Remote.Format == ImageFormatEnum.None)
|
||||
return [new ValidationResult("The image format 'None' is not valid for original image versions. Please choose a different format.")];
|
||||
// @formatter:on
|
||||
|
||||
formats.ForEach(p =>
|
||||
{
|
||||
var context = new ValidationContext(p);
|
||||
Validator.TryValidateObject(p, context, res, true);
|
||||
});
|
||||
|
||||
return res;
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class ImagePipelineSection
|
||||
|
@ -317,4 +354,4 @@ public sealed class Config
|
|||
[Range(0, int.MaxValue)] public int Completed { get; init; } = 100;
|
||||
[Range(0, int.MaxValue)] public int Failed { get; init; } = 10;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -128,6 +128,7 @@ public static class ServiceExtensions
|
|||
|
||||
public static void ConfigureServices(this IServiceCollection services, IConfiguration configuration)
|
||||
{
|
||||
// @formatter:off
|
||||
services.ConfigureWithValidation<Config>(configuration)
|
||||
.ConfigureWithValidation<Config.InstanceSection>(configuration, "Instance")
|
||||
.ConfigureWithValidation<Config.SecuritySection>(configuration, "Security")
|
||||
|
@ -138,7 +139,16 @@ public static class ServiceExtensions
|
|||
.ConfigureWithValidation<Config.DatabaseSection>(configuration, "Database")
|
||||
.ConfigureWithValidation<Config.StorageSection>(configuration, "Storage")
|
||||
.ConfigureWithValidation<Config.LocalStorageSection>(configuration, "Storage:Local")
|
||||
.ConfigureWithValidation<Config.ObjectStorageSection>(configuration, "Storage:ObjectStorage");
|
||||
.ConfigureWithValidation<Config.ObjectStorageSection>(configuration, "Storage:ObjectStorage")
|
||||
.ConfigureWithValidation<Config.MediaProcessingSection>(configuration, "Storage:MediaProcessing")
|
||||
.ConfigureWithValidation<Config.ImagePipelineSection>(configuration, "Storage:MediaProcessing:ImagePipeline")
|
||||
.ConfigureWithValidation<Config.ImageFormatConfiguration>(configuration, "Storage:MediaProcessing:ImagePipeline:Original:Local")
|
||||
.ConfigureWithValidation<Config.ImageFormatConfiguration>(configuration, "Storage:MediaProcessing:ImagePipeline:Original:Remote")
|
||||
.ConfigureWithValidation<Config.ImageFormatConfiguration>(configuration, "Storage:MediaProcessing:ImagePipeline:Thumbnail:Local")
|
||||
.ConfigureWithValidation<Config.ImageFormatConfiguration>(configuration, "Storage:MediaProcessing:ImagePipeline:Thumbnail:Remote")
|
||||
.ConfigureWithValidation<Config.ImageFormatConfiguration>(configuration, "Storage:MediaProcessing:ImagePipeline:Public:Local")
|
||||
.ConfigureWithValidation<Config.ImageFormatConfiguration>(configuration, "Storage:MediaProcessing:ImagePipeline:Public:Remote");
|
||||
// @formatter:on
|
||||
|
||||
services.Configure<JsonOptions>(options =>
|
||||
{
|
||||
|
|
Loading…
Add table
Reference in a new issue