From 2f1a200bdc2172b88530b1349b7bdd7c775e335f Mon Sep 17 00:00:00 2001 From: edraft Date: Sun, 22 Feb 2026 00:27:43 +0100 Subject: [PATCH] Escape slashes in package name --- .../Service/GiteaPackageService.cs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) 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);