summaryrefslogtreecommitdiffhomepage
path: root/windows
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2020-11-10 13:43:10 +0100
committerDavid Lönnhager <david.l@mullvad.net>2020-11-19 01:35:21 +0100
commit461dd7f6fd4909e598dfd190f846d1fcc68d6f6b (patch)
tree3f56fda7fb64bf0ddfbc55007619697e3796a269 /windows
parent557484f7c7160fcbdf75c4f989c2108110245d79 (diff)
downloadmullvadvpn-461dd7f6fd4909e598dfd190f846d1fcc68d6f6b.tar.xz
mullvadvpn-461dd7f6fd4909e598dfd190f846d1fcc68d6f6b.zip
Bundle API address cache with the app
Diffstat (limited to 'windows')
-rw-r--r--windows/nsis-plugins/src/cleanup/cleaningops.cpp14
-rw-r--r--windows/nsis-plugins/src/cleanup/cleaningops.h1
-rw-r--r--windows/nsis-plugins/src/cleanup/cleanup.cpp31
-rw-r--r--windows/nsis-plugins/src/cleanup/cleanup.def1
4 files changed, 47 insertions, 0 deletions
diff --git a/windows/nsis-plugins/src/cleanup/cleaningops.cpp b/windows/nsis-plugins/src/cleanup/cleaningops.cpp
index 8653bb50a9..475c78d8b7 100644
--- a/windows/nsis-plugins/src/cleanup/cleaningops.cpp
+++ b/windows/nsis-plugins/src/cleanup/cleaningops.cpp
@@ -331,4 +331,18 @@ void RemoveRelayCacheServiceUser()
std::filesystem::remove(cacheFile);
}
+void RemoveApiAddressCacheServiceUser()
+{
+ const auto localAppData = GetSystemUserLocalAppData();
+ const auto mullvadAppData = std::filesystem::path(localAppData).append(L"Mullvad VPN");
+
+ common::fs::ScopedNativeFileSystem nativeFileSystem;
+
+ common::security::AddAdminToObjectDacl(mullvadAppData, SE_FILE_OBJECT);
+
+ const auto cacheFile = std::filesystem::path(mullvadAppData).append(L"api-ip-address.txt");
+
+ std::filesystem::remove(cacheFile);
+}
+
}
diff --git a/windows/nsis-plugins/src/cleanup/cleaningops.h b/windows/nsis-plugins/src/cleanup/cleaningops.h
index 40ce97e81e..057eb305b8 100644
--- a/windows/nsis-plugins/src/cleanup/cleaningops.h
+++ b/windows/nsis-plugins/src/cleanup/cleaningops.h
@@ -12,5 +12,6 @@ void RemoveSettingsServiceUser();
// Remove only the relay cache, leaving other cache files untouched.
// This is useful when updating the app.
void RemoveRelayCacheServiceUser();
+void RemoveApiAddressCacheServiceUser();
}
diff --git a/windows/nsis-plugins/src/cleanup/cleanup.cpp b/windows/nsis-plugins/src/cleanup/cleanup.cpp
index faef07c2f0..528efb2f7a 100644
--- a/windows/nsis-plugins/src/cleanup/cleanup.cpp
+++ b/windows/nsis-plugins/src/cleanup/cleanup.cpp
@@ -100,3 +100,34 @@ void __declspec(dllexport) NSISCALL RemoveRelayCache
pushint(NsisStatus::GENERAL_ERROR);
}
}
+
+void __declspec(dllexport) NSISCALL RemoveApiAddressCache
+(
+ HWND hwndParent,
+ int string_size,
+ LPTSTR variables,
+ stack_t **stacktop,
+ extra_parameters *extra,
+ ...
+)
+{
+ EXDLL_INIT();
+
+ try
+ {
+ cleaningops::RemoveApiAddressCacheServiceUser();
+
+ pushstring(L"");
+ pushint(NsisStatus::SUCCESS);
+ }
+ catch (const std::exception &err)
+ {
+ pushstring(common::string::ToWide(err.what()).c_str());
+ pushint(NsisStatus::GENERAL_ERROR);
+ }
+ catch (...)
+ {
+ pushstring(L"Unspecified error");
+ pushint(NsisStatus::GENERAL_ERROR);
+ }
+}
diff --git a/windows/nsis-plugins/src/cleanup/cleanup.def b/windows/nsis-plugins/src/cleanup/cleanup.def
index 8752772b8d..779e620691 100644
--- a/windows/nsis-plugins/src/cleanup/cleanup.def
+++ b/windows/nsis-plugins/src/cleanup/cleanup.def
@@ -5,3 +5,4 @@ EXPORTS
RemoveLogsAndCache
RemoveSettings
RemoveRelayCache
+RemoveApiAddressCache