Render source URL for plugins (#660)
Build and Release / Read metadata (push) Has been cancelled
Build and Release / Build app (${{ matrix.dotnet_runtime }}) (-aarch64-apple-darwin, osx-arm64, macos-latest, aarch64-apple-darwin, dmg updater) (push) Has been cancelled
Build and Release / Build app (${{ matrix.dotnet_runtime }}) (-aarch64-pc-windows-msvc.exe, win-arm64, windows-latest, aarch64-pc-windows-msvc, nsis updater) (push) Has been cancelled
Build and Release / Build app (${{ matrix.dotnet_runtime }}) (-aarch64-unknown-linux-gnu, linux-arm64, ubuntu-22.04-arm, aarch64-unknown-linux-gnu, appimage deb updater) (push) Has been cancelled
Build and Release / Build app (${{ matrix.dotnet_runtime }}) (-x86_64-apple-darwin, osx-x64, macos-latest, x86_64-apple-darwin, dmg updater) (push) Has been cancelled
Build and Release / Build app (${{ matrix.dotnet_runtime }}) (-x86_64-pc-windows-msvc.exe, win-x64, windows-latest, x86_64-pc-windows-msvc, nsis updater) (push) Has been cancelled
Build and Release / Build app (${{ matrix.dotnet_runtime }}) (-x86_64-unknown-linux-gnu, linux-x64, ubuntu-22.04, x86_64-unknown-linux-gnu, appimage deb updater) (push) Has been cancelled
Build and Release / Prepare & create release (push) Has been cancelled
Build and Release / Publish release (push) Has been cancelled

This commit is contained in:
Thorsten Sommer authored and GitHub committed 2026-02-10 15:23:56 +01:00
1 parent 891b90819b
commit ea4e3f0199
8 files changed
+115 -21

No files matched your search

@@ -332,16 +332,55 @@ public abstract partial class PluginBase : IPluginMetadata
return false;
}
if (!url.StartsWith("http://", StringComparison.InvariantCultureIgnoreCase) && !url.StartsWith("https://", StringComparison.InvariantCultureIgnoreCase))
url = url.Trim();
if (!Uri.TryCreate(url, UriKind.Absolute, out var sourceUri))
{
url = string.Empty;
message = TB("The field SOURCE_URL is not a valid URL. The URL must start with 'http://' or 'https://'.");
message = TB("The field SOURCE_URL is not a valid URL. The URL must start with 'http://', 'https://', or 'mailto:'.");
return false;
}
var isHttp = sourceUri.Scheme.Equals(Uri.UriSchemeHttp, StringComparison.OrdinalIgnoreCase);
var isHttps = sourceUri.Scheme.Equals(Uri.UriSchemeHttps, StringComparison.OrdinalIgnoreCase);
var isMailTo = sourceUri.Scheme.Equals(Uri.UriSchemeMailto, StringComparison.OrdinalIgnoreCase);
if (!isHttp && !isHttps && !isMailTo)
{
url = string.Empty;
message = TB("The field SOURCE_URL is not a valid URL. The URL must start with 'http://', 'https://', or 'mailto:'.");
return false;
}
if (isMailTo)
{
var recipient = ExtractMailtoRecipient(url);
if (string.IsNullOrWhiteSpace(recipient))
{
url = string.Empty;
message = TB("The field SOURCE_URL is not a valid URL. When the URL starts with 'mailto:', it must contain a valid email address as recipient.");
return false;
}
}
url = sourceUri.ToString();
message = string.Empty;
return true;
}
private static string ExtractMailtoRecipient(string rawUrl)
{
var separatorIndex = rawUrl.IndexOf(':');
if (separatorIndex < 0 || separatorIndex + 1 >= rawUrl.Length)
return string.Empty;
var schemeSpecificPart = rawUrl[(separatorIndex + 1)..];
var queryStart = schemeSpecificPart.IndexOf('?');
var recipient = queryStart >= 0
? schemeSpecificPart[..queryStart]
: schemeSpecificPart;
return recipient.Trim();
}
/// <summary>
/// Tries to read the categories of the plugin.