diff --git a/Setup/setup.iss b/Setup/setup.iss
index afadaf8fe..042ca859f 100644
--- a/Setup/setup.iss
+++ b/Setup/setup.iss
@@ -104,10 +104,10 @@ Source: "..\src\bin\Microsoft.Windows.SDK.NET.dll"; DestDir: "{app}\{#VersionFol
Source: "..\src\bin\Newtonsoft.Json.dll"; DestDir: "{app}\{#VersionFolder}"; Flags: signonce;
Source: "..\src\bin\OxyPlot.dll"; DestDir: "{app}\{#VersionFolder}"; Flags: signonce;
Source: "..\src\bin\OxyPlot.Wpf.dll"; DestDir: "{app}\{#VersionFolder}"; Flags: signonce;
+Source: "..\src\bin\OxyPlot.Wpf.Shared.dll"; DestDir: "{app}\{#VersionFolder}"; Flags: signonce;
Source: "..\src\bin\PInvoke.Kernel32.dll"; DestDir: "{app}\{#VersionFolder}"; Flags: signonce;
Source: "..\src\bin\PInvoke.Windows.Core.dll"; DestDir: "{app}\{#VersionFolder}"; Flags: signonce;
Source: "..\src\bin\PInvoke.Windows.ShellScalingApi.dll"; DestDir: "{app}\{#VersionFolder}"; Flags: signonce;
-Source: "..\src\bin\PluralNet.dll"; DestDir: "{app}\{#VersionFolder}"; Flags: signonce;
Source: "..\src\bin\Polly.Contrib.WaitAndRetry.dll"; DestDir: "{app}\{#VersionFolder}"; Flags: signonce;
Source: "..\src\bin\Polly.dll"; DestDir: "{app}\{#VersionFolder}"; Flags: signonce;
Source: "..\src\bin\ProtonVPN.Announcements.Contracts.dll"; DestDir: "{app}\{#VersionFolder}"; Flags: signonce;
@@ -198,6 +198,7 @@ Source: "..\src\bin\ProtonVPN.Vpn.dll"; DestDir: "{app}\{#VersionFolder}"; Flags
Source: "..\src\bin\ProtonVPN.Vpn.deps.json"; DestDir: "{app}\{#VersionFolder}";
Source: "..\src\bin\ProtonVPN.WireGuardDriver.dll"; DestDir: "{app}\{#VersionFolder}"; Flags: signonce;
Source: "..\src\bin\ProtonVPN.WireGuardDriver.deps.json"; DestDir: "{app}\{#VersionFolder}";
+Source: "..\src\bin\ReswPlusLib.dll"; DestDir: "{app}\{#VersionFolder}"; Flags: signonce;
Source: "..\src\bin\Sentry.dll"; DestDir: "{app}\{#VersionFolder}"; Flags: signonce;
Source: "..\src\bin\System.Configuration.ConfigurationManager.dll"; DestDir: "{app}\{#VersionFolder}"; Flags: signonce;
Source: "..\src\bin\System.Diagnostics.EventLog.dll"; DestDir: "{app}\{#VersionFolder}"; Flags: signonce;
diff --git a/src/Api/ProtonVPN.Api.Tests/Handlers/Retries/RetryCountProviderTest.cs b/src/Api/ProtonVPN.Api.Tests/Handlers/Retries/RetryCountProviderTest.cs
index 115950133..c58537bc0 100644
--- a/src/Api/ProtonVPN.Api.Tests/Handlers/Retries/RetryCountProviderTest.cs
+++ b/src/Api/ProtonVPN.Api.Tests/Handlers/Retries/RetryCountProviderTest.cs
@@ -34,7 +34,7 @@ public void ItShouldUseDefaultRetryCount()
{
// Arrange
int retryCount = 3;
- IConfiguration config = new Config() { ApiRetries = retryCount };
+ IConfiguration config = new Config { ApiRetries = retryCount };
RetryCountProvider sut = new(config);
// Assert
@@ -45,7 +45,7 @@ public void ItShouldUseDefaultRetryCount()
public void ItShouldUseCustomRetryCount()
{
// Arrange
- IConfiguration config = new Config() { ApiRetries = 3 };
+ IConfiguration config = new Config { ApiRetries = 3 };
RetryCountProvider sut = new(config);
HttpRequestMessage request = new();
int retryCount = 10;
diff --git a/src/ProtonVPN.App/Config/Url/ActiveUrl.cs b/src/ProtonVPN.App/Config/Url/ActiveUrl.cs
index 85e3004b8..fa24be817 100644
--- a/src/ProtonVPN.App/Config/Url/ActiveUrl.cs
+++ b/src/ProtonVPN.App/Config/Url/ActiveUrl.cs
@@ -17,11 +17,12 @@
* along with ProtonVPN. If not, see .
*/
-using ProtonVPN.Common.OS.Processes;
using System;
using System.Collections.Generic;
-using System.Collections.Specialized;
-using System.Web;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.WebUtilities;
+using Microsoft.Extensions.Primitives;
+using ProtonVPN.Common.OS.Processes;
namespace ProtonVPN.Config.Url
{
@@ -41,13 +42,13 @@ public ActiveUrl WithQueryParams(Dictionary parameters)
try
{
UriBuilder uriBuilder = new UriBuilder(_url);
- NameValueCollection query = HttpUtility.ParseQueryString(uriBuilder.Query);
+ Dictionary query = QueryHelpers.ParseQuery(uriBuilder.Query);
foreach (KeyValuePair item in parameters)
{
query[item.Key] = item.Value;
}
- uriBuilder.Query = query.ToString();
+ uriBuilder.Query = QueryString.Create(query).ToString();
_url = uriBuilder.ToString();
}
catch (UriFormatException)
diff --git a/src/ProtonVPN.App/ProtonVPN.App.csproj b/src/ProtonVPN.App/ProtonVPN.App.csproj
index 542811358..803c8c9a2 100644
--- a/src/ProtonVPN.App/ProtonVPN.App.csproj
+++ b/src/ProtonVPN.App/ProtonVPN.App.csproj
@@ -591,7 +591,7 @@
all
-
+
diff --git a/src/ProtonVPN.App/Resources/Assets/Styles/OxyPlot.xaml b/src/ProtonVPN.App/Resources/Assets/Styles/OxyPlot.xaml
index 9b8f43242..41ef461b6 100644
--- a/src/ProtonVPN.App/Resources/Assets/Styles/OxyPlot.xaml
+++ b/src/ProtonVPN.App/Resources/Assets/Styles/OxyPlot.xaml
@@ -93,39 +93,4 @@ along with ProtonVPN. If not, see .
-
-
-
+
\ No newline at end of file
diff --git a/src/ProtonVPN.Common/OS/Net/Http/HttpRequestMessageExtensions.cs b/src/ProtonVPN.Common/OS/Net/Http/HttpRequestMessageExtensions.cs
index ad4a78a8a..bfe2d1a2b 100644
--- a/src/ProtonVPN.Common/OS/Net/Http/HttpRequestMessageExtensions.cs
+++ b/src/ProtonVPN.Common/OS/Net/Http/HttpRequestMessageExtensions.cs
@@ -26,8 +26,8 @@ namespace ProtonVPN.Common.OS.Net.Http
{
public static class HttpRequestMessageExtensions
{
- private const string CUSTOM_TIMEOUT_PROPERTY_NAME = "CustomTimeout";
- private const string RETRY_COUNT_PROPERTY_NAME = "RetryCount";
+ private static readonly HttpRequestOptionsKey CustomTimeoutOptionsKey = new("CustomTimeout");
+ private static readonly HttpRequestOptionsKey RetryCountOptionsKey = new("RetryCount");
public static bool AuthHeadersInvalid(this HttpRequestMessage request)
{
@@ -36,38 +36,28 @@ public static bool AuthHeadersInvalid(this HttpRequestMessage request)
public static TimeSpan? GetCustomTimeout(this HttpRequestMessage request)
{
- if (request.Properties.TryGetValue(CUSTOM_TIMEOUT_PROPERTY_NAME, out object timeout))
- {
- return (TimeSpan)timeout;
- }
-
- return null;
+ return request.Options.TryGetValue(CustomTimeoutOptionsKey, out TimeSpan timeout) ? timeout : null;
}
public static void SetCustomTimeout(this HttpRequestMessage request, TimeSpan timeout)
{
- if (!request.Properties.ContainsKey(CUSTOM_TIMEOUT_PROPERTY_NAME))
+ if (!request.Options.TryGetValue(CustomTimeoutOptionsKey, out _))
{
- request.Properties.Add(CUSTOM_TIMEOUT_PROPERTY_NAME, timeout);
+ request.Options.Set(CustomTimeoutOptionsKey, timeout);
}
}
public static void SetRetryCount(this HttpRequestMessage request, int retryCount)
{
- if (!request.Properties.ContainsKey(RETRY_COUNT_PROPERTY_NAME))
+ if (!request.Options.TryGetValue(RetryCountOptionsKey, out _))
{
- request.Properties.Add(RETRY_COUNT_PROPERTY_NAME, retryCount);
+ request.Options.Set(RetryCountOptionsKey, retryCount);
}
}
public static int? GetRetryCount(this HttpRequestMessage request)
{
- if (request.Properties.TryGetValue(RETRY_COUNT_PROPERTY_NAME, out object timeout))
- {
- return (int)timeout;
- }
-
- return null;
+ return request.Options.TryGetValue(RetryCountOptionsKey, out int timeout) ? timeout : null;
}
private static bool AuthHeaderSet(this HttpRequestMessage request)
diff --git a/src/ProtonVPN.Common/ProtonVPN.Common.csproj b/src/ProtonVPN.Common/ProtonVPN.Common.csproj
index 8f1440f76..c3cc4c34e 100644
--- a/src/ProtonVPN.Common/ProtonVPN.Common.csproj
+++ b/src/ProtonVPN.Common/ProtonVPN.Common.csproj
@@ -7,12 +7,6 @@
false
true
-
-
-
-
-
-
Properties\GlobalAssemblyInfo.cs
diff --git a/src/ProtonVPN.Common/Vpn/VpnHost.cs b/src/ProtonVPN.Common/Vpn/VpnHost.cs
index 41ca4aafa..18fe208c4 100644
--- a/src/ProtonVPN.Common/Vpn/VpnHost.cs
+++ b/src/ProtonVPN.Common/Vpn/VpnHost.cs
@@ -78,9 +78,15 @@ private static void AssertIpAddressIsValid(string ip)
public override bool Equals(object o)
{
+ if (o == null)
+ {
+ return false;
+ }
+
VpnHost vpnHost = (VpnHost)o;
- return vpnHost != null && Ip == vpnHost.Ip &&
+ return Ip == vpnHost.Ip &&
(Label == vpnHost.Label || (string.IsNullOrEmpty(Label) && string.IsNullOrEmpty(vpnHost.Label)));
+
}
public override int GetHashCode()
diff --git a/src/ProtonVPN.Crypto/X25519KeyGenerator.cs b/src/ProtonVPN.Crypto/X25519KeyGenerator.cs
index 4b834230c..41eb851cf 100644
--- a/src/ProtonVPN.Crypto/X25519KeyGenerator.cs
+++ b/src/ProtonVPN.Crypto/X25519KeyGenerator.cs
@@ -31,7 +31,7 @@ public SecretKey FromEd25519SecretKey(SecretKey secretKey)
byte[] secretKeyLast32Bytes = secretKey.Bytes.Skip(secretKey.Bytes.Length - 32).Take(32).ToArray();
byte[] x25519SecretKey;
- using (SHA512 shaM = new SHA512Managed())
+ using (SHA512 shaM = SHA512.Create())
{
x25519SecretKey = shaM.ComputeHash(secretKeyLast32Bytes);
}
diff --git a/src/ProtonVPN.Translations/ProtonVPN.Translations.csproj b/src/ProtonVPN.Translations/ProtonVPN.Translations.csproj
index 168cd7b6f..6582d4816 100644
--- a/src/ProtonVPN.Translations/ProtonVPN.Translations.csproj
+++ b/src/ProtonVPN.Translations/ProtonVPN.Translations.csproj
@@ -15,7 +15,8 @@
-
+
+
all
diff --git a/src/ProtonVPN.Translations/TranslationSource.cs b/src/ProtonVPN.Translations/TranslationSource.cs
index 27758512d..3cce669d9 100644
--- a/src/ProtonVPN.Translations/TranslationSource.cs
+++ b/src/ProtonVPN.Translations/TranslationSource.cs
@@ -25,15 +25,16 @@
using System.Windows;
using System.Windows.Data;
using System.Windows.Markup;
-using Huyn.PluralNet;
+using ProtonVPN.Translations.Properties;
+using ReswPlusLib;
namespace ProtonVPN.Translations
{
public class TranslationSource : INotifyPropertyChanged
{
- public static TranslationSource Instance { get; } = new TranslationSource();
+ public static TranslationSource Instance { get; } = new();
- public string this[string key] => Properties.Resources.ResourceManager.GetString(GetStringName(key), _currentCulture);
+ public string this[string key] => Resources.ResourceManager.GetString(GetStringName(key), _currentCulture);
private CultureInfo _currentCulture = CultureInfo.CurrentUICulture;
@@ -66,7 +67,7 @@ public string GetPlural(string key, decimal number)
ResetPluralProvider();
}
- return Properties.Resources.ResourceManager.GetPlural(GetStringName(key), number);
+ return Resources.ResourceManager.GetPlural(GetStringName(key), Convert.ToDouble(number));
}
private void ResetPluralProvider()
diff --git a/src/Update/ProtonVPN.Update/Files/Validatable/FileCheckSum.cs b/src/Update/ProtonVPN.Update/Files/Validatable/FileCheckSum.cs
index eb1bf0f30..5a82a6a6c 100644
--- a/src/Update/ProtonVPN.Update/Files/Validatable/FileCheckSum.cs
+++ b/src/Update/ProtonVPN.Update/Files/Validatable/FileCheckSum.cs
@@ -38,8 +38,8 @@ public FileCheckSum(string filename)
public async Task Value()
{
- using var stream = new FileStream(_filename, FileMode.Open, FileAccess.Read, FileShare.Read, Config.FILE_BUFFER_SIZE, true);
- using var sha512 = new SHA512CryptoServiceProvider();
+ using FileStream stream = new(_filename, FileMode.Open, FileAccess.Read, FileShare.Read, Config.FILE_BUFFER_SIZE, true);
+ using SHA512 sha512 = SHA512.Create();
byte[] buffer = new byte[Config.FILE_BUFFER_SIZE];
int bytesRead;
@@ -50,7 +50,12 @@ public async Task Value()
}
sha512.TransformFinalBlock(buffer, 0, 0);
- return BitConverter.ToString(sha512.Hash).Replace("-", "").ToLowerInvariant();
+ if (sha512.Hash != null)
+ {
+ return BitConverter.ToString(sha512.Hash).Replace("-", "").ToLowerInvariant();
+ }
+
+ return string.Empty;
}
}
}
\ No newline at end of file