mirror of
https://github.com/tgstation/tgstation-server.git
synced 2026-08-30 16:39:21 +01:00
Merge pull request #804 from tgstation/796-RootInstancePaths
Fixes being able to create instances in the installation directory
This commit is contained in:
@@ -9,7 +9,6 @@ using System.Linq;
|
||||
using System.Linq.Expressions;
|
||||
using System.Net;
|
||||
using System.Reflection;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Tgstation.Server.Api;
|
||||
@@ -121,6 +120,17 @@ namespace Tgstation.Server.Host.Controllers
|
||||
return BadRequest(new ErrorMessage { Message = "path must not be empty!" });
|
||||
|
||||
NormalizeModelPath(model, out var rawPath);
|
||||
|
||||
var localPath = ioManager.ResolvePath(".");
|
||||
NormalizeModelPath(new Api.Models.Instance
|
||||
{
|
||||
Path = localPath
|
||||
}, out var normalizedLocalPath);
|
||||
|
||||
if (rawPath.StartsWith(normalizedLocalPath, StringComparison.Ordinal))
|
||||
return Conflict("Instances cannot be created in the installation directory!");
|
||||
|
||||
|
||||
var dirExistsTask = ioManager.DirectoryExists(model.Path, cancellationToken);
|
||||
bool attached = false;
|
||||
if (await ioManager.FileExists(model.Path, cancellationToken).ConfigureAwait(false) || await dirExistsTask.ConfigureAwait(false))
|
||||
|
||||
@@ -51,6 +51,13 @@ namespace Tgstation.Server.Tests
|
||||
}, cancellationToken)).ConfigureAwait(false);
|
||||
await Assert.ThrowsExceptionAsync<ConflictException>(() => instanceManagerClient.CreateOrAttach(firstTest, cancellationToken)).ConfigureAwait(false);
|
||||
|
||||
//can't create instances in installation directory
|
||||
await Assert.ThrowsExceptionAsync<ConflictException>(() => instanceManagerClient.CreateOrAttach(new Api.Models.Instance
|
||||
{
|
||||
Path = "./A/Local/Path",
|
||||
Name = "NoInstallDirTest"
|
||||
}, cancellationToken)).ConfigureAwait(false);
|
||||
|
||||
//can't move to existent directories
|
||||
await Assert.ThrowsExceptionAsync<ConflictException>(() => instanceManagerClient.Update(new Api.Models.Instance
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user