Make Mono.Posix usage conditional on .NET Core

This commit is contained in:
flightlevel
2019-03-06 21:16:20 +11:00
parent a5f0e2b5db
commit a25f2016dc
7 changed files with 71 additions and 23 deletions

View File

@@ -19,7 +19,6 @@
<PackageReference Include="Microsoft.AspNetCore.WebUtilities" Version="2.2.0" /> <PackageReference Include="Microsoft.AspNetCore.WebUtilities" Version="2.2.0" />
<PackageReference Include="Microsoft.CSharp" Version="4.5.0" /> <PackageReference Include="Microsoft.CSharp" Version="4.5.0" />
<PackageReference Include="MimeMapping" Version="1.0.1.12" /> <PackageReference Include="MimeMapping" Version="1.0.1.12" />
<!--<PackageReference Include="Mono.Posix.NETStandard" Version="1.0.0" />-->
<PackageReference Include="Newtonsoft.Json" Version="12.0.1" /> <PackageReference Include="Newtonsoft.Json" Version="12.0.1" />
<PackageReference Include="NLog" Version="4.5.11" /> <PackageReference Include="NLog" Version="4.5.11" />
<PackageReference Include="SharpZipLib" Version="1.1.0" /> <PackageReference Include="SharpZipLib" Version="1.1.0" />

View File

@@ -0,0 +1,7 @@
namespace Jackett.Common.Services.Interfaces
{
public interface IFilePermissionService
{
void MakeFileExecutable(string path);
}
}

View File

@@ -17,7 +17,6 @@ using Jackett.Common.Models.GitHub;
using Jackett.Common.Services.Interfaces; using Jackett.Common.Services.Interfaces;
using Jackett.Common.Utils; using Jackett.Common.Utils;
using Jackett.Common.Utils.Clients; using Jackett.Common.Utils.Clients;
//using Mono.Posix;
using Newtonsoft.Json; using Newtonsoft.Json;
using NLog; using NLog;
@@ -33,11 +32,12 @@ namespace Jackett.Common.Services
ITrayLockService lockService; ITrayLockService lockService;
IProcessService processService; IProcessService processService;
IServiceConfigService windowsService; IServiceConfigService windowsService;
IFilePermissionService filePermissionService;
private ServerConfig serverConfig; private ServerConfig serverConfig;
bool forceupdatecheck = false; bool forceupdatecheck = false;
Variants.JackettVariant variant = Variants.JackettVariant.NotFound; Variants.JackettVariant variant = Variants.JackettVariant.NotFound;
public UpdateService(Logger l, WebClient c, IConfigurationService cfg, ITrayLockService ls, IProcessService ps, IServiceConfigService ws, ServerConfig sc) public UpdateService(Logger l, WebClient c, IConfigurationService cfg, ITrayLockService ls, IProcessService ps, IServiceConfigService ws, IFilePermissionService fps, ServerConfig sc)
{ {
logger = l; logger = l;
client = c; client = c;
@@ -46,6 +46,7 @@ namespace Jackett.Common.Services
processService = ps; processService = ps;
windowsService = ws; windowsService = ws;
serverConfig = sc; serverConfig = sc;
filePermissionService = fps;
} }
private string ExePath() private string ExePath()
@@ -290,29 +291,20 @@ namespace Jackett.Common.Services
gzipStream.Close(); gzipStream.Close();
inStream.Close(); inStream.Close();
//Disabled as the Mono.Posix.NETStandard library causes issues outside of .NET Core if (variant == Variants.JackettVariant.CoreMacOs || variant == Variants.JackettVariant.CoreLinuxAmdx64
//https://github.com/xamarin/XamarinComponents/issues/282 || variant == Variants.JackettVariant.CoreLinuxArm32 || variant == Variants.JackettVariant.CoreLinuxArm64)
//if (variant == Variants.JackettVariant.CoreMacOs || variant == Variants.JackettVariant.CoreLinuxAmdx64 {
//|| variant == Variants.JackettVariant.CoreLinuxArm32 || variant == Variants.JackettVariant.CoreLinuxArm64) //Calling the file permission service to limit usage to netcoreapp. The Mono.Posix.NETStandard library causes issues outside of .NET Core
//{ //https://github.com/xamarin/XamarinComponents/issues/282
// // When the files get extracted, the execute permission for jackett and JackettUpdater don't get carried across
// string jackettPath = tempDir + "/Jackett/jackett"; // When the files get extracted, the execute permission for jackett and JackettUpdater don't get carried across
// logger.Debug($"Giving execute permission to jackett from: {jackettPath}");
// UnixFileInfo jackettFI = new UnixFileInfo(jackettPath) string jackettPath = tempDir + "/Jackett/jackett";
// { filePermissionService.MakeFileExecutable(jackettPath);
// FileAccessPermissions = FileAccessPermissions.UserReadWriteExecute | FileAccessPermissions.GroupRead | FileAccessPermissions.OtherRead
// };
// string jackettUpdaterPath = tempDir + "/Jackett/JackettUpdater"; string jackettUpdaterPath = tempDir + "/Jackett/JackettUpdater";
// logger.Debug($"Giving execute permission to JackettUpdater from: {jackettUpdaterPath}"); filePermissionService.MakeFileExecutable(jackettUpdaterPath);
}
// UnixFileInfo jackettUpdaterFI = new UnixFileInfo(jackettUpdaterPath)
// {
// FileAccessPermissions = FileAccessPermissions.UserReadWriteExecute | FileAccessPermissions.GroupRead | FileAccessPermissions.OtherRead
// };
//}
} }
return tempDir; return tempDir;

View File

@@ -22,6 +22,7 @@
<!-- Conditionally obtain references for the .NET Core App 2.2 target --> <!-- Conditionally obtain references for the .NET Core App 2.2 target -->
<ItemGroup Condition=" '$(TargetFramework)' == 'netcoreapp2.2' "> <ItemGroup Condition=" '$(TargetFramework)' == 'netcoreapp2.2' ">
<PackageReference Include="Mono.Posix.NETStandard" Version="1.0.0" />
<PackageReference Include="System.Security.Cryptography.ProtectedData" Version="4.5.0" /> <PackageReference Include="System.Security.Cryptography.ProtectedData" Version="4.5.0" />
</ItemGroup> </ItemGroup>

View File

@@ -0,0 +1,41 @@
using Jackett.Common.Services.Interfaces;
using NLog;
using System;
#if NETCOREAPP2_2
using Mono.Unix;
#endif
namespace Jackett.Server.Services
{
public class FilePermissionService : IFilePermissionService
{
private Logger logger;
public FilePermissionService(Logger l)
{
logger = l;
}
public void MakeFileExecutable(string path)
{
#if NETCOREAPP2_2
//Calling the file permission service to limit usage to netcoreapp. The Mono.Posix.NETStandard library causes issues outside of .NET Core
//https://github.com/xamarin/XamarinComponents/issues/282
logger.Debug($"Attempting to give execute permission to: {path}");
try
{
UnixFileInfo jackettUpdaterFI = new UnixFileInfo(path)
{
FileAccessPermissions = FileAccessPermissions.UserReadWriteExecute | FileAccessPermissions.GroupRead | FileAccessPermissions.OtherRead
};
}
catch (Exception ex)
{
logger.Error(ex);
}
#endif
}
}
}

View File

@@ -83,6 +83,7 @@ namespace Jackett.Server
builder.RegisterType<ServerService>().As<IServerService>().SingleInstance(); builder.RegisterType<ServerService>().As<IServerService>().SingleInstance();
builder.RegisterType<ProtectionService>().As<IProtectionService>().SingleInstance(); builder.RegisterType<ProtectionService>().As<IProtectionService>().SingleInstance();
builder.RegisterType<ServiceConfigService>().As<IServiceConfigService>().SingleInstance(); builder.RegisterType<ServiceConfigService>().As<IServiceConfigService>().SingleInstance();
builder.RegisterType<FilePermissionService>().As<IFilePermissionService>().SingleInstance();
IContainer container = builder.Build(); IContainer container = builder.Build();
Helper.ApplicationContainer = container; Helper.ApplicationContainer = container;

View File

@@ -377,6 +377,13 @@ namespace Jackett.Updater
startInfo.FileName = "mono"; startInfo.FileName = "mono";
} }
if (variant == Variants.JackettVariant.CoreMacOs || variant == Variants.JackettVariant.CoreLinuxAmdx64
|| variant == Variants.JackettVariant.CoreLinuxArm32 || variant == Variants.JackettVariant.CoreLinuxArm64)
{
startInfo.UseShellExecute = false;
startInfo.CreateNoWindow = true;
}
logger.Info("Starting Jackett: " + startInfo.FileName + " " + startInfo.Arguments); logger.Info("Starting Jackett: " + startInfo.FileName + " " + startInfo.Arguments);
Process.Start(startInfo); Process.Start(startInfo);
} }