From d11dc015370f4e36576c40bad97c1351eda0a391 Mon Sep 17 00:00:00 2001 From: Jordan Dominion Date: Wed, 24 Jul 2024 20:47:35 -0400 Subject: [PATCH] New error code for if you try to set a bad project name --- build/Version.props | 6 ++--- src/Tgstation.Server.Api/Models/ErrorCode.cs | 6 +++++ .../Components/Deployment/DreamMaker.cs | 3 +++ .../Live/Instance/DeploymentTest.cs | 23 +++++++++++++++++++ 4 files changed, 35 insertions(+), 3 deletions(-) diff --git a/build/Version.props b/build/Version.props index 80aeac2c88..0125973c28 100644 --- a/build/Version.props +++ b/build/Version.props @@ -5,10 +5,10 @@ 6.7.0 5.1.0 - 10.5.0 + 10.6.0 7.0.0 - 13.5.0 - 15.5.0 + 13.6.0 + 15.6.0 7.1.3 5.9.0 1.4.1 diff --git a/src/Tgstation.Server.Api/Models/ErrorCode.cs b/src/Tgstation.Server.Api/Models/ErrorCode.cs index 7dc134f905..9e1fea2fe9 100644 --- a/src/Tgstation.Server.Api/Models/ErrorCode.cs +++ b/src/Tgstation.Server.Api/Models/ErrorCode.cs @@ -651,5 +651,11 @@ namespace Tgstation.Server.Api.Models /// [Description("Could not create dump as dotnet diagnostics threw an exception!")] DotnetDiagnosticsFailure, + + /// + /// The configured .dme could not be found. + /// + [Description("Could not load configured .dme due to it being outside the deployment directory! This should be a relative path.")] + DeploymentWrongDme, } } diff --git a/src/Tgstation.Server.Host/Components/Deployment/DreamMaker.cs b/src/Tgstation.Server.Host/Components/Deployment/DreamMaker.cs index 6890dc25e5..2ae26d48c8 100644 --- a/src/Tgstation.Server.Host/Components/Deployment/DreamMaker.cs +++ b/src/Tgstation.Server.Host/Components/Deployment/DreamMaker.cs @@ -610,6 +610,9 @@ namespace Tgstation.Server.Host.Components.Deployment var targetDmeExists = await ioManager.FileExists(targetDme, cancellationToken); if (!targetDmeExists) throw new JobException(ErrorCode.DeploymentMissingDme); + + if (!await ioManager.PathIsChildOf(outputDirectory, targetDme, cancellationToken)) + throw new JobException(ErrorCode.DeploymentWrongDme); } logger.LogDebug("Selected \"{dmeName}.dme\" for compilation!", job.DmeName); diff --git a/tests/Tgstation.Server.Tests/Live/Instance/DeploymentTest.cs b/tests/Tgstation.Server.Tests/Live/Instance/DeploymentTest.cs index fe32e9e196..1b20cd560c 100644 --- a/tests/Tgstation.Server.Tests/Live/Instance/DeploymentTest.cs +++ b/tests/Tgstation.Server.Tests/Live/Instance/DeploymentTest.cs @@ -1,4 +1,6 @@ using System; +using System.IO; +using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -200,6 +202,27 @@ namespace Tgstation.Server.Tests.Live.Instance deployJob = await dreamMakerClient.Compile(cancellationToken); await WaitForJob(deployJob, 40, true, ErrorCode.DeploymentMissingDme, cancellationToken); + // set to an absolute path that does exist + var tempFile = Path.GetTempFileName().Replace('\\', '/'); + try + { + // for testing purposes, assume same drive for windows + var relativePath = $"../../{String.Join("/", instanceClient.Metadata.Path.Replace('\\', '/').Where(pathChar => pathChar == '/').Select(x => ".."))}{tempFile.Substring(tempFile.IndexOf('/'))}"; + var dmePath = $"{tempFile}.dme"; + File.Move(tempFile, dmePath); + tempFile = dmePath; + await dreamMakerClient.Update(new DreamMakerRequest + { + ProjectName = relativePath + }, cancellationToken); + deployJob = await dreamMakerClient.Compile(cancellationToken); + await WaitForJob(deployJob, 40, true, ErrorCode.DeploymentWrongDme, cancellationToken); + } + finally + { + File.Delete(tempFile); + } + // check that we can change the visibility await vpTest;