mirror of
https://github.com/Jackett/Jackett.git
synced 2025-09-17 17:34:09 +02:00
Make Mono.Posix usage conditional on .NET Core
This commit is contained in:
@@ -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" />
|
||||||
|
@@ -0,0 +1,7 @@
|
|||||||
|
namespace Jackett.Common.Services.Interfaces
|
||||||
|
{
|
||||||
|
public interface IFilePermissionService
|
||||||
|
{
|
||||||
|
void MakeFileExecutable(string path);
|
||||||
|
}
|
||||||
|
}
|
@@ -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;
|
||||||
|
@@ -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>
|
||||||
|
|
||||||
|
41
src/Jackett.Server/Services/FilePermissionService.cs
Normal file
41
src/Jackett.Server/Services/FilePermissionService.cs
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -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;
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user