/*
* Copyright (c) 2025 Proton AG
*
* This file is part of ProtonVPN.
*
* ProtonVPN is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* ProtonVPN is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with ProtonVPN. If not, see .
*/
using ProtonVPN.Client.Logic.Auth.Contracts.Models;
using ProtonVPN.Client.Logic.Users.Contracts.Messages;
using ProtonVPN.Client.Settings.Contracts.Enums;
using ProtonVPN.Client.Settings.Contracts.Models;
using ProtonVPN.Common.Core.Dns;
using ProtonVPN.Common.Core.Networking;
namespace ProtonVPN.Client.Settings.Contracts;
public interface IUserSettings
{
string? Username { get; set; }
string? UserDisplayName { get; set; }
string? UserEmail { get; set; }
DateTimeOffset? UserCreationDateUtc { get; set; }
string Theme { get; set; }
int WindowWidth { get; set; }
int WindowHeight { get; set; }
int? WindowXPosition { get; set; }
int? WindowYPosition { get; set; }
bool IsWindowMaximized { get; set; }
bool IsNavigationPaneOpened { get; set; }
int SidebarWidth { get; set; }
bool IsRecentsPaneOpened { get; set; }
bool IsConnectionDetailsPaneOpened { get; set; }
bool AreProtonProtocolsEnabled { get; set; }
VpnProtocol VpnProtocol { get; set; }
OpenVpnAdapter OpenVpnAdapter { get; set; }
VpnPlan VpnPlan { get; set; }
int MaxDevicesAllowed { get; set; }
ConnectionAsymmetricKeyPair? ConnectionKeyPair { get; set; }
ConnectionCertificate? ConnectionCertificate { get; set; }
NatType NatType { get; set; }
bool IsVpnAcceleratorEnabled { get; set; }
bool IsLocalAreaNetworkAccessEnabled { get; set; }
bool IsLocalDnsEnabled { get; set; }
bool IsNotificationEnabled { get; set; }
bool IsShareStatisticsEnabled { get; set; }
bool IsIpv6LeakProtectionEnabled { get; set; }
bool IsIpv6Enabled { get; set; }
bool IsCustomDnsServersEnabled { get; set; }
List CustomDnsServersList { get; set; }
bool IsAutoConnectEnabled { get; set; }
bool IsNetShieldEnabled { get; set; }
NetShieldMode NetShieldMode { get; set; }
bool IsPortForwardingEnabled { get; set; }
bool IsPortForwardingNotificationEnabled { get; set; }
bool IsSplitTunnelingEnabled { get; set; }
bool IsSmartReconnectEnabled { get; set; }
bool IsUserSettingsMigrationDone { get; set; }
SplitTunnelingMode SplitTunnelingMode { get; set; }
List SplitTunnelingStandardAppsList { get; set; }
List SplitTunnelingInverseAppsList { get; set; }
List SplitTunnelingStandardIpAddressesList { get; set; }
List SplitTunnelingInverseIpAddressesList { get; set; }
List Ipv6Fragments { get; set; }
string? LastLogicalsStatusId { get; set; }
ChangeServerAttempts ChangeServerAttempts { get; set; }
DefaultConnection DefaultConnection { get; set; }
bool WasWelcomeOverlayDisplayed { get; set; }
bool WasWelcomePlusOverlayDisplayed { get; set; }
bool WasWelcomeUnlimitedOverlayDisplayed { get; set; }
bool WasWelcomeB2BOverlayDisplayed { get; set; }
DateTimeOffset LogicalsLastModifiedDate { get; set; }
bool IsP2PInfoBannerDismissed { get; set; }
bool IsSecureCoreInfoBannerDismissed { get; set; }
bool IsTorInfoBannerDismissed { get; set; }
bool IsGatewayInfoBannerDismissed { get; set; }
int LastSeenWhatsNewOverlayVersion { get; set; }
DateTimeOffset? LastSettingsHeartbeatTimeUtc { get; set; }
DateTimeOffset LastP2PWarningNotificationUtcDate { get; set; }
DateTimeOffset LastStreamingWarningNotificationUtcDate { get; set; }
List ExcludedLocationsList { get; set; }
bool WasExcludedLocationsSmartDiscoveryPromptDisplayed { get; set; }
bool WasExcludedLocationsTeachingTipDisplayed { get; set; }
[Obsolete("Use IsLocalDnsEnabled instead. DnsBlockMode is maintained in order to migrate the value for existing users.")]
DnsBlockMode DnsBlockMode { get; set; }
}