Skip to content

Commit 7de9ffe

Browse files
committed
adds appsettingsschema
1 parent 7c47f20 commit 7de9ffe

File tree

7 files changed

+195
-20
lines changed

7 files changed

+195
-20
lines changed

src/ImageSharpCommunity.Providers.Remote.sln

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ImageSharpCommunity.Provide
77
EndProject
88
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RemoteImageProviderUmbracoDemo", "demos\RemoteImageProviderUmbracoDemo\RemoteImageProviderUmbracoDemo.csproj", "{A60EB7B1-23D9-40AD-AD83-76DC8CE5598E}"
99
EndProject
10-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RemoteImageProviderMvcDemo", "demos\RemoteImageProviderMvcDemo\RemoteImageProviderMvcDemo.csproj", "{8907EF51-D51E-4DFA-8DE7-9F1DCD2FF5D7}"
10+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RemoteImageProviderMvcDemo", "demos\RemoteImageProviderMvcDemo\RemoteImageProviderMvcDemo.csproj", "{8907EF51-D51E-4DFA-8DE7-9F1DCD2FF5D7}"
11+
EndProject
12+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Umbraco.Community.ImageSharpRemoteImages", "Umbraco.Community.ImageSharpRemoteImages\Umbraco.Community.ImageSharpRemoteImages.csproj", "{0D4C5D0D-C9E3-424A-BD2A-95FBFCC02A5A}"
1113
EndProject
1214
Global
1315
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -27,6 +29,10 @@ Global
2729
{8907EF51-D51E-4DFA-8DE7-9F1DCD2FF5D7}.Debug|Any CPU.Build.0 = Debug|Any CPU
2830
{8907EF51-D51E-4DFA-8DE7-9F1DCD2FF5D7}.Release|Any CPU.ActiveCfg = Release|Any CPU
2931
{8907EF51-D51E-4DFA-8DE7-9F1DCD2FF5D7}.Release|Any CPU.Build.0 = Release|Any CPU
32+
{0D4C5D0D-C9E3-424A-BD2A-95FBFCC02A5A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
33+
{0D4C5D0D-C9E3-424A-BD2A-95FBFCC02A5A}.Debug|Any CPU.Build.0 = Debug|Any CPU
34+
{0D4C5D0D-C9E3-424A-BD2A-95FBFCC02A5A}.Release|Any CPU.ActiveCfg = Release|Any CPU
35+
{0D4C5D0D-C9E3-424A-BD2A-95FBFCC02A5A}.Release|Any CPU.Build.0 = Release|Any CPU
3036
EndGlobalSection
3137
GlobalSection(SolutionProperties) = preSolution
3238
HideSolutionNode = FALSE
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using Umbraco.Cms.Core.Manifest;
2+
3+
namespace Umbraco.Community.ImageSharpRemoteImages;
4+
5+
public class ImageSharpRemoteImagesManifestFilter : IManifestFilter
6+
{
7+
public void Filter(List<PackageManifest> manifests)
8+
{
9+
manifests.Add(new PackageManifest()
10+
{
11+
AllowPackageTelemetry = true,
12+
PackageName = "ImageSharp Remote Images"
13+
});
14+
}
15+
}
Lines changed: 35 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,53 @@
1-
<Project Sdk="Microsoft.NET.Sdk.Razor">
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
23
<PropertyGroup>
3-
<TargetFramework>net6.0</TargetFramework>
4+
<Authors>Søren Kottal</Authors>
5+
<Copyright>$([System.DateTime]::UtcNow.ToString(`yyyy`)) © Søren Kottal</Copyright>
6+
<Description>
7+
ImageSharpCommunity.Providers.Remote is a library that provides remote image
8+
loading functionality for the ImageSharp.Web library. It allows you to load images from remote
9+
URLs and integrate them seamlessly into your ImageSharp-based applications.
10+
</Description>
11+
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
412
<ImplicitUsings>enable</ImplicitUsings>
513
<Nullable>enable</Nullable>
6-
<StaticWebAssetBasePath>App_Plugins</StaticWebAssetBasePath>
7-
<ContentTargetFolders>.</ContentTargetFolders>
8-
<Product>Umbraco.Community.ImageSharpRemoteImages</Product>
914
<PackageId>Umbraco.Community.ImageSharpRemoteImages</PackageId>
10-
<Title>ImageSharpRemoteImages</Title>
11-
<Description>...</Description>
12-
<PackageTags>umbraco;umbraco-marketplace</PackageTags>
13-
<RootNamespace>Umbraco.Community.ImageSharpRemoteImages</RootNamespace>
14-
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
15-
<Version>0.1.0</Version>
16-
<Authors>Søren Kottal</Authors>
17-
<Copyright>$([System.DateTime]::UtcNow.ToString(`yyyy`)) © Søren Kottal</Copyright>
15+
<PackageLicenseExpression>MIT</PackageLicenseExpression>
1816
<PackageProjectUrl>https://github.com/skttl/ImageSharp.Community.Providers.Remote</PackageProjectUrl>
19-
<RepositoryUrl>https://github.com/skttl/ImageSharp.Community.Providers.Remote</RepositoryUrl>
2017
<PackageReadmeFile>README_nuget.md</PackageReadmeFile>
18+
<PackageTags>image umbraco umbraco-marketplace</PackageTags>
19+
<Product>Umbraco.Community.ImageSharpRemoteImages</Product>
2120
<RepositoryType>git</RepositoryType>
22-
<PackageLicenseExpression>MIT</PackageLicenseExpression>
21+
<RepositoryUrl>https://github.com/skttl/ImageSharpCommunity.Providers.Remote</RepositoryUrl>
22+
<RootNamespace>ImageSharpCommunity.Providers.Remote</RootNamespace>
23+
<TargetFramework>net6.0</TargetFramework>
24+
<Title>Remote Image Provider for ImageSharp.Web in Umbraco</Title>
25+
<Version>0.1.0</Version>
2326
</PropertyGroup>
27+
28+
<ItemGroup>
29+
<None Remove="appsettings-schema.umbraco-community-imagesharpremoteimages.json" />
30+
<None Remove="buildTransitive\Umbraco.Community.ImageSharpRemoteImages.props" />
31+
</ItemGroup>
32+
33+
<ItemGroup>
34+
<Content Include="appsettings-schema.umbraco-community-imagesharpremoteimages.json" />
35+
<Content Include="buildTransitive\Umbraco.Community.ImageSharpRemoteImages.props" />
36+
</ItemGroup>
37+
<ItemGroup>
38+
<None Include="..\..\docs\README_nuget.md" Link="README_nuget.md">
39+
<PackagePath>\</PackagePath>
40+
<Pack>True</Pack>
41+
</None>
42+
</ItemGroup>
2443

2544
<ItemGroup>
2645
<PackageReference Include="Umbraco.Cms.Web.Website" Version="10.0.0" />
2746
<PackageReference Include="Umbraco.Cms.Web.BackOffice" Version="10.0.0" />
2847
</ItemGroup>
2948

3049
<ItemGroup>
31-
<None Include="..\..\docs\README_nuget_Umbraco.md">
32-
<Pack>True</Pack>
33-
<PackagePath>\</PackagePath>
34-
</None>
50+
<ProjectReference Include="..\ImageSharpCommunity.Providers.Remote\ImageSharpCommunity.Providers.Remote.csproj" />
3551
</ItemGroup>
3652

3753
</Project>
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
using ImageSharpCommunity.Providers.Remote;
2+
using ImageSharpCommunity.Providers.Remote.Configuration;
3+
using Microsoft.Extensions.DependencyInjection;
4+
using SixLabors.ImageSharp.Web.DependencyInjection;
5+
using Umbraco.Cms.Core.DependencyInjection;
6+
7+
namespace Umbraco.Community.ImageSharpRemoteImages;
8+
9+
public static class UmbracoBuilderExtensions
10+
{
11+
public static IUmbracoBuilder AddImageSharpRemoteImages(this IUmbracoBuilder builder, Action<RemoteImageProviderOptions>? defaultOptions = default)
12+
{
13+
// if the Manifest Filter is registred then we assume this has been added before so we don't do it again.
14+
if (builder.ManifestFilters().Has<ImageSharpRemoteImagesManifestFilter>())
15+
{
16+
return builder;
17+
}
18+
19+
// load up the settings.
20+
var options = builder.Services.AddOptions<RemoteImageProviderOptions>()
21+
.Bind(builder.Config.GetSection("Umbraco:Community:ImageSharpRemoteImages"));
22+
23+
if (defaultOptions != default)
24+
{
25+
options.Configure(defaultOptions);
26+
}
27+
options.ValidateDataAnnotations();
28+
29+
builder.ManifestFilters().Append<ImageSharpRemoteImagesManifestFilter>();
30+
31+
builder.Services
32+
.AddImageSharp()
33+
// needs to insert it at position 0, because it needs to go before WebRootProvider
34+
.InsertProvider<RemoteImageProvider>(0);
35+
36+
return builder;
37+
}
38+
}
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
{
2+
"$schema": "http://json-schema.org/draft-04/schema#",
3+
"title": "UmbracoCommunityImageSharpRemoteImagesAppSettings",
4+
"type": "object",
5+
"properties": {
6+
"Umbraco": {
7+
"$ref": "#/definitions/UmbracoCommunityImageSharpRemoteImagesUmbracoDefinition"
8+
}
9+
},
10+
"definitions": {
11+
"UmbracoCommunityImageSharpRemoteImagesUmbracoDefinition": {
12+
"type": "object",
13+
"description": "Configuration of settings",
14+
"properties": {
15+
"Community": {
16+
"description": "Community packages settings",
17+
"oneOf": [
18+
{
19+
"$ref": "#/definitions/UmbracoCommunityImageSharpRemoteImagesCommunityDefinition"
20+
}
21+
]
22+
}
23+
}
24+
},
25+
"UmbracoCommunityImageSharpRemoteImagesCommunityDefinition": {
26+
"type": "object",
27+
"description": "Configuration of settings",
28+
"properties": {
29+
"ImageSharpRemoteImages": {
30+
"description": "Settings for Umbraco.Community.ImageSharpRemoteImages",
31+
"oneOf": [
32+
{
33+
"$ref": "#/definitions/OurUmbracoFullTextSearchOptionsFullTextSearchOptions"
34+
}
35+
]
36+
}
37+
}
38+
},
39+
"UmbracoCommunityImageSharpRemoteImagesOptionsDefinition": {
40+
"type": "object",
41+
"properties": {
42+
"Settings": {
43+
"description": "A list of settings for remote image providers. Here you define your url prefixes, and which domains are allowed to fetch images from.",
44+
"type": "array",
45+
"items": {
46+
"$ref": "#/definitions/UmbracoCommunityImageSharpRemoteImagesSettingDefinition"
47+
}
48+
}
49+
}
50+
},
51+
"UmbracoCommunityImageSharpRemoteImagesSettingDefinition": {
52+
"type": "object",
53+
"properties": {
54+
"Prefix": {
55+
"type": "string",
56+
"description": "The local path to prefix all remote image requests with. Eg. /remote makes eg. /remote/https://test.com/test.png pass through this provider."
57+
},
58+
"RemoteUrlPrefix": {
59+
"type": [ "string", "null" ],
60+
"description": "(Optional) Prefix the url on the server, eg. set this to https://test.com/, and /remote/test.png will download https://test.com/test.png"
61+
},
62+
"MaxBytes": {
63+
"type": "integer",
64+
"description": "Maximum allowable download in bytes.",
65+
"default": 4194304
66+
},
67+
"Timeout": {
68+
"type": "integer",
69+
"description": "Timeout for a request in milliseconds",
70+
"default": 3000
71+
},
72+
"UserAgent": {
73+
"type": "string",
74+
"description": "Sets a useragent value for the request. Useful for social networks. See http://www.useragentstring.com/ for available values.",
75+
"default": "ImageSharpRemoteProvider/0.1"
76+
},
77+
"HttpClientName": {
78+
"type": "string",
79+
"description": "Sets the name of the HttpClient to use when downloading images.",
80+
"default": "ImageSharpRemoteProvider/HttpClient"
81+
},
82+
"AllowedDomains": {
83+
"type": "array",
84+
"items": {
85+
"type": "string"
86+
},
87+
"description": "Sets allowable domains to process images from."
88+
}
89+
},
90+
"required": [ "Prefix" ]
91+
}
92+
}
93+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
2+
<ItemGroup>
3+
<UmbracoJsonSchemaFiles Include="$(MSBuildThisFileDirectory)..\appsettings-schema.umbraco-community-imagesharpremoteimages.json" Weight="-49" />
4+
</ItemGroup>
5+
</Project>

src/demos/RemoteImageProviderUmbracoDemo/RemoteImageProviderUmbracoDemo.csproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
<!-- Opt-in to app-local ICU to ensure consistent globalization APIs across different platforms -->
1717
<PackageReference Include="Microsoft.ICU.ICU4C.Runtime" Version="68.2.0.9" />
1818
<ProjectReference Include="..\..\ImageSharpCommunity.Providers.Remote\ImageSharpCommunity.Providers.Remote.csproj" />
19+
<ProjectReference Include="..\..\ImageSharpCommunity.Providers.Remote\ImageSharpCommunity.Providers.Remote.csproj" />
20+
<ProjectReference Include="..\..\Umbraco.Community.ImageSharpRemoteImages\Umbraco.Community.ImageSharpRemoteImages.csproj" />
1921
<RuntimeHostConfigurationOption Include="System.Globalization.AppLocalIcu" Value="68.2.0.9" Condition="$(RuntimeIdentifier.StartsWith('linux')) or $(RuntimeIdentifier.StartsWith('win')) or ('$(RuntimeIdentifier)' == '' and !$([MSBuild]::IsOSPlatform('osx')))" />
2022
</ItemGroup>
2123

0 commit comments

Comments
 (0)