mirror of
https://github.com/Jackett/Jackett.git
synced 2025-09-17 17:34:09 +02:00
core: remove legacy DPAPI code (#13198)
This commit is contained in:
@@ -109,36 +109,6 @@ namespace Jackett.Common.Indexers
|
|||||||
|
|
||||||
public virtual void SaveConfig() => configurationService.Save(this as IIndexer, configData.ToJson(protectionService, forDisplay: false));
|
public virtual void SaveConfig() => configurationService.Save(this as IIndexer, configData.ToJson(protectionService, forDisplay: false));
|
||||||
|
|
||||||
protected void LoadLegacyCookieConfig(JToken jsonConfig)
|
|
||||||
{
|
|
||||||
var legacyCookieHeader = (string)jsonConfig["cookie_header"];
|
|
||||||
if (!string.IsNullOrEmpty(legacyCookieHeader))
|
|
||||||
{
|
|
||||||
CookieHeader = legacyCookieHeader;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Legacy cookie key
|
|
||||||
var jcookies = jsonConfig["cookies"];
|
|
||||||
if (jcookies is JArray)
|
|
||||||
{
|
|
||||||
var array = (JArray)jcookies;
|
|
||||||
legacyCookieHeader = string.Empty;
|
|
||||||
for (var i = 0; i < array.Count; i++)
|
|
||||||
{
|
|
||||||
if (i != 0)
|
|
||||||
legacyCookieHeader += "; ";
|
|
||||||
legacyCookieHeader += array[i];
|
|
||||||
}
|
|
||||||
CookieHeader = legacyCookieHeader;
|
|
||||||
}
|
|
||||||
else if (jcookies != null)
|
|
||||||
{
|
|
||||||
CookieHeader = (string)jcookies;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public virtual void LoadValuesFromJson(JToken jsonConfig, bool useProtectionService = false)
|
public virtual void LoadValuesFromJson(JToken jsonConfig, bool useProtectionService = false)
|
||||||
{
|
{
|
||||||
IProtectionService ps = null;
|
IProtectionService ps = null;
|
||||||
@@ -171,78 +141,11 @@ namespace Jackett.Common.Indexers
|
|||||||
{
|
{
|
||||||
if (jsonConfig is JArray)
|
if (jsonConfig is JArray)
|
||||||
{
|
{
|
||||||
if (!MigratedFromDPAPI(jsonConfig))
|
LoadValuesFromJson(jsonConfig, true);
|
||||||
{
|
|
||||||
LoadValuesFromJson(jsonConfig, true);
|
|
||||||
IsConfigured = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// read and upgrade old settings file format
|
|
||||||
else if (jsonConfig is object)
|
|
||||||
{
|
|
||||||
LoadLegacyCookieConfig(jsonConfig);
|
|
||||||
SaveConfig();
|
|
||||||
IsConfigured = true;
|
IsConfigured = true;
|
||||||
}
|
}
|
||||||
}
|
else
|
||||||
|
logger.Warn("Some of the configuration files (.json) are in the old format. Please, update Jackett.");
|
||||||
//TODO: Remove this section once users have moved off DPAPI
|
|
||||||
private bool MigratedFromDPAPI(JToken jsonConfig)
|
|
||||||
{
|
|
||||||
var isWindows = Environment.OSVersion.Platform == PlatformID.Win32NT;
|
|
||||||
|
|
||||||
if (!isWindows && DotNetCoreUtil.IsRunningOnDotNetCore)
|
|
||||||
{
|
|
||||||
// User isn't running Windows, but is running on .NET Core framework, no access to the DPAPI, so don't bother trying to migrate
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
LoadValuesFromJson(jsonConfig, false);
|
|
||||||
|
|
||||||
StringConfigurationItem passwordPropertyValue = null;
|
|
||||||
var passwordValue = "";
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
// try dynamic items first (e.g. all cardigann indexers)
|
|
||||||
passwordPropertyValue = (StringConfigurationItem)configData.GetDynamicByName("password");
|
|
||||||
|
|
||||||
if (passwordPropertyValue == null) // if there's no dynamic password try the static property
|
|
||||||
{
|
|
||||||
passwordPropertyValue = (StringConfigurationItem)configData.GetType().GetProperty("Password").GetValue(configData, null);
|
|
||||||
|
|
||||||
// protection is based on the item.Name value (property name might be different, example: Abnormal), so check the Name again
|
|
||||||
if (!string.Equals(passwordPropertyValue.Name, "password", StringComparison.InvariantCultureIgnoreCase))
|
|
||||||
{
|
|
||||||
logger.Debug($"Skipping non default password property (unencrpyted password) for [{Id}] while attempting migration");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
passwordValue = passwordPropertyValue.Value;
|
|
||||||
}
|
|
||||||
catch (Exception)
|
|
||||||
{
|
|
||||||
logger.Debug($"Unable to source password for [{Id}] while attempting migration, likely a tracker without a password setting");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(passwordValue))
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
protectionService.UnProtect(passwordValue);
|
|
||||||
//Password successfully unprotected using Microsoft.AspNetCore.DataProtection, no further action needed as we've already converted the password previously
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
if (ex.Message != "The provided payload cannot be decrypted because it was not protected with this protection provider.")
|
|
||||||
logger.Info($"Password could not be unprotected using Microsoft.AspNetCore.DataProtection - {Id} : " + ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async Task ConfigureIfOK(string cookies, bool isLoggedin, Func<Task> onError)
|
protected async Task ConfigureIfOK(string cookies, bool isLoggedin, Func<Task> onError)
|
||||||
|
Reference in New Issue
Block a user