Skip to content

Commit

Permalink
Merge branch 'release/1.26.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
mindaugasveblauskas committed Mar 24, 2022
2 parents 4f8f4b9 + 41e0264 commit 765a8bf
Show file tree
Hide file tree
Showing 1,804 changed files with 7,727 additions and 2,876 deletions.
13 changes: 12 additions & 1 deletion .gitlab-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ stages:
- test
- sign
- build-installer
- publish-to-slack
- ui-test
- installation-test
- mirror
Expand Down Expand Up @@ -202,4 +203,14 @@ create-release:
- develop
script:
- apt-get update && apt-get install -y python3 python3-pip git
- python3 ci/release.py
- python3 ci/release.py

send-slack-notification:
tags:
- windows
only:
refs:
- develop
stage: publish-to-slack
script:
- python ci\main.py send-slack-notification
8 changes: 2 additions & 6 deletions COPYING.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
## Copying

Copyright (c) 2020 Proton Technologies AG
Copyright (c) 2022 Proton Technologies AG

ProtonVPN is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
Expand Down Expand Up @@ -52,8 +52,6 @@ ProtonVPN Windows app includes the following 3rd party software:
| [The MIT License](https://github.com/davideicardi/DynamicExpresso/blob/master/LICENSE).
* [FontAwesome.WPF](https://github.com/charri/Font-Awesome-WPF/) by charri
| [The MIT License](https://github.com/charri/Font-Awesome-WPF/blob/master/LICENSE).
* [Gu.Wpf.Adorners](https://github.com/GuOrg/Gu.Wpf.Adorners) by Johan Larsson
| [The MIT License](https://github.com/GuOrg/Gu.Wpf.Adorners/blob/master/LICENSE).
* [MvvmLightLibsStd10](http://www.mvvmlight.net/) by Laurent Bugnion (GalaSoft)
| [The MIT License](https://github.com/lbugnion/mvvmlight/blob/master/LICENSE).
* [Newtonsoft.Json](https://www.newtonsoft.com/json) by James Newton-King
Expand Down Expand Up @@ -85,6 +83,4 @@ ProtonVPN Windows app includes the following 3rd party software:
* [System.Buffers](https://dot.net) by Microsoft
| [The MIT License](https://github.com/dotnet/corefx/blob/master/LICENSE.TXT).
* [System.Collections.Immutable](https://dot.net) by Microsoft
| [The MIT License](https://github.com/dotnet/corefx/blob/master/LICENSE.TXT).
* [WpfScreenHelper](https://github.com/micdenny/WpfScreenHelper) by Michael Denny
| [The MIT License](https://github.com/micdenny/WpfScreenHelper/blob/master/LICENSE).
| [The MIT License](https://github.com/dotnet/corefx/blob/master/LICENSE.TXT).
2 changes: 2 additions & 0 deletions ProtonVpn.sln.DotSettings
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@
<s:Boolean x:Key="/Default/UserDictionary/Words/=Endianness/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=iface/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Launchable/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Malware/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Netsh/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Netshield/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Onboarding/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Pingable/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Prelink/@EntryIndexedValue">True</s:Boolean>
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# ProtonVPN Windows app

Copyright (c) 2020 Proton Technologies AG
Copyright (c) 2022 Proton Technologies AG

This repository holds the ProtonVPN Windows app.
For a detailed build information see [BUILD](BUILD.md).
Expand Down
11 changes: 3 additions & 8 deletions Setup/ProtonVPN.aip
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
<ROW Property="Manufacturer" Value="Proton Technologies AG"/>
<ROW Property="MsiLogging" MultiBuildValue="DefaultBuild:vp"/>
<ROW Property="PENDING_REBOOT" Value="0"/>
<ROW Property="ProductCode" Value="1031:{57C4E518-CE13-4F6B-BA1C-647667ECACFE} 1033:{57C4E518-CE13-4F6B-BA1C-647667ECACFE} 1036:{57C4E518-CE13-4F6B-BA1C-647667ECACFE} 1040:{57C4E518-CE13-4F6B-BA1C-647667ECACFE} 1043:{57C4E518-CE13-4F6B-BA1C-647667ECACFE} 1045:{57C4E518-CE13-4F6B-BA1C-647667ECACFE} 1046:{57C4E518-CE13-4F6B-BA1C-647667ECACFE} 1049:{57C4E518-CE13-4F6B-BA1C-647667ECACFE} 1065:{57C4E518-CE13-4F6B-BA1C-647667ECACFE} 2070:{57C4E518-CE13-4F6B-BA1C-647667ECACFE} 3082:{57C4E518-CE13-4F6B-BA1C-647667ECACFE} " Type="16"/>
<ROW Property="ProductCode" Value="1031:{57C4E518-CE13-4F6B-BA1C-647667ECACFE} 1033:{57C4E518-CE13-4F6B-BA1C-647667ECACFE} 1036:{57C4E518-CE13-4F6B-BA1C-647667ECACFE} 1040:{57C4E518-CE13-4F6B-BA1C-647667ECACFE} 1043:{57C4E518-CE13-4F6B-BA1C-647667ECACFE} 1045:{57C4E518-CE13-4F6B-BA1C-647667ECACFE} 1046:{57C4E518-CE13-4F6B-BA1C-647667ECACFE} 1049:{57C4E518-CE13-4F6B-BA1C-647667ECACFE} 1058:{57C4E518-CE13-4F6B-BA1C-647667ECACFE} 1065:{57C4E518-CE13-4F6B-BA1C-647667ECACFE} 2070:{57C4E518-CE13-4F6B-BA1C-647667ECACFE} 3082:{57C4E518-CE13-4F6B-BA1C-647667ECACFE} " Type="16"/>
<ROW Property="ProductLanguage" Value="1033"/>
<ROW Property="ProductName" Value="ProtonVPN"/>
<ROW Property="ProductVersion" Value="1.24.1" Type="32"/>
Expand Down Expand Up @@ -105,7 +105,6 @@
<ROW Component="GalaSoft.MvvmLight.dll" ComponentId="{50FA9CA8-4DD4-4068-A0D8-D2C1D9D42947}" Directory_="APPDIR" Attributes="0" KeyPath="GalaSoft.MvvmLight.dll"/>
<ROW Component="GoSrp.dll" ComponentId="{3DB767E8-ACF9-459F-A509-F57E76FBA633}" Directory_="x64_Dir" Attributes="256" KeyPath="GoSrp.dll"/>
<ROW Component="GoSrp.dll_1" ComponentId="{89CC2AA9-0000-4E4B-9D5A-43ACC1B1D1E3}" Directory_="x86_Dir" Attributes="0" KeyPath="GoSrp.dll_1"/>
<ROW Component="Gu.Wpf.Adorners.dll" ComponentId="{01DC8E24-C053-41CC-A726-5F4729DE78DD}" Directory_="APPDIR" Attributes="0" KeyPath="Gu.Wpf.Adorners.dll"/>
<ROW Component="GuestHoleServers.json" ComponentId="{C5ACA4D0-1647-4D3A-B9CD-9FE054A81588}" Directory_="ProtonVPN_1_Dir" Attributes="0" KeyPath="GuestHoleServers.json" Type="0"/>
<ROW Component="LocalAgent.dll" ComponentId="{25183BB4-5B07-43F9-8BEB-D58230BAEB78}" Directory_="bit_Dir" Attributes="0" KeyPath="LocalAgent.dll"/>
<ROW Component="LocalAgent.dll_1" ComponentId="{73CCCE7C-D519-40C3-8AAA-FB879005DFA4}" Directory_="bit_1_Dir" Attributes="256" KeyPath="LocalAgent.dll_1"/>
Expand Down Expand Up @@ -177,7 +176,6 @@
<ROW Component="TapInstaller.dll" ComponentId="{6C0E1AC7-D393-43D7-8842-549A396829EB}" Directory_="APPDIR" Attributes="0" KeyPath="TapInstaller.dll"/>
<ROW Component="WebView2Loader.dll_1" ComponentId="{2EA095EA-C501-4A0B-B50D-FFF6383F6077}" Directory_="native_1_Dir" Attributes="256" KeyPath="WebView2Loader.dll_1"/>
<ROW Component="WebView2Loader.dll_2" ComponentId="{7B52FD4C-77FC-441E-830E-31363BA5A2A6}" Directory_="native_2_Dir" Attributes="0" KeyPath="WebView2Loader.dll_2"/>
<ROW Component="WpfScreenHelper.dll" ComponentId="{D9BC0004-B4FA-4D5B-B94A-1F8525D2E2FA}" Directory_="APPDIR" Attributes="0" KeyPath="WpfScreenHelper.dll"/>
<ROW Component="config.ovpn" ComponentId="{0B387BF9-0755-4C70-81A5-48180795855C}" Directory_="Binaries_Dir" Attributes="0" KeyPath="config.ovpn" Type="0"/>
<ROW Component="libcrypto1_1.dll" ComponentId="{F5111CFC-D038-4A4A-927B-F4FA1D0463C9}" Directory_="bit_Dir" Attributes="0" KeyPath="libcrypto1_1.dll"/>
<ROW Component="libcrypto1_1x64.dll" ComponentId="{9BA46CFB-D246-4182-9AFB-3CA5D2A29D53}" Directory_="bit_1_Dir" Attributes="256" KeyPath="libcrypto1_1x64.dll"/>
Expand Down Expand Up @@ -296,8 +294,6 @@
<ROW File="wireguard.dll" Component_="wireguard.dll" FileName="WIREGU~1.DLL|wireguard.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\src\ProtonVPN.Vpn\Resources\64-bit\wireguard.dll" SelfReg="false"/>
<ROW File="wireguard.dll_1" Component_="wireguard.dll_1" FileName="WIREGU~1.DLL|wireguard.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\src\ProtonVPN.Vpn\Resources\32-bit\wireguard.dll" SelfReg="false"/>
<ROW File="ProtonVPN.WireGuardDriver.dll" Component_="ProtonVPN.WireGuardDriver.dll" FileName="PROTO~13.DLL|ProtonVPN.WireGuardDriver.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\src\bin\ProtonVPN.WireGuardDriver.dll" SelfReg="false"/>
<ROW File="Gu.Wpf.Adorners.dll" Component_="Gu.Wpf.Adorners.dll" FileName="GUWPFA~1.DLL|Gu.Wpf.Adorners.dll" Attributes="0" SourcePath="..\src\bin\Gu.Wpf.Adorners.dll" SelfReg="false"/>
<ROW File="WpfScreenHelper.dll" Component_="WpfScreenHelper.dll" FileName="WPFSCR~1.DLL|WpfScreenHelper.dll" Attributes="0" SourcePath="..\src\bin\WpfScreenHelper.dll" SelfReg="false"/>
<ROW File="DeviceId.Windows.Wmi.dll" Component_="DeviceId.Windows.Wmi.dll" FileName="DEVICE~1.DLL|DeviceId.Windows.Wmi.dll" Attributes="0" SourcePath="..\src\bin\DeviceId.Windows.Wmi.dll" SelfReg="false"/>
<ROW File="DeviceId.Windows.dll" Component_="DeviceId.Windows.dll" FileName="DEVICE~2.DLL|DeviceId.Windows.dll" Attributes="0" SourcePath="..\src\bin\DeviceId.Windows.dll" SelfReg="false"/>
<ROW File="Microsoft.Bcl.AsyncInterfaces.dll" Component_="Microsoft.Bcl.AsyncInterfaces.dll" FileName="MICROS~5.DLL|Microsoft.Bcl.AsyncInterfaces.dll" Attributes="0" SourcePath="..\src\bin\Microsoft.Bcl.AsyncInterfaces.dll" SelfReg="false"/>
Expand All @@ -321,7 +317,7 @@
<ROW Action="AI_DetectSoftware" Sequence="101"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.BuildComponent">
<ROW BuildKey="DefaultBuild" BuildName="DefaultBuild" BuildOrder="1" BuildType="1" PackageFolder="ProtonVPN-SetupFiles" PackageFileName="ProtonVPN_win_v[|ProductVersion]" Languages="en;de;fr;fa;nl;it;pl;pt;ru;es;pt_BR" LangOpt="1" InstallationType="2" CabsLocation="1" UseLzma="true" LzmaMethod="2" LzmaCompressionLevel="2" PackageType="1" FilesInsideExe="true" ExeIconPath="images\protonvpn.ico" ExeMetadata="FileDescription:[|ProductName] Installer [|CommitHash]" ExtUI="true" Options="4" LangsDialog="true" UseLargeSchema="true" Unicode="true" ExeName="ProtonVPN_win_v[|ProductVersion]" UACExecutionLevel="2"/>
<ROW BuildKey="DefaultBuild" BuildName="DefaultBuild" BuildOrder="1" BuildType="1" PackageFolder="ProtonVPN-SetupFiles" PackageFileName="ProtonVPN_win_v[|ProductVersion]" Languages="en;de;fr;fa;nl;it;pl;pt;ru;es;pt_BR;uk" LangOpt="1" InstallationType="2" CabsLocation="1" UseLzma="true" LzmaMethod="2" LzmaCompressionLevel="2" PackageType="1" FilesInsideExe="true" ExeIconPath="images\protonvpn.ico" ExeMetadata="FileDescription:[|ProductName] Installer [|CommitHash]" ExtUI="true" Options="4" LangsDialog="true" UseLargeSchema="true" Unicode="true" ExeName="ProtonVPN_win_v[|ProductVersion]" UACExecutionLevel="2"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.CacheComponent">
<ATTRIBUTE name="Enable" value="false"/>
Expand All @@ -339,6 +335,7 @@
<ROW Path="&lt;AI_DICTS&gt;ui_ru.ail"/>
<ROW Path="&lt;AI_DICTS&gt;ui_es.ail"/>
<ROW Path="&lt;AI_DICTS&gt;ui_pt_BR.ail"/>
<ROW Path="&lt;AI_DICTS&gt;ui_uk.ail"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.DigCertStoreComponent">
<ROW TimeStampUrl="http://timestamp.digicert.com" SignerDescription="[|ProductName]" SignOptions="7" SignTool="0" UseSha256="1" Thumbprint="44054e4d961e4efd5d3d90dec1444b26373d4a08 Subject: Proton Technologies AG&#10;Issuer: GlobalSign Extended Validation CodeSigning CA - SHA256 - G3&#10;Valid from 10/29/2020 to 10/30/2023&#10;User\MY"/>
Expand Down Expand Up @@ -681,8 +678,6 @@
<ROW Feature_="MainFeature" Component_="wireguard.dll"/>
<ROW Feature_="MainFeature" Component_="wireguard.dll_1"/>
<ROW Feature_="MainFeature" Component_="ProtonVPN.WireGuardDriver.dll"/>
<ROW Feature_="MainFeature" Component_="Gu.Wpf.Adorners.dll"/>
<ROW Feature_="MainFeature" Component_="WpfScreenHelper.dll"/>
<ROW Feature_="MainFeature" Component_="DeviceId.Windows.Wmi.dll"/>
<ROW Feature_="MainFeature" Component_="DeviceId.Windows.dll"/>
<ROW Feature_="MainFeature" Component_="Microsoft.Bcl.AsyncInterfaces.dll"/>
Expand Down
2 changes: 1 addition & 1 deletion VisualStudioItemTemplates/CSharp/Code/1033/Class/Class.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2021 Proton Technologies AG
* Copyright (c) 2022 Proton Technologies AG
*
* This file is part of ProtonVPN.
*
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2021 Proton Technologies AG
* Copyright (c) 2022 Proton Technologies AG
*
* This file is part of ProtonVPN.
*
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2021 Proton Technologies AG
* Copyright (c) 2022 Proton Technologies AG
*
* This file is part of ProtonVPN.
*
Expand Down
30 changes: 27 additions & 3 deletions ci/main.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import sys
import re
import os
import argparse
import win32api
import localization
Expand All @@ -9,8 +10,21 @@
import installer
import ssh
import guest_hole_server_loader
import slack
import hashlib
from pathlib import Path

def get_sha256(file_path):
sha256_hash = hashlib.sha256()
with open(file_path, "rb") as f:
for byte_block in iter(lambda: f.read(4096), b""):
sha256_hash.update(byte_block)
return sha256_hash.hexdigest()

def print_sha256(file_path):
sha256 = get_sha256(file_path)
print(os.path.basename(file_path) + ' SHA256: ' + sha256)

parser = argparse.ArgumentParser(description='ProtonVPN CI')
subparsers = parser.add_subparsers(help='sub-command help', dest='command')

Expand All @@ -37,6 +51,7 @@
custom_parser.add_argument('key', type=str, help='Private ssh key as a string')

subparsers.add_parser('update-gh-list')
subparsers.add_parser('send-slack-notification')

if len(sys.argv) < 2:
parser.print_usage()
Expand Down Expand Up @@ -71,16 +86,21 @@

print('Building app installer')
err = installer.build(semVersion, args.hash, 'Setup/ProtonVPN.aip', params)
print_sha256('.\Setup\ProtonVPN-SetupFiles\ProtonVPN_win_v{semVersion}.exe'.format(semVersion=semVersion))
sys.exit(err)

elif args.command == 'tap-installer':
print('Building tap installer')
err = installer.build('1.1.3', '', 'Setup/ProtonVPNTap.aip')
version = '1.1.3'
err = installer.build(version, '', 'Setup/ProtonVPNTap.aip')
print_sha256('.\Setup\ProtonVPNTap-SetupFiles\ProtonVPNTap_{version}.exe'.format(version=version))
sys.exit(err)

elif args.command == 'tun-installer':
print('Building tun installer')
err = installer.build('0.13.0', '', 'Setup/ProtonVPNTun.aip')
version = '0.13.0'
err = installer.build(version, '', 'Setup/ProtonVPNTun.aip')
print_sha256('.\Setup\ProtonVPNTun-SetupFiles\ProtonVPNTun_{version}.exe'.format(version=version))
sys.exit(err)

elif args.command == 'add-commit-hash':
Expand All @@ -98,4 +118,8 @@

elif args.command == 'update-gh-list':
print('Executing guest hole server loader')
guest_hole_server_loader.load()
guest_hole_server_loader.load()

elif args.command == 'send-slack-notification':
print('Sending installer file to slack')
slack.send()
23 changes: 23 additions & 0 deletions ci/slack.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import logging
import os
import glob
from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError

def send():
client = WebClient(token=os.environ.get("SLACK_BOT_TOKEN"))
logger = logging.getLogger(__name__)
files = glob.glob("./Setup/ProtonVPN-SetupFiles/*.exe")

if len(files) > 0:
installer_path = files[0]
try:
result = client.files_upload(
channels=os.environ.get("SLACK_CHANNEL_ID"),
initial_comment=os.environ.get("CI_COMMIT_MESSAGE"),
file=installer_path,
)
logger.info(result)

except SlackApiError as e:
logger.error("Error uploading file: {}".format(e))
6 changes: 3 additions & 3 deletions src/GlobalAssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("ProtonVPN")]
[assembly: AssemblyCopyright("Copyright © 2021 Proton Technologies AG")]
[assembly: AssemblyCopyright("Copyright © 2021 Proton Technologies AG")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

[assembly: AssemblyVersion("1.25.2.0")]
[assembly: AssemblyFileVersion("1.25.2.0")]
[assembly: AssemblyVersion("1.26.0.0")]
[assembly: AssemblyFileVersion("1.26.0.0")]
[assembly: ComVisible(false)]
[assembly: AssemblyInformationalVersion("$AssemblyVersion")]
2 changes: 1 addition & 1 deletion src/ProtonVPN.App/About/AboutModalView.xaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<!--
Copyright (c) 2020 Proton Technologies AG
Copyright (c) 2022 Proton Technologies AG
This file is part of ProtonVPN.
Expand Down
2 changes: 1 addition & 1 deletion src/ProtonVPN.App/About/AboutModalView.xaml.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2020 Proton Technologies AG
* Copyright (c) 2022 Proton Technologies AG
*
* This file is part of ProtonVPN.
*
Expand Down
2 changes: 1 addition & 1 deletion src/ProtonVPN.App/About/AboutModalViewModel.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2020 Proton Technologies AG
* Copyright (c) 2022 Proton Technologies AG
*
* This file is part of ProtonVPN.
*
Expand Down
2 changes: 1 addition & 1 deletion src/ProtonVPN.App/About/ReleaseEqualityComparer.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2020 Proton Technologies AG
* Copyright (c) 2022 Proton Technologies AG
*
* This file is part of ProtonVPN.
*
Expand Down
2 changes: 1 addition & 1 deletion src/ProtonVPN.App/About/Style.xaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<!--
Copyright (c) 2020 Proton Technologies AG
Copyright (c) 2022 Proton Technologies AG
This file is part of ProtonVPN.
Expand Down
2 changes: 1 addition & 1 deletion src/ProtonVPN.App/About/UpdateViewModel.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2021 Proton Technologies AG
* Copyright (c) 2022 Proton Technologies AG
*
* This file is part of ProtonVPN.
*
Expand Down
2 changes: 1 addition & 1 deletion src/ProtonVPN.App/Account/AccountModalView.xaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<!--
Copyright (c) 2020 Proton Technologies AG
Copyright (c) 2022 Proton Technologies AG
This file is part of ProtonVPN.
Expand Down
2 changes: 1 addition & 1 deletion src/ProtonVPN.App/Account/AccountModalView.xaml.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2020 Proton Technologies AG
* Copyright (c) 2022 Proton Technologies AG
*
* This file is part of ProtonVPN.
*
Expand Down
2 changes: 1 addition & 1 deletion src/ProtonVPN.App/Account/AccountModalViewModel.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2020 Proton Technologies AG
* Copyright (c) 2022 Proton Technologies AG
*
* This file is part of ProtonVPN.
*
Expand Down
28 changes: 28 additions & 0 deletions src/ProtonVPN.App/Account/IVpnInfoUpdater.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/*
* Copyright (c) 2022 Proton Technologies 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 <https://www.gnu.org/licenses/>.
*/

using System.Threading.Tasks;

namespace ProtonVPN.Account
{
public interface IVpnInfoUpdater
{
Task Update();
}
}
Loading

0 comments on commit 765a8bf

Please sign in to comment.