diff --git a/sh.actions.package-cleanup/Service/GiteaPackageService.cs b/sh.actions.package-cleanup/Service/GiteaPackageService.cs index 789c8b4..438f045 100644 --- a/sh.actions.package-cleanup/Service/GiteaPackageService.cs +++ b/sh.actions.package-cleanup/Service/GiteaPackageService.cs @@ -1,5 +1,6 @@ namespace sh.actions.package_cleanup.Service; +using System; using System.Net.Http.Json; using Microsoft.Extensions.Logging; using sh.actions.package_cleanup.Models; @@ -10,8 +11,10 @@ public class GiteaPackageService( HttpClient httpClient) : IGiteaPackageService { + private static string EncodePathSegment(string? s) => Uri.EscapeDataString((s ?? string.Empty)); + private string GetBaseUrl() => - $"{configuration["URL"]?.TrimEnd('/')}/packages/{configuration["OWNER"]}"; + $"{configuration["URL"]?.TrimEnd('/')}/packages/{EncodePathSegment(configuration["OWNER"]) }"; private void AddAuthorizationHeader(HttpRequestMessage request) { @@ -45,7 +48,10 @@ public class GiteaPackageService( while (true) { - var url = $"{baseUrl}/{type}/{name}?page={page}"; + var encodedType = EncodePathSegment(type); + var encodedName = EncodePathSegment(name); + + var url = $"{baseUrl}/{encodedType}/{encodedName}?page={page}"; logger.LogInformation("Fetching packages from Gitea: {Url}", url); var request = new HttpRequestMessage(HttpMethod.Get, url); @@ -126,7 +132,11 @@ public class GiteaPackageService( try { var baseUrl = GetBaseUrl(); - var url = $"{baseUrl}/{package.Type}/{package.Name}/{package.Version}"; + var encodedType = EncodePathSegment(package.Type); + var encodedName = EncodePathSegment(package.Name); + var encodedVersion = EncodePathSegment(package.Version); + + var url = $"{baseUrl}/{encodedType}/{encodedName}/{encodedVersion}"; logger.LogInformation("Deleting package {PackageName} (ID: {PackageId}) from Gitea", package.Name, package.Id);