());
- }
- else
- {
- return std::nullopt;
- }
- }
-
template<>
std::nullopt_t GetValue() const
{
return std::nullopt;
}
- template<>
- std::nullopt_t GetValueRef() const
- {
- return std::nullopt;
- }
-
PolicyState GetState(TogglePolicy::Policy policy) const;
// Checks whether a policy is enabled, using an appropriate default when not configured.
// Should not be used when not configured means something different than enabled/disabled.
bool IsEnabled(TogglePolicy::Policy policy) const;
+ // Re-reads all policy values from the registry.
+ void Reload();
+
#ifndef AICLI_DISABLE_TEST_HOOKS
protected:
static void OverrideInstance(GroupPolicy* gp);
@@ -233,8 +217,13 @@ namespace AppInstaller::Settings
#else
private:
#endif
+ Registry::Key m_key;
+ mutable wil::srwlock m_lock;
std::map m_toggles;
ValuePoliciesMap m_values;
+
+ private:
+ PolicyState GetStateNoLock(TogglePolicy::Policy policy) const;
};
inline const GroupPolicy& GroupPolicies()
diff --git a/src/LocalhostWebServer/Startup.cs b/src/LocalhostWebServer/Startup.cs
index 48f1fffce1..d71dc1f992 100644
--- a/src/LocalhostWebServer/Startup.cs
+++ b/src/LocalhostWebServer/Startup.cs
@@ -71,7 +71,18 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
RequestPath = StaticFileRequestPath,
ContentTypeProvider = provider,
ServeUnknownFileTypes = true,
- DefaultContentType = "application/octet-stream"
+ DefaultContentType = "application/octet-stream",
+ OnPrepareResponse = ctx =>
+ {
+ // REST source information files are extensionless JSON; set the correct content type
+ // and prevent caching so that each Connect() call gets a fresh response and
+ // triggers certificate validation.
+ if (ctx.File.Name == "information")
+ {
+ ctx.Context.Response.ContentType = "application/json";
+ ctx.Context.Response.Headers.CacheControl = "no-store";
+ }
+ },
});
app.UseDirectoryBrowser(new DirectoryBrowserOptions
diff --git a/src/Microsoft.Management.Deployment.Projection/Microsoft.Management.Deployment.Projection.csproj b/src/Microsoft.Management.Deployment.Projection/Microsoft.Management.Deployment.Projection.csproj
index 536d4a09a9..6fc74dcc20 100644
--- a/src/Microsoft.Management.Deployment.Projection/Microsoft.Management.Deployment.Projection.csproj
+++ b/src/Microsoft.Management.Deployment.Projection/Microsoft.Management.Deployment.Projection.csproj
@@ -16,8 +16,30 @@
10.0.26100.0
- Microsoft.Management.Deployment;Windows.Foundation;Windows.System.ProcessorArchitecture
- Windows.Foundation.Diagnostics
+
+ Microsoft.Management.Deployment;
+ Windows.Data.Text.TextSegment;
+ Windows.Devices.Geolocation;
+ Windows.Foundation;
+ Windows.Globalization.DayOfWee;
+ Windows.Networking.Connectivity;
+ Windows.Networking.IDomainNameType;
+ Windows.Networking.DomainNameType;
+ Windows.Networking.IEndpointPair;
+ Windows.Networking.EndpointPair;
+ Windows.Networking.IHostName;
+ Windows.Networking.HostName;
+ Windows.Security.Cryptography.Certificates;
+ Windows.Storage;
+ Windows.Storage.Provider.FileUpdateStatus;
+ Windows.System.ProcessorArchitecture;
+ Windows.System.IUser;
+ Windows.System.User;
+
+
+ Windows.Foundation.Diagnostics;
+ Windows.Storage.Provider;
+
diff --git a/src/Microsoft.Management.Deployment/Helpers.cpp b/src/Microsoft.Management.Deployment/Helpers.cpp
index 5975d5c268..8fa1462b60 100644
--- a/src/Microsoft.Management.Deployment/Helpers.cpp
+++ b/src/Microsoft.Management.Deployment/Helpers.cpp
@@ -59,6 +59,12 @@ namespace winrt::Microsoft::Management::Deployment::implementation
}
}
+ bool IsInProcCaller()
+ {
+ auto [hr, callerProcessId] = GetCallerProcessId();
+ return SUCCEEDED(hr) && callerProcessId == GetCurrentProcessId();
+ }
+
std::wstring_view GetStringForCapability(Capability capability)
{
switch (capability)
diff --git a/src/Microsoft.Management.Deployment/Helpers.h b/src/Microsoft.Management.Deployment/Helpers.h
index 384dd3ad58..2df39ea7cc 100644
--- a/src/Microsoft.Management.Deployment/Helpers.h
+++ b/src/Microsoft.Management.Deployment/Helpers.h
@@ -17,6 +17,7 @@ namespace winrt::Microsoft::Management::Deployment::implementation
HRESULT EnsureProcessHasCapability(Capability requiredCapability, DWORD callerProcessId);
HRESULT EnsureComCallerHasCapability(Capability requiredCapability);
std::pair GetCallerProcessId();
+ bool IsInProcCaller();
std::wstring TryGetCallerProcessInfo(DWORD callerProcessId);
std::string GetCallerName();
bool IsBackgroundProcessForPolicy();
diff --git a/src/Microsoft.Management.Deployment/Microsoft.Management.Deployment.vcxproj b/src/Microsoft.Management.Deployment/Microsoft.Management.Deployment.vcxproj
index 86dbab6088..57899d710d 100644
--- a/src/Microsoft.Management.Deployment/Microsoft.Management.Deployment.vcxproj
+++ b/src/Microsoft.Management.Deployment/Microsoft.Management.Deployment.vcxproj
@@ -182,6 +182,7 @@
+
@@ -234,6 +235,7 @@
+
diff --git a/src/Microsoft.Management.Deployment/Microsoft.Management.Deployment.vcxproj.filters b/src/Microsoft.Management.Deployment/Microsoft.Management.Deployment.vcxproj.filters
index eef8b274ad..6c00ab8c5d 100644
--- a/src/Microsoft.Management.Deployment/Microsoft.Management.Deployment.vcxproj.filters
+++ b/src/Microsoft.Management.Deployment/Microsoft.Management.Deployment.vcxproj.filters
@@ -20,6 +20,7 @@
+
@@ -70,6 +71,7 @@
+
diff --git a/src/Microsoft.Management.Deployment/PackageCatalogConnectionValidationEventArgs.cpp b/src/Microsoft.Management.Deployment/PackageCatalogConnectionValidationEventArgs.cpp
new file mode 100644
index 0000000000..b0eaf3dee7
--- /dev/null
+++ b/src/Microsoft.Management.Deployment/PackageCatalogConnectionValidationEventArgs.cpp
@@ -0,0 +1,18 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+#include "pch.h"
+#include "PackageCatalogConnectionValidationEventArgs.h"
+#include "PackageCatalogConnectionValidationEventArgs.g.cpp"
+
+namespace winrt::Microsoft::Management::Deployment::implementation
+{
+ void PackageCatalogConnectionValidationEventArgs::Initialize(winrt::Windows::Security::Cryptography::Certificates::Certificate serverCertificate)
+ {
+ m_serverCertificate = serverCertificate;
+ }
+
+ winrt::Windows::Security::Cryptography::Certificates::Certificate PackageCatalogConnectionValidationEventArgs::ServerCertificate()
+ {
+ return m_serverCertificate;
+ }
+}
diff --git a/src/Microsoft.Management.Deployment/PackageCatalogConnectionValidationEventArgs.h b/src/Microsoft.Management.Deployment/PackageCatalogConnectionValidationEventArgs.h
new file mode 100644
index 0000000000..58798b2e3d
--- /dev/null
+++ b/src/Microsoft.Management.Deployment/PackageCatalogConnectionValidationEventArgs.h
@@ -0,0 +1,23 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+#pragma once
+#include "PackageCatalogConnectionValidationEventArgs.g.h"
+
+namespace winrt::Microsoft::Management::Deployment::implementation
+{
+ struct PackageCatalogConnectionValidationEventArgs : PackageCatalogConnectionValidationEventArgsT
+ {
+ PackageCatalogConnectionValidationEventArgs() = default;
+
+#if !defined(INCLUDE_ONLY_INTERFACE_METHODS)
+ void Initialize(winrt::Windows::Security::Cryptography::Certificates::Certificate serverCertificate);
+#endif
+
+ winrt::Windows::Security::Cryptography::Certificates::Certificate ServerCertificate();
+
+#if !defined(INCLUDE_ONLY_INTERFACE_METHODS)
+ private:
+ winrt::Windows::Security::Cryptography::Certificates::Certificate m_serverCertificate{ nullptr };
+#endif
+ };
+}
diff --git a/src/Microsoft.Management.Deployment/PackageCatalogReference.cpp b/src/Microsoft.Management.Deployment/PackageCatalogReference.cpp
index a790a4c8ef..12ef4f333f 100644
--- a/src/Microsoft.Management.Deployment/PackageCatalogReference.cpp
+++ b/src/Microsoft.Management.Deployment/PackageCatalogReference.cpp
@@ -6,6 +6,7 @@
#include "PackageCatalogReference.g.cpp"
#include "PackageCatalogInfo.h"
#include "PackageCatalog.h"
+#include "PackageCatalogConnectionValidationEventArgs.h"
#include "SourceAgreement.h"
#include "ConnectResult.h"
#include "AuthenticationInfo.h"
@@ -33,6 +34,40 @@ namespace winrt::Microsoft::Management::Deployment::implementation
updateResult->Initialize(status, terminationStatus);
return *updateResult;
}
+
+ // Returns true if the ConnectionValidationHandler may be set for the given source.
+ // Returns false if the BypassCertificatePinningForMicrosoftStore policy is explicitly
+ // disabled and the source is the well-known MicrosoftStore catalog.
+ bool IsConnectionValidationHandlerEnabledForSource(const ::AppInstaller::Repository::Source& source)
+ {
+ using namespace AppInstaller::Settings;
+ if (source.IsWellKnownSource(::AppInstaller::Repository::WellKnownSource::MicrosoftStore))
+ {
+ return GroupPolicies().GetState(TogglePolicy::Policy::BypassCertificatePinningForMicrosoftStore) != PolicyState::Disabled;
+ }
+
+ return true;
+ }
+
+ std::function MakeServerCertificateValidationCallback(
+ winrt::Microsoft::Management::Deployment::PackageCatalogConnectionValidationHandler const& handler)
+ {
+ if (!handler)
+ {
+ return {};
+ }
+ return [handler](PCCERT_CONTEXT certContext) -> bool
+ {
+ auto certBytes = winrt::array_view{ certContext->pbCertEncoded, certContext->pbCertEncoded + certContext->cbCertEncoded };
+ auto buffer = winrt::Windows::Security::Cryptography::CryptographicBuffer::CreateFromByteArray(certBytes);
+ winrt::Windows::Security::Cryptography::Certificates::Certificate cert{ buffer };
+ auto args = winrt::make_self>();
+ args->Initialize(cert);
+ auto handlerResult = handler(*args);
+ AICLI_LOG(Repo, Info, << "PackageCatalogConnectionValidationHandler returned: " << handlerResult);
+ return handlerResult == winrt::Microsoft::Management::Deployment::PackageCatalogConnectionValidationResult::Ok;
+ };
+ }
}
void PackageCatalogReference::Initialize(winrt::Microsoft::Management::Deployment::PackageCatalogInfo packageCatalogInfo, ::AppInstaller::Repository::Source sourceReference)
@@ -117,6 +152,11 @@ namespace winrt::Microsoft::Management::Deployment::implementation
copy.SetCaller(callerName);
copy.SetBackgroundUpdateInterval(catalog.PackageCatalogBackgroundUpdateInterval());
copy.InstalledPackageInformationOnly(catalog.InstalledPackageInformationOnly());
+ auto validationCallback = MakeServerCertificateValidationCallback(catalogImpl->m_connectionValidationHandler);
+ if (validationCallback)
+ {
+ copy.SetServerCertificateValidationCallback(std::move(validationCallback));
+ }
if (catalog.AuthenticationInfo().AuthenticationType() != winrt::Microsoft::Management::Deployment::AuthenticationType::None)
{
copy.SetAuthenticationArguments(GetAuthenticationArguments(catalog.AuthenticationArguments()));
@@ -164,6 +204,11 @@ namespace winrt::Microsoft::Management::Deployment::implementation
source.SetCaller(callerName);
source.SetBackgroundUpdateInterval(PackageCatalogBackgroundUpdateInterval());
source.InstalledPackageInformationOnly(m_installedPackageInformationOnly);
+ auto validationCallback = MakeServerCertificateValidationCallback(m_connectionValidationHandler);
+ if (validationCallback)
+ {
+ source.SetServerCertificateValidationCallback(std::move(validationCallback));
+ }
if (AuthenticationInfo().AuthenticationType() != winrt::Microsoft::Management::Deployment::AuthenticationType::None)
{
source.SetAuthenticationArguments(GetAuthenticationArguments(m_authenticationArguments));
@@ -330,4 +375,22 @@ namespace winrt::Microsoft::Management::Deployment::implementation
co_return GetRefreshPackageCatalogResult(terminationHR);
}
+
+ winrt::Microsoft::Management::Deployment::PackageCatalogConnectionValidationHandler PackageCatalogReference::ConnectionValidationHandler()
+ {
+ return m_connectionValidationHandler;
+ }
+
+ void PackageCatalogReference::ConnectionValidationHandler(winrt::Microsoft::Management::Deployment::PackageCatalogConnectionValidationHandler const& value)
+ {
+ THROW_HR_IF(E_ACCESSDENIED, !IsInProcCaller());
+ THROW_HR_IF(APPINSTALLER_CLI_ERROR_BLOCKED_BY_POLICY, !IsConnectionValidationHandlerEnabledForSource(m_sourceReference));
+
+ m_connectionValidationHandler = value;
+ }
+
+ bool PackageCatalogReference::IsConnectionValidationHandlerEnabled()
+ {
+ return IsInProcCaller() && IsConnectionValidationHandlerEnabledForSource(m_sourceReference);
+ }
}
diff --git a/src/Microsoft.Management.Deployment/PackageCatalogReference.h b/src/Microsoft.Management.Deployment/PackageCatalogReference.h
index 75539d926a..1f25e96e1a 100644
--- a/src/Microsoft.Management.Deployment/PackageCatalogReference.h
+++ b/src/Microsoft.Management.Deployment/PackageCatalogReference.h
@@ -32,9 +32,13 @@ namespace winrt::Microsoft::Management::Deployment::implementation
void InstalledPackageInformationOnly(bool value);
winrt::Microsoft::Management::Deployment::AuthenticationArguments AuthenticationArguments();
void AuthenticationArguments(winrt::Microsoft::Management::Deployment::AuthenticationArguments const& value);
- winrt::Microsoft::Management::Deployment::AuthenticationInfo AuthenticationInfo();
- // Contract 12.0
+ winrt::Microsoft::Management::Deployment::AuthenticationInfo AuthenticationInfo();
+ // Contract 12.0
winrt::Windows::Foundation::IAsyncOperationWithProgress RefreshPackageCatalogAsync();
+ // Contract 29
+ winrt::Microsoft::Management::Deployment::PackageCatalogConnectionValidationHandler ConnectionValidationHandler();
+ void ConnectionValidationHandler(winrt::Microsoft::Management::Deployment::PackageCatalogConnectionValidationHandler const& value);
+ bool IsConnectionValidationHandlerEnabled();
#if !defined(INCLUDE_ONLY_INTERFACE_METHODS)
private:
@@ -50,6 +54,7 @@ namespace winrt::Microsoft::Management::Deployment::implementation
winrt::Microsoft::Management::Deployment::AuthenticationArguments m_authenticationArguments{ nullptr };
std::once_flag m_authenticationInfoOnceFlag;
winrt::Microsoft::Management::Deployment::AuthenticationInfo m_authenticationInfo{ nullptr };
+ winrt::Microsoft::Management::Deployment::PackageCatalogConnectionValidationHandler m_connectionValidationHandler{ nullptr };
#endif
};
}
diff --git a/src/Microsoft.Management.Deployment/PackageManager.idl b/src/Microsoft.Management.Deployment/PackageManager.idl
index 25567032f2..4a26b4ec12 100644
--- a/src/Microsoft.Management.Deployment/PackageManager.idl
+++ b/src/Microsoft.Management.Deployment/PackageManager.idl
@@ -859,6 +859,29 @@ namespace Microsoft.Management.Deployment
MicrosoftEntraIdAuthenticationInfo MicrosoftEntraIdAuthenticationInfo { get; };
}
+ /// Result of a connection validation callback.
+ [contract(Microsoft.Management.Deployment.WindowsPackageManagerContract, 29)]
+ enum PackageCatalogConnectionValidationResult
+ {
+ /// The connection was accepted.
+ Ok,
+ /// The connection was rejected because the certificate was not accepted.
+ CertificateRejected,
+ };
+
+ /// Arguments provided to a connection validation callback.
+ [contract(Microsoft.Management.Deployment.WindowsPackageManagerContract, 29)]
+ runtimeclass PackageCatalogConnectionValidationEventArgs
+ {
+ /// The server certificate presented during the connection.
+ Windows.Security.Cryptography.Certificates.Certificate ServerCertificate { get; };
+ }
+
+ /// Callback invoked to validate a catalog connection.
+ /// Return Ok to accept the connection or another value to reject it for that reason.
+ [contract(Microsoft.Management.Deployment.WindowsPackageManagerContract, 29)]
+ delegate PackageCatalogConnectionValidationResult PackageCatalogConnectionValidationHandler(PackageCatalogConnectionValidationEventArgs args);
+
/// Status of the Connect call
[contract(Microsoft.Management.Deployment.WindowsPackageManagerContract, 1)]
enum ConnectResultStatus
@@ -967,6 +990,20 @@ namespace Microsoft.Management.Deployment
/// The progress range is from 0 to 100.
Windows.Foundation.IAsyncOperationWithProgress RefreshPackageCatalogAsync();
}
+
+ [contract(Microsoft.Management.Deployment.WindowsPackageManagerContract, 29)]
+ {
+ /// A callback invoked to validate the server certificate during Connect or ConnectAsync.
+ /// Only available to in-process callers; out-of-process callers will receive E_ACCESSDENIED on set.
+ /// If the BypassCertificatePinningForMicrosoftStore group policy is disabled, this cannot be set
+ /// for the MicrosoftStore catalog; attempting to do so produces APPINSTALLER_CLI_ERROR_BLOCKED_BY_POLICY.
+ PackageCatalogConnectionValidationHandler ConnectionValidationHandler;
+
+ /// Indicates whether the ConnectionValidationHandler can be set for this catalog reference.
+ /// Returns false if setting the handler would be blocked by policy (e.g., the
+ /// BypassCertificatePinningForMicrosoftStore group policy is disabled for the MicrosoftStore catalog).
+ Boolean IsConnectionValidationHandlerEnabled { get; };
+ }
}
/// Catalogs with PackageCatalogOrigin Predefined
diff --git a/src/Microsoft.Management.Deployment/pch.h b/src/Microsoft.Management.Deployment/pch.h
index bb44268681..b26798bcc1 100644
--- a/src/Microsoft.Management.Deployment/pch.h
+++ b/src/Microsoft.Management.Deployment/pch.h
@@ -5,6 +5,8 @@
#include
#include
#include
+#include
+#include
#include
#include
diff --git a/src/WindowsPackageManager/main.cpp b/src/WindowsPackageManager/main.cpp
index 4ccb238d76..873c48b7a4 100644
--- a/src/WindowsPackageManager/main.cpp
+++ b/src/WindowsPackageManager/main.cpp
@@ -148,4 +148,13 @@ extern "C"
return S_OK;
}
CATCH_RETURN();
+
+#ifndef AICLI_DISABLE_TEST_HOOKS
+ __declspec(dllexport) WINDOWS_PACKAGE_MANAGER_API WindowsPackageManagerTestHook_ReloadGroupPolicy() try
+ {
+ AppInstaller::Settings::GroupPolicy::Instance().Reload();
+ return S_OK;
+ }
+ CATCH_RETURN();
+#endif
}
From 2515a3568e8271bb0115ed0c6b62b5bcca899ad5 Mon Sep 17 00:00:00 2001
From: JohnMcPMS
Date: Thu, 21 May 2026 08:25:34 -0700
Subject: [PATCH 04/18] Change symlink verification to avoid redirection guard
policy (#6239)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
## 📖 Description
Rather than comparing the symlink and desired target through
`weakly_canonical`, this change checks that the symlink is pointing to
the target via string comparison. This avoids "resolving" the symlink
and the redirection guard policy.
---
src/AppInstallerCLITests/Filesystem.cpp | 4 ++++
src/AppInstallerCLITests/main.cpp | 8 ++++++++
src/AppInstallerSharedLib/Filesystem.cpp | 17 +++++++++++++++--
3 files changed, 27 insertions(+), 2 deletions(-)
diff --git a/src/AppInstallerCLITests/Filesystem.cpp b/src/AppInstallerCLITests/Filesystem.cpp
index 69cf0b3e0f..733f38f08b 100644
--- a/src/AppInstallerCLITests/Filesystem.cpp
+++ b/src/AppInstallerCLITests/Filesystem.cpp
@@ -49,6 +49,10 @@ TEST_CASE("VerifySymlink", "[filesystem]")
REQUIRE(VerifySymlink(symlinkPath, testFilePath));
REQUIRE_FALSE(VerifySymlink(symlinkPath, "badPath"));
+ // Verify case-insensitive comparison works (Windows paths are case-insensitive).
+ std::filesystem::path testFilePathUpperCase = basePath / "TESTFILE.TXT";
+ REQUIRE(VerifySymlink(symlinkPath, testFilePathUpperCase));
+
std::filesystem::remove(testFilePath);
// Ensure that symlink existence does not check the target
diff --git a/src/AppInstallerCLITests/main.cpp b/src/AppInstallerCLITests/main.cpp
index 7c74746106..a91ca2ab11 100644
--- a/src/AppInstallerCLITests/main.cpp
+++ b/src/AppInstallerCLITests/main.cpp
@@ -67,6 +67,14 @@ int main(int argc, char** argv)
{
init_apartment();
+ // Enable ProcessRedirectionTrustPolicy to match the MSIX packaged process context in which
+ // WinGet runs in production. This policy causes Windows to block traversal of user-created
+ // symlinks (e.g. via weakly_canonical), so enabling it here surfaces bugs that would only
+ // manifest in the real product environment. The policy is one-way; it cannot be reversed.
+ PROCESS_MITIGATION_REDIRECTION_TRUST_POLICY redirectionPolicy{};
+ redirectionPolicy.EnforceRedirectionTrust = 1;
+ SetProcessMitigationPolicy(ProcessRedirectionTrustPolicy, &redirectionPolicy, sizeof(redirectionPolicy));
+
bool hasSetTestDataBasePath = false;
bool waitBeforeReturn = false;
bool keepSQLLogging = false;
diff --git a/src/AppInstallerSharedLib/Filesystem.cpp b/src/AppInstallerSharedLib/Filesystem.cpp
index c0bf01daf2..3c67411c80 100644
--- a/src/AppInstallerSharedLib/Filesystem.cpp
+++ b/src/AppInstallerSharedLib/Filesystem.cpp
@@ -477,8 +477,21 @@ namespace AppInstaller::Filesystem
bool VerifySymlink(const std::filesystem::path& symlink, const std::filesystem::path& target)
{
- const std::filesystem::path& symlinkTargetPath = std::filesystem::weakly_canonical(symlink);
- return symlinkTargetPath == std::filesystem::weakly_canonical(target);
+ // Use read_symlink to get the symlink's recorded target without traversing the filesystem
+ // chain. weakly_canonical would follow the symlink, which is blocked by
+ // ProcessRedirectionTrustPolicy (inherited from the MSIX packaged process context on
+ // newer Windows builds) when the symlink was created by a non-elevated process.
+ const std::filesystem::path symlinkTarget = std::filesystem::read_symlink(symlink);
+
+ // If the recorded target is relative, resolve it against the symlink's parent directory.
+ const std::filesystem::path resolvedTarget = symlinkTarget.is_absolute() ?
+ symlinkTarget : (symlink.parent_path() / symlinkTarget);
+
+ // Windows paths are case-insensitive. Use lexically_normal to resolve . and .. without
+ // filesystem access, then compare case-insensitively.
+ return Utility::ICUCaseInsensitiveEquals(
+ resolvedTarget.lexically_normal().u8string(),
+ target.lexically_normal().u8string());
}
void AppendExtension(std::filesystem::path& target, const std::string& value)
From 05d5fed59396af61651062e7d9b19936f4b86984 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 21 May 2026 13:24:40 -0700
Subject: [PATCH 05/18] Bump uuid and @azure/msal-node in
/tools/WinGetLogViewer (#6241)
---
tools/WinGetLogViewer/package-lock.json | 31 ++++++++++++-------------
1 file changed, 15 insertions(+), 16 deletions(-)
diff --git a/tools/WinGetLogViewer/package-lock.json b/tools/WinGetLogViewer/package-lock.json
index bc84adb57c..547b6a72d5 100644
--- a/tools/WinGetLogViewer/package-lock.json
+++ b/tools/WinGetLogViewer/package-lock.json
@@ -190,20 +190,29 @@
}
},
"node_modules/@azure/msal-node": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-5.1.2.tgz",
- "integrity": "sha512-DoeSJ9U5KPAIZoHsPywvfEj2MhBniQe0+FSpjLUTdWoIkI999GB5USkW6nNEHnIaLVxROHXvprWA1KzdS1VQ4A==",
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-5.2.2.tgz",
+ "integrity": "sha512-toS+2AePxqyzb0YOKttDOOiSl3jrkK9aiqIvpurpis0O34QcIS5gToqrgT39p04Dpxw3YoUU0lxJKTpSFFfA6Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@azure/msal-common": "16.4.1",
- "jsonwebtoken": "^9.0.0",
- "uuid": "^8.3.0"
+ "@azure/msal-common": "16.6.2",
+ "jsonwebtoken": "^9.0.0"
},
"engines": {
"node": ">=20"
}
},
+ "node_modules/@azure/msal-node/node_modules/@azure/msal-common": {
+ "version": "16.6.2",
+ "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-16.6.2.tgz",
+ "integrity": "sha512-hQjjsekAjB00cM1EmatWJlzhEoK2Qhz7Rj5gvM6tYf8iL7RM3tkxlpU9fG0+ofkulzg9AEEA6dIEnSmDr5ZqUA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
"node_modules/@babel/code-frame": {
"version": "7.29.0",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
@@ -3855,16 +3864,6 @@
"license": "MIT",
"optional": true
},
- "node_modules/uuid": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "uuid": "dist/bin/uuid"
- }
- },
"node_modules/validate-npm-package-license": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
From b3f5a9dbfe23d7d574caf1e68fba9399783ae97e Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Sat, 23 May 2026 07:53:22 -0700
Subject: [PATCH 06/18] Bump qs from 6.15.1 to 6.15.2 in /tools/WinGetLogViewer
(#6246)
---
tools/WinGetLogViewer/package-lock.json | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/tools/WinGetLogViewer/package-lock.json b/tools/WinGetLogViewer/package-lock.json
index 547b6a72d5..89ad2f4b3f 100644
--- a/tools/WinGetLogViewer/package-lock.json
+++ b/tools/WinGetLogViewer/package-lock.json
@@ -2987,9 +2987,9 @@
}
},
"node_modules/qs": {
- "version": "6.15.1",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz",
- "integrity": "sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==",
+ "version": "6.15.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.2.tgz",
+ "integrity": "sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
From ab31639e4199d634364231567db1ead15ad7d757 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Flor=20Chac=C3=B3n?=
<14323496+florelis@users.noreply.github.com>
Date: Wed, 27 May 2026 11:46:42 -0700
Subject: [PATCH 07/18] Ensure portable command alias does not escape directory
(#6251)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
## 📖 Description
This adds validation to ensure that a `PortableCommandAlias` does not
use relative paths to point outside of its directory. It uses the same
validation we already have for `RelativeFilePath`
## 🔗 References
## 🔍 Validation
## ✅ Checklist
- [ ] Signed the [Contributor License
Agreement](https://cla.opensource.microsoft.com)
- [ ] Linked to an issue
- [ ] Updated [Release Notes](../doc/ReleaseNotes.md) (if applicable)
- [ ] Updated documentation (if applicable)
- [ ] Updated [Copilot instructions](.github/copilot-instructions.md)
(if build, architecture, or conventions changed)
## 📋 Issue Type
- [ ] Bug fix
- [ ] Feature
- [ ] Task
###### Microsoft Reviewers: [Open in
CodeFlow](https://microsoft.github.io/open-pr/?codeflow=https://github.com/microsoft/winget-cli/pull/6251)
---
.../Workflows/ArchiveFlow.cpp | 2 +-
.../AppInstallerCLITests.vcxproj | 3 ++
.../AppInstallerCLITests.vcxproj.filters | 3 ++
src/AppInstallerCLITests/Filesystem.cpp | 16 ++-----
...erTypeZip-InvalidPortableCommandAlias.yaml | 23 +++++++++
...tallerTypeZip-InvalidRelativeFilePath.yaml | 4 +-
src/AppInstallerCLITests/YamlManifest.cpp | 1 +
.../Manifest/ManifestValidation.cpp | 48 ++++++++++++-------
.../Public/winget/ManifestValidation.h | 1 +
src/AppInstallerSharedLib/Filesystem.cpp | 9 ++--
.../Public/winget/Filesystem.h | 4 +-
.../Common/ManifestErrorId.cs | 3 ++
12 files changed, 77 insertions(+), 40 deletions(-)
create mode 100644 src/AppInstallerCLITests/TestData/Manifest-Bad-InstallerTypeZip-InvalidPortableCommandAlias.yaml
diff --git a/src/AppInstallerCLICore/Workflows/ArchiveFlow.cpp b/src/AppInstallerCLICore/Workflows/ArchiveFlow.cpp
index 680c0f1e15..9f2325323b 100644
--- a/src/AppInstallerCLICore/Workflows/ArchiveFlow.cpp
+++ b/src/AppInstallerCLICore/Workflows/ArchiveFlow.cpp
@@ -92,7 +92,7 @@ namespace AppInstaller::CLI::Workflow
{
const std::filesystem::path& nestedInstallerPath = targetInstallerPath / ConvertToUTF16(nestedInstallerFile.RelativeFilePath);
- if (Filesystem::PathEscapesBaseDirectory(nestedInstallerPath, targetInstallerPath))
+ if (Filesystem::PathEscapesBaseDirectory(nestedInstallerFile.RelativeFilePath))
{
AICLI_LOG(CLI, Error, << "Path points to a location outside of the install directory: " << nestedInstallerPath);
context.Reporter.Error() << Resource::String::InvalidPathToNestedInstaller << std::endl;
diff --git a/src/AppInstallerCLITests/AppInstallerCLITests.vcxproj b/src/AppInstallerCLITests/AppInstallerCLITests.vcxproj
index b8bc46728c..8dea7d9f4a 100644
--- a/src/AppInstallerCLITests/AppInstallerCLITests.vcxproj
+++ b/src/AppInstallerCLITests/AppInstallerCLITests.vcxproj
@@ -562,6 +562,9 @@
true
+
+ true
+ true
diff --git a/src/AppInstallerCLITests/AppInstallerCLITests.vcxproj.filters b/src/AppInstallerCLITests/AppInstallerCLITests.vcxproj.filters
index 61ae5cfea0..348f9cdfda 100644
--- a/src/AppInstallerCLITests/AppInstallerCLITests.vcxproj.filters
+++ b/src/AppInstallerCLITests/AppInstallerCLITests.vcxproj.filters
@@ -507,6 +507,9 @@
TestData
+
+ TestData
+ TestData
diff --git a/src/AppInstallerCLITests/Filesystem.cpp b/src/AppInstallerCLITests/Filesystem.cpp
index 733f38f08b..59cf02b840 100644
--- a/src/AppInstallerCLITests/Filesystem.cpp
+++ b/src/AppInstallerCLITests/Filesystem.cpp
@@ -12,23 +12,15 @@ using namespace TestCommon;
TEST_CASE("PathEscapesDirectory", "[filesystem]")
{
- TestCommon::TempDirectory tempDirectory("TempDirectory");
- const std::filesystem::path& basePath = tempDirectory.GetPath();
-
std::string badRelativePath = "../../target.exe";
std::string badRelativePath2 = "test/../../target.exe";
std::string goodRelativePath = "target.exe";
std::string goodRelativePath2 = "test/../test1/target.exe";
- std::filesystem::path badPath = basePath / badRelativePath;
- std::filesystem::path badPath2 = basePath / badRelativePath2;
- std::filesystem::path goodPath = basePath / goodRelativePath;
- std::filesystem::path goodPath2 = basePath / goodRelativePath2;
-
- REQUIRE(PathEscapesBaseDirectory(badPath, basePath));
- REQUIRE(PathEscapesBaseDirectory(badPath2, basePath));
- REQUIRE_FALSE(PathEscapesBaseDirectory(goodPath, basePath));
- REQUIRE_FALSE(PathEscapesBaseDirectory(goodPath2, basePath));
+ REQUIRE(PathEscapesBaseDirectory(badRelativePath));
+ REQUIRE(PathEscapesBaseDirectory(badRelativePath2));
+ REQUIRE_FALSE(PathEscapesBaseDirectory(goodRelativePath));
+ REQUIRE_FALSE(PathEscapesBaseDirectory(goodRelativePath2));
}
TEST_CASE("VerifySymlink", "[filesystem]")
diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-InstallerTypeZip-InvalidPortableCommandAlias.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-InstallerTypeZip-InvalidPortableCommandAlias.yaml
new file mode 100644
index 0000000000..eeb5b9fd72
--- /dev/null
+++ b/src/AppInstallerCLITests/TestData/Manifest-Bad-InstallerTypeZip-InvalidPortableCommandAlias.yaml
@@ -0,0 +1,23 @@
+# Bad manifest. A nested installer file must not have a command alias outside the base directory.
+# yaml-language-server: $schema=https://aka.ms/winget-manifest.singleton.1.4.0.schema.json
+
+PackageIdentifier: microsoft.msixsdk
+PackageVersion: 1.0.0.0
+PackageLocale: en-US
+PackageName: AppInstaller Test Installer
+Publisher: Microsoft Corporation
+Moniker: AICLITestExe
+License: Test
+ShortDescription: Test installer for zip with a command alias outside the base directory
+Scope: user
+Installers:
+ - Architecture: x64
+ InstallerUrl: https://ThisIsNotUsed
+ InstallerType: zip
+ InstallerSha256: 65DB2F2AC2686C7F2FD69D4A4C6683B888DC55BFA20A0E32CA9F838B51689A3B
+ NestedInstallerType: exe
+ NestedInstallerFiles:
+ - RelativeFilePath: relativeFilePath
+ PortableCommandAlias: ../command-alias
+ManifestType: singleton
+ManifestVersion: 1.4.0
diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-InstallerTypeZip-InvalidRelativeFilePath.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-InstallerTypeZip-InvalidRelativeFilePath.yaml
index d50d6c6fb9..3726d0aad0 100644
--- a/src/AppInstallerCLITests/TestData/Manifest-Bad-InstallerTypeZip-InvalidRelativeFilePath.yaml
+++ b/src/AppInstallerCLITests/TestData/Manifest-Bad-InstallerTypeZip-InvalidRelativeFilePath.yaml
@@ -1,4 +1,4 @@
-# Bad manifest. A nested installer file must have a RelativeFilePath specified.
+# Bad manifest. A nested installer file must have a valid RelativeFilePath.
# yaml-language-server: $schema=https://aka.ms/winget-manifest.singleton.1.4.0.schema.json
PackageIdentifier: microsoft.msixsdk
@@ -8,7 +8,7 @@ PackageName: AppInstaller Test Installer
Publisher: Microsoft Corporation
Moniker: AICLITestExe
License: Test
-ShortDescription: Test installer for zip without RelativeFilePath specified
+ShortDescription: Test installer for zip with an invalid RelativeFilePath
Scope: user
Installers:
- Architecture: x64
diff --git a/src/AppInstallerCLITests/YamlManifest.cpp b/src/AppInstallerCLITests/YamlManifest.cpp
index 420dcd9d0d..df758fe857 100644
--- a/src/AppInstallerCLITests/YamlManifest.cpp
+++ b/src/AppInstallerCLITests/YamlManifest.cpp
@@ -882,6 +882,7 @@ TEST_CASE("ReadBadManifests", "[ManifestValidation]")
{ "Manifest-Bad-InstallerTypePortable-InvalidScope.yaml", "Scope is not supported for InstallerType portable." },
{ "Manifest-Bad-InstallerTypeZip-DuplicateCommandAlias.yaml", "Duplicate portable command alias found." },
{ "Manifest-Bad-InstallerTypeZip-DuplicateRelativeFilePath.yaml", "Duplicate relative file path found." },
+ { "Manifest-Bad-InstallerTypeZip-InvalidPortableCommandAlias.yaml", "Portable command alias must not point to a location outside of base directory." },
{ "Manifest-Bad-InstallerTypeZip-InvalidRelativeFilePath.yaml", "Relative file path must not point to a location outside of archive directory" },
{ "Manifest-Bad-InstallerTypeZip-MissingRelativeFilePath.yaml", "Required field missing. [RelativeFilePath]" },
{ "Manifest-Bad-InstallerTypeZip-MultipleNestedInstallers.yaml", "Only one entry for NestedInstallerFiles can be specified for non-portable InstallerTypes." },
diff --git a/src/AppInstallerCommonCore/Manifest/ManifestValidation.cpp b/src/AppInstallerCommonCore/Manifest/ManifestValidation.cpp
index e4ddd190f8..b5c04a796b 100644
--- a/src/AppInstallerCommonCore/Manifest/ManifestValidation.cpp
+++ b/src/AppInstallerCommonCore/Manifest/ManifestValidation.cpp
@@ -77,6 +77,7 @@ namespace AppInstaller::Manifest
{ AppInstaller::Manifest::ManifestError::ArpVersionOverlapWithIndex, "DisplayVersion declared in the manifest has overlap with existing DisplayVersion range in the index. Existing DisplayVersion range in index: "sv },
{ AppInstaller::Manifest::ManifestError::ArpVersionValidationInternalError, "Internal error while validating DisplayVersion against index."sv },
{ AppInstaller::Manifest::ManifestError::ExceededNestedInstallerFilesLimit, "Only one entry for NestedInstallerFiles can be specified for non-portable InstallerTypes."sv },
+ { AppInstaller::Manifest::ManifestError::PortableCommandAliasEscapesDirectory, "Portable command alias must not point to a location outside of base directory."sv },
{ AppInstaller::Manifest::ManifestError::RelativeFilePathEscapesDirectory, "Relative file path must not point to a location outside of archive directory."sv },
{ AppInstaller::Manifest::ManifestError::ArpValidationError, "Arp Validation Error."sv },
{ AppInstaller::Manifest::ManifestError::SchemaError, "Schema Error."sv },
@@ -349,9 +350,7 @@ namespace AppInstaller::Manifest
}
// Check that the relative file path does not escape base directory.
- const std::filesystem::path& basePath = std::filesystem::current_path();
- const std::filesystem::path& fullPath = basePath / ConvertToUTF16(nestedInstallerFile.RelativeFilePath);
- if (AppInstaller::Filesystem::PathEscapesBaseDirectory(fullPath, basePath))
+ if (AppInstaller::Filesystem::PathEscapesBaseDirectory(nestedInstallerFile.RelativeFilePath))
{
resultErrors.emplace_back(ManifestError::RelativeFilePathEscapesDirectory, "RelativeFilePath");
}
@@ -362,32 +361,45 @@ namespace AppInstaller::Manifest
resultErrors.emplace_back(ManifestError::DuplicateRelativeFilePath, "RelativeFilePath");
}
- // Check for duplicate portable command alias values.
- const auto& alias = Utility::ToLower(nestedInstallerFile.PortableCommandAlias);
- if (!alias.empty() && !commandAliasSet.insert(alias).second)
+ if (!nestedInstallerFile.PortableCommandAlias.empty())
{
- resultErrors.emplace_back(ManifestError::DuplicatePortableCommandAlias, "PortableCommandAlias");
- break;
+ // Check that the command alias does not escape the base directory.
+ if (AppInstaller::Filesystem::PathEscapesBaseDirectory(nestedInstallerFile.PortableCommandAlias))
+ {
+ resultErrors.emplace_back(ManifestError::PortableCommandAliasEscapesDirectory, "PortableCommandAlias");
+ }
+
+ // Check for duplicate portable command alias values.
+ const auto& alias = Utility::ToLower(nestedInstallerFile.PortableCommandAlias);
+ if (!commandAliasSet.insert(alias).second)
+ {
+ resultErrors.emplace_back(ManifestError::DuplicatePortableCommandAlias, "PortableCommandAlias");
+ break;
+ }
}
// If running full validation, check filetype
if (options.FullValidation)
{
- const std::wstring lowerExtension = Utility::ToLower(fullPath.extension().wstring());
-
- if (isPortable)
+ std::filesystem::path relativeFilePath{ Utility::ConvertToUTF16(nestedInstallerFile.RelativeFilePath) };
+ if (relativeFilePath.has_extension())
{
- if (fullPath.has_extension() && std::find(s_AllowedPortableFiletypes.begin(), s_AllowedPortableFiletypes.end(), lowerExtension) == s_AllowedPortableFiletypes.end())
+ const std::wstring lowerExtension = Utility::ToLower(relativeFilePath.extension().wstring());
+
+ if (isPortable)
{
- resultErrors.emplace_back(ManifestError::InvalidPortableFiletype, "RelativeFilePath", nestedInstallerFile.RelativeFilePath);
+ if (std::find(s_AllowedPortableFiletypes.begin(), s_AllowedPortableFiletypes.end(), lowerExtension) == s_AllowedPortableFiletypes.end())
+ {
+ resultErrors.emplace_back(ManifestError::InvalidPortableFiletype, "RelativeFilePath", nestedInstallerFile.RelativeFilePath);
+ }
}
- }
- if (isFont)
- {
- if (fullPath.has_extension() && std::find(s_AllowedFontFiletypes.begin(), s_AllowedFontFiletypes.end(), lowerExtension) == s_AllowedFontFiletypes.end())
+ if (isFont)
{
- resultErrors.emplace_back(ManifestError::InvalidFontFiletype, "RelativeFilePath", nestedInstallerFile.RelativeFilePath);
+ if (std::find(s_AllowedFontFiletypes.begin(), s_AllowedFontFiletypes.end(), lowerExtension) == s_AllowedFontFiletypes.end())
+ {
+ resultErrors.emplace_back(ManifestError::InvalidFontFiletype, "RelativeFilePath", nestedInstallerFile.RelativeFilePath);
+ }
}
}
}
diff --git a/src/AppInstallerCommonCore/Public/winget/ManifestValidation.h b/src/AppInstallerCommonCore/Public/winget/ManifestValidation.h
index c701df3b9c..55eef941ac 100644
--- a/src/AppInstallerCommonCore/Public/winget/ManifestValidation.h
+++ b/src/AppInstallerCommonCore/Public/winget/ManifestValidation.h
@@ -68,6 +68,7 @@ namespace AppInstaller::Manifest
WINGET_DEFINE_RESOURCE_STRINGID(NoSuitableMinVersionDependency);
WINGET_DEFINE_RESOURCE_STRINGID(NoSupportedPlatforms);
WINGET_DEFINE_RESOURCE_STRINGID(OptionalFieldMissing);
+ WINGET_DEFINE_RESOURCE_STRINGID(PortableCommandAliasEscapesDirectory);
WINGET_DEFINE_RESOURCE_STRINGID(RelativeFilePathEscapesDirectory);
WINGET_DEFINE_RESOURCE_STRINGID(RequiredFieldEmpty);
WINGET_DEFINE_RESOURCE_STRINGID(RequiredFieldMissing);
diff --git a/src/AppInstallerSharedLib/Filesystem.cpp b/src/AppInstallerSharedLib/Filesystem.cpp
index 3c67411c80..2e0e283359 100644
--- a/src/AppInstallerSharedLib/Filesystem.cpp
+++ b/src/AppInstallerSharedLib/Filesystem.cpp
@@ -370,12 +370,11 @@ namespace AppInstaller::Filesystem
return (GetVolumeInformationFlags(path) & FILE_SUPPORTS_REPARSE_POINTS) != 0;
}
- bool PathEscapesBaseDirectory(const std::filesystem::path& target, const std::filesystem::path& base)
+ bool PathEscapesBaseDirectory(std::string_view relativePath)
{
- const auto& targetPath = std::filesystem::weakly_canonical(target);
- const auto& basePath = std::filesystem::weakly_canonical(base);
- auto [a, b] = std::mismatch(targetPath.begin(), targetPath.end(), basePath.begin(), basePath.end());
- return (b != basePath.end());
+ // Normalize the path, then check if the first part is ".."
+ auto resolvedPath = std::filesystem::path{ relativePath }.lexically_normal();
+ return !resolvedPath.empty() && *resolvedPath.begin() == "..";
}
// Complicated rename algorithm due to somewhat arbitrary failures.
diff --git a/src/AppInstallerSharedLib/Public/winget/Filesystem.h b/src/AppInstallerSharedLib/Public/winget/Filesystem.h
index c833e8e921..1a7df6aa28 100644
--- a/src/AppInstallerSharedLib/Public/winget/Filesystem.h
+++ b/src/AppInstallerSharedLib/Public/winget/Filesystem.h
@@ -21,8 +21,8 @@ namespace AppInstaller::Filesystem
// Checks if the file system at path support reparse points
bool SupportsReparsePoints(const std::filesystem::path& path);
- // Checks if the canonical form of the path points to a location outside of the provided base path.
- bool PathEscapesBaseDirectory(const std::filesystem::path& target, const std::filesystem::path& base);
+ // Checks if a relative paths points to a location outside of the base path.
+ bool PathEscapesBaseDirectory(std::string_view relativePath);
// Renames the file to a new path.
void RenameFile(const std::filesystem::path& from, const std::filesystem::path& to);
diff --git a/src/WinGetUtilInterop/Common/ManifestErrorId.cs b/src/WinGetUtilInterop/Common/ManifestErrorId.cs
index 43456c613c..607bce3d2e 100644
--- a/src/WinGetUtilInterop/Common/ManifestErrorId.cs
+++ b/src/WinGetUtilInterop/Common/ManifestErrorId.cs
@@ -159,6 +159,9 @@ public enum ManifestErrorId
/// Optional field missing.
OptionalFieldMissing,
+ /// Portable command alias must not point to a location outside of base directory.
+ PortableCommandAliasEscapesDirectory,
+
/// Relative file path must not point to a location outside of archive directory.
RelativeFilePathEscapesDirectory,
From e270ee3dfd41a5f9a5cbbc1f49e0fdf84dcb3220 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Flor=20Chac=C3=B3n?=
<14323496+florelis@users.noreply.github.com>
Date: Wed, 27 May 2026 11:47:10 -0700
Subject: [PATCH 08/18] Make sfs-client a vcpkg port (#6243)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
## 📖 Description
Removes the git-subtree for sfs-client and replaces it with a local
vcpkg port. This port is based on the [template provided by
sfs-client](https://github.com/microsoft/sfs-client/tree/main/sfs-client-vcpkg-port/sfs-client)
* Updated the script that creates a local overlay to fetch this port.
* Added a small patch to fix a build error in the port.
* Created a new folder for the custom port patches. This means
duplicating the files, but prevents losing them when re-creating the
ports.
* Added a job to the build pipeline to ensure that the ports still match
what the creation script produces, to ensure they're kept in sync.
This fixes a CG alert for c-ares triggered by having sfs-client's
cgmanifest checked in, which caused CG to consider that as the version
used despite us updating the dependency.
## 🔗 References
## 🔍 Validation
It builds :D
## ✅ Checklist
- [ ] Signed the [Contributor License
Agreement](https://cla.opensource.microsoft.com)
- [ ] Linked to an issue
- [ ] Updated [Release Notes](../doc/ReleaseNotes.md) (if applicable)
- [ ] Updated documentation (if applicable)
- [ ] Updated [Copilot instructions](.github/copilot-instructions.md)
(if build, architecture, or conventions changed)
## 📋 Issue Type
- [ ] Bug fix
- [ ] Feature
- [ ] Task
###### Microsoft Reviewers: [Open in
CodeFlow](https://microsoft.github.io/open-pr/?codeflow=https://github.com/microsoft/winget-cli/pull/6243)
---
cgmanifest.json | 2 +-
src/AppInstallerCLI.sln | 31 +-
.../AppInstallerCLITests.vcxproj | 15 +-
.../AppInstallerCommonCore.vcxproj | 18 +-
src/SfsClient/SfsClient.vcxproj | 291 --------
src/SfsClient/SfsClient.vcxproj.filters | 159 ----
src/SfsClient/readme.md | 19 -
src/SfsClient/sfs-client/.clang-format | 29 -
src/SfsClient/sfs-client/.cmake-format.json | 7 -
src/SfsClient/sfs-client/.github/CODEOWNERS | 2 -
.../.github/ISSUE_TEMPLATE/bug_report.md | 24 -
.../.github/ISSUE_TEMPLATE/feature_request.md | 20 -
.../sfs-client/.github/dependabot.yml | 23 -
.../.github/pull_request_template.md | 15 -
.../workflows/initialize-codeql/action.yml | 12 -
.../workflows/install-winget/action.yml | 56 --
.../.github/workflows/main-build-ubuntu.yml | 46 --
.../.github/workflows/main-build-windows.yml | 53 --
.../sfs-client/.github/workflows/pr.yml | 87 ---
src/SfsClient/sfs-client/.gitignore | 45 --
src/SfsClient/sfs-client/API.md | 59 --
src/SfsClient/sfs-client/CMakeLists.txt | 79 --
src/SfsClient/sfs-client/CODE_OF_CONDUCT.md | 9 -
src/SfsClient/sfs-client/DEVELOPMENT.md | 6 -
src/SfsClient/sfs-client/LICENSE | 21 -
src/SfsClient/sfs-client/NOTICE.md | 441 -----------
src/SfsClient/sfs-client/README.md | 195 -----
src/SfsClient/sfs-client/SECURITY.md | 41 -
src/SfsClient/sfs-client/SUPPORT.md | 11 -
src/SfsClient/sfs-client/TEST.md | 12 -
src/SfsClient/sfs-client/cgmanifest.json | 85 ---
.../sfs-client/client/CMakeLists.txt | 147 ----
.../client/include/sfsclient/AppContent.h | 87 ---
.../client/include/sfsclient/AppFile.h | 59 --
.../include/sfsclient/ApplicabilityDetails.h | 42 --
.../client/include/sfsclient/ClientConfig.h | 34 -
.../client/include/sfsclient/Content.h | 62 --
.../client/include/sfsclient/ContentId.h | 48 --
.../client/include/sfsclient/File.h | 70 --
.../client/include/sfsclient/Logging.h | 33 -
.../client/include/sfsclient/RequestParams.h | 46 --
.../client/include/sfsclient/Result.h | 89 ---
.../client/include/sfsclient/SFSClient.h | 80 --
.../sfs-client/client/src/AppContent.cpp | 90 ---
.../sfs-client/client/src/AppFile.cpp | 60 --
.../client/src/ApplicabilityDetails.cpp | 35 -
.../sfs-client/client/src/Content.cpp | 91 ---
.../sfs-client/client/src/ContentId.cpp | 49 --
src/SfsClient/sfs-client/client/src/File.cpp | 68 --
.../sfs-client/client/src/Logging.cpp | 22 -
.../sfs-client/client/src/Result.cpp | 127 ----
.../sfs-client/client/src/SFSClient.cpp | 57 --
.../client/src/details/ContentUtil.cpp | 117 ---
.../client/src/details/ContentUtil.h | 61 --
.../client/src/details/CorrelationVector.cpp | 55 --
.../client/src/details/CorrelationVector.h | 40 -
.../sfs-client/client/src/details/Env.cpp | 84 ---
.../sfs-client/client/src/details/Env.h | 40 -
.../client/src/details/ErrorHandling.cpp | 75 --
.../client/src/details/ErrorHandling.h | 87 ---
.../sfs-client/client/src/details/OSInfo.cpp | 84 ---
.../sfs-client/client/src/details/OSInfo.h | 12 -
.../client/src/details/ReportingHandler.cpp | 28 -
.../client/src/details/ReportingHandler.h | 80 --
.../client/src/details/SFSClientImpl.cpp | 415 -----------
.../client/src/details/SFSClientImpl.h | 114 ---
.../client/src/details/SFSClientInterface.h | 104 ---
.../client/src/details/SFSException.cpp | 28 -
.../client/src/details/SFSException.h | 28 -
.../client/src/details/SFSUrlBuilder.cpp | 81 --
.../client/src/details/SFSUrlBuilder.h | 47 --
.../client/src/details/TestOverride.cpp | 59 --
.../client/src/details/TestOverride.h | 52 --
.../client/src/details/UrlBuilder.cpp | 192 -----
.../client/src/details/UrlBuilder.h | 144 ----
.../sfs-client/client/src/details/Util.cpp | 21 -
.../sfs-client/client/src/details/Util.h | 12 -
.../src/details/connection/Connection.cpp | 21 -
.../src/details/connection/Connection.h | 57 --
.../details/connection/ConnectionConfig.cpp | 16 -
.../src/details/connection/ConnectionConfig.h | 30 -
.../details/connection/ConnectionManager.cpp | 16 -
.../details/connection/ConnectionManager.h | 28 -
.../src/details/connection/CurlConnection.cpp | 432 -----------
.../src/details/connection/CurlConnection.h | 64 --
.../connection/CurlConnectionManager.cpp | 53 --
.../connection/CurlConnectionManager.h | 24 -
.../src/details/connection/HttpHeader.cpp | 38 -
.../src/details/connection/HttpHeader.h | 21 -
.../connection/mock/MockConnection.cpp | 26 -
.../details/connection/mock/MockConnection.h | 23 -
.../connection/mock/MockConnectionManager.cpp | 21 -
.../connection/mock/MockConnectionManager.h | 24 -
.../client/src/details/entity/ContentType.cpp | 19 -
.../client/src/details/entity/ContentType.h | 17 -
.../client/src/details/entity/FileEntity.cpp | 289 --------
.../client/src/details/entity/FileEntity.h | 71 --
.../src/details/entity/VersionEntity.cpp | 153 ----
.../client/src/details/entity/VersionEntity.h | 61 --
.../sfs-client/client/tests/CMakeLists.txt | 64 --
.../tests/functional/SFSClientTests.cpp | 461 ------------
.../details/CurlConnectionTests.cpp | 611 ---------------
.../functional/details/SFSClientImplTests.cpp | 358 ---------
.../client/tests/mock/MockWebServer.cpp | 698 ------------------
.../client/tests/mock/MockWebServer.h | 68 --
.../client/tests/mock/ProxyServer.cpp | 97 ---
.../client/tests/mock/ProxyServer.h | 34 -
.../client/tests/mock/ServerCommon.cpp | 121 ---
.../client/tests/mock/ServerCommon.h | 84 ---
.../client/tests/unit/AppContentTests.cpp | 215 ------
.../client/tests/unit/AppFileTests.cpp | 117 ---
.../tests/unit/ApplicabilityDetailsTests.cpp | 61 --
.../client/tests/unit/ContentIdTests.cpp | 69 --
.../client/tests/unit/ContentTests.cpp | 160 ----
.../client/tests/unit/FileTests.cpp | 72 --
.../client/tests/unit/ResultTests.cpp | 58 --
.../client/tests/unit/SFSClientTests.cpp | 338 ---------
.../details/CurlConnectionManagerTests.cpp | 48 --
.../unit/details/CurlConnectionTests.cpp | 106 ---
.../client/tests/unit/details/EnvTests.cpp | 119 ---
.../tests/unit/details/ErrorHandlingTests.cpp | 255 -------
.../unit/details/ReportingHandlerTests.cpp | 190 -----
.../tests/unit/details/SFSClientImplTests.cpp | 410 ----------
.../tests/unit/details/SFSUrlBuilderTests.cpp | 100 ---
.../tests/unit/details/TestOverrideTests.cpp | 131 ----
.../tests/unit/details/UrlBuilderTests.cpp | 143 ----
.../client/tests/unit/details/UtilTests.cpp | 32 -
.../unit/details/entity/FileEntityTests.cpp | 639 ----------------
.../details/entity/VersionEntityTests.cpp | 305 --------
.../client/tests/util/SFSExceptionMatcher.cpp | 59 --
.../client/tests/util/SFSExceptionMatcher.h | 51 --
.../client/tests/util/TestHelper.cpp | 49 --
.../sfs-client/client/tests/util/TestHelper.h | 26 -
.../sfs-client/cmake/SFSOptions.cmake | 15 -
.../cmake/sfsclient-config.cmake.in | 16 -
.../sfs-client/pre-commit-wrapper.sh | 18 -
src/SfsClient/sfs-client/pre-commit.sh | 152 ----
.../sfs-client/samples/CMakeLists.txt | 5 -
src/SfsClient/sfs-client/samples/README.md | 9 -
.../integration-do-client/CMakeLists.txt | 62 --
.../IntegrationDOClient.cpp | 333 ---------
.../sfs-client/samples/tool/CMakeLists.txt | 21 -
.../sfs-client/samples/tool/SFSClientTool.cpp | 548 --------------
src/SfsClient/sfs-client/scripts/Build.ps1 | 90 ---
src/SfsClient/sfs-client/scripts/Setup.ps1 | 169 -----
src/SfsClient/sfs-client/scripts/Test.ps1 | 28 -
src/SfsClient/sfs-client/scripts/build.sh | 163 ----
.../sfs-client/scripts/check-format.py | 66 --
.../sfs-client/scripts/pip.requirements.txt | 2 -
src/SfsClient/sfs-client/scripts/setup.sh | 190 -----
src/SfsClient/sfs-client/scripts/test.sh | 60 --
.../sfs-client/portfile.cmake | 37 -
.../sfs-client-vcpkg-port/sfs-client/usage | 4 -
.../sfs-client/vcpkg.json | 30 -
.../x64-windows-static-custom.cmake | 6 -
src/SfsClient/sfs-client/vcpkg.json | 64 --
src/VcpkgPortOverlay/.gitignore | 6 +
src/VcpkgPortOverlay/CreatePortOverlay.ps1 | 271 ++++++-
src/VcpkgPortOverlay/README.md | 7 +
.../add-server-certificate-validation.patch | 169 -----
.../cpprestsdk/fix-find-openssl.patch | 18 -
src/VcpkgPortOverlay/cpprestsdk/fix-uwp.patch | 28 -
.../cpprestsdk/fix_narrowing.patch | 50 --
.../cpprestsdk/portfile.cmake | 61 --
src/VcpkgPortOverlay/cpprestsdk/test.patch | 23 -
src/VcpkgPortOverlay/cpprestsdk/vcpkg.json | 117 ---
.../detours/find-jmp-bounds-arm64.patch | 24 -
src/VcpkgPortOverlay/detours/portfile.cmake | 34 -
src/VcpkgPortOverlay/detours/usage | 7 -
src/VcpkgPortOverlay/detours/vcpkg.json | 9 -
.../libyaml/export-pkgconfig.patch | 16 -
.../libyaml/fix-POSIX_name.patch | 13 -
src/VcpkgPortOverlay/libyaml/portfile.cmake | 33 -
src/VcpkgPortOverlay/libyaml/vcpkg.json | 17 -
.../add-server-certificate-validation.patch | 69 ++
...ove-unconditional-toolchain-override.patch | 12 +
.../WindowsPackageManager.vcxproj | 3 -
src/vcpkg.json | 1 +
src/vcpkg.props | 7 +
179 files changed, 384 insertions(+), 15921 deletions(-)
delete mode 100644 src/SfsClient/SfsClient.vcxproj
delete mode 100644 src/SfsClient/SfsClient.vcxproj.filters
delete mode 100644 src/SfsClient/readme.md
delete mode 100644 src/SfsClient/sfs-client/.clang-format
delete mode 100644 src/SfsClient/sfs-client/.cmake-format.json
delete mode 100644 src/SfsClient/sfs-client/.github/CODEOWNERS
delete mode 100644 src/SfsClient/sfs-client/.github/ISSUE_TEMPLATE/bug_report.md
delete mode 100644 src/SfsClient/sfs-client/.github/ISSUE_TEMPLATE/feature_request.md
delete mode 100644 src/SfsClient/sfs-client/.github/dependabot.yml
delete mode 100644 src/SfsClient/sfs-client/.github/pull_request_template.md
delete mode 100644 src/SfsClient/sfs-client/.github/workflows/initialize-codeql/action.yml
delete mode 100644 src/SfsClient/sfs-client/.github/workflows/install-winget/action.yml
delete mode 100644 src/SfsClient/sfs-client/.github/workflows/main-build-ubuntu.yml
delete mode 100644 src/SfsClient/sfs-client/.github/workflows/main-build-windows.yml
delete mode 100644 src/SfsClient/sfs-client/.github/workflows/pr.yml
delete mode 100644 src/SfsClient/sfs-client/.gitignore
delete mode 100644 src/SfsClient/sfs-client/API.md
delete mode 100644 src/SfsClient/sfs-client/CMakeLists.txt
delete mode 100644 src/SfsClient/sfs-client/CODE_OF_CONDUCT.md
delete mode 100644 src/SfsClient/sfs-client/DEVELOPMENT.md
delete mode 100644 src/SfsClient/sfs-client/LICENSE
delete mode 100644 src/SfsClient/sfs-client/NOTICE.md
delete mode 100644 src/SfsClient/sfs-client/README.md
delete mode 100644 src/SfsClient/sfs-client/SECURITY.md
delete mode 100644 src/SfsClient/sfs-client/SUPPORT.md
delete mode 100644 src/SfsClient/sfs-client/TEST.md
delete mode 100644 src/SfsClient/sfs-client/cgmanifest.json
delete mode 100644 src/SfsClient/sfs-client/client/CMakeLists.txt
delete mode 100644 src/SfsClient/sfs-client/client/include/sfsclient/AppContent.h
delete mode 100644 src/SfsClient/sfs-client/client/include/sfsclient/AppFile.h
delete mode 100644 src/SfsClient/sfs-client/client/include/sfsclient/ApplicabilityDetails.h
delete mode 100644 src/SfsClient/sfs-client/client/include/sfsclient/ClientConfig.h
delete mode 100644 src/SfsClient/sfs-client/client/include/sfsclient/Content.h
delete mode 100644 src/SfsClient/sfs-client/client/include/sfsclient/ContentId.h
delete mode 100644 src/SfsClient/sfs-client/client/include/sfsclient/File.h
delete mode 100644 src/SfsClient/sfs-client/client/include/sfsclient/Logging.h
delete mode 100644 src/SfsClient/sfs-client/client/include/sfsclient/RequestParams.h
delete mode 100644 src/SfsClient/sfs-client/client/include/sfsclient/Result.h
delete mode 100644 src/SfsClient/sfs-client/client/include/sfsclient/SFSClient.h
delete mode 100644 src/SfsClient/sfs-client/client/src/AppContent.cpp
delete mode 100644 src/SfsClient/sfs-client/client/src/AppFile.cpp
delete mode 100644 src/SfsClient/sfs-client/client/src/ApplicabilityDetails.cpp
delete mode 100644 src/SfsClient/sfs-client/client/src/Content.cpp
delete mode 100644 src/SfsClient/sfs-client/client/src/ContentId.cpp
delete mode 100644 src/SfsClient/sfs-client/client/src/File.cpp
delete mode 100644 src/SfsClient/sfs-client/client/src/Logging.cpp
delete mode 100644 src/SfsClient/sfs-client/client/src/Result.cpp
delete mode 100644 src/SfsClient/sfs-client/client/src/SFSClient.cpp
delete mode 100644 src/SfsClient/sfs-client/client/src/details/ContentUtil.cpp
delete mode 100644 src/SfsClient/sfs-client/client/src/details/ContentUtil.h
delete mode 100644 src/SfsClient/sfs-client/client/src/details/CorrelationVector.cpp
delete mode 100644 src/SfsClient/sfs-client/client/src/details/CorrelationVector.h
delete mode 100644 src/SfsClient/sfs-client/client/src/details/Env.cpp
delete mode 100644 src/SfsClient/sfs-client/client/src/details/Env.h
delete mode 100644 src/SfsClient/sfs-client/client/src/details/ErrorHandling.cpp
delete mode 100644 src/SfsClient/sfs-client/client/src/details/ErrorHandling.h
delete mode 100644 src/SfsClient/sfs-client/client/src/details/OSInfo.cpp
delete mode 100644 src/SfsClient/sfs-client/client/src/details/OSInfo.h
delete mode 100644 src/SfsClient/sfs-client/client/src/details/ReportingHandler.cpp
delete mode 100644 src/SfsClient/sfs-client/client/src/details/ReportingHandler.h
delete mode 100644 src/SfsClient/sfs-client/client/src/details/SFSClientImpl.cpp
delete mode 100644 src/SfsClient/sfs-client/client/src/details/SFSClientImpl.h
delete mode 100644 src/SfsClient/sfs-client/client/src/details/SFSClientInterface.h
delete mode 100644 src/SfsClient/sfs-client/client/src/details/SFSException.cpp
delete mode 100644 src/SfsClient/sfs-client/client/src/details/SFSException.h
delete mode 100644 src/SfsClient/sfs-client/client/src/details/SFSUrlBuilder.cpp
delete mode 100644 src/SfsClient/sfs-client/client/src/details/SFSUrlBuilder.h
delete mode 100644 src/SfsClient/sfs-client/client/src/details/TestOverride.cpp
delete mode 100644 src/SfsClient/sfs-client/client/src/details/TestOverride.h
delete mode 100644 src/SfsClient/sfs-client/client/src/details/UrlBuilder.cpp
delete mode 100644 src/SfsClient/sfs-client/client/src/details/UrlBuilder.h
delete mode 100644 src/SfsClient/sfs-client/client/src/details/Util.cpp
delete mode 100644 src/SfsClient/sfs-client/client/src/details/Util.h
delete mode 100644 src/SfsClient/sfs-client/client/src/details/connection/Connection.cpp
delete mode 100644 src/SfsClient/sfs-client/client/src/details/connection/Connection.h
delete mode 100644 src/SfsClient/sfs-client/client/src/details/connection/ConnectionConfig.cpp
delete mode 100644 src/SfsClient/sfs-client/client/src/details/connection/ConnectionConfig.h
delete mode 100644 src/SfsClient/sfs-client/client/src/details/connection/ConnectionManager.cpp
delete mode 100644 src/SfsClient/sfs-client/client/src/details/connection/ConnectionManager.h
delete mode 100644 src/SfsClient/sfs-client/client/src/details/connection/CurlConnection.cpp
delete mode 100644 src/SfsClient/sfs-client/client/src/details/connection/CurlConnection.h
delete mode 100644 src/SfsClient/sfs-client/client/src/details/connection/CurlConnectionManager.cpp
delete mode 100644 src/SfsClient/sfs-client/client/src/details/connection/CurlConnectionManager.h
delete mode 100644 src/SfsClient/sfs-client/client/src/details/connection/HttpHeader.cpp
delete mode 100644 src/SfsClient/sfs-client/client/src/details/connection/HttpHeader.h
delete mode 100644 src/SfsClient/sfs-client/client/src/details/connection/mock/MockConnection.cpp
delete mode 100644 src/SfsClient/sfs-client/client/src/details/connection/mock/MockConnection.h
delete mode 100644 src/SfsClient/sfs-client/client/src/details/connection/mock/MockConnectionManager.cpp
delete mode 100644 src/SfsClient/sfs-client/client/src/details/connection/mock/MockConnectionManager.h
delete mode 100644 src/SfsClient/sfs-client/client/src/details/entity/ContentType.cpp
delete mode 100644 src/SfsClient/sfs-client/client/src/details/entity/ContentType.h
delete mode 100644 src/SfsClient/sfs-client/client/src/details/entity/FileEntity.cpp
delete mode 100644 src/SfsClient/sfs-client/client/src/details/entity/FileEntity.h
delete mode 100644 src/SfsClient/sfs-client/client/src/details/entity/VersionEntity.cpp
delete mode 100644 src/SfsClient/sfs-client/client/src/details/entity/VersionEntity.h
delete mode 100644 src/SfsClient/sfs-client/client/tests/CMakeLists.txt
delete mode 100644 src/SfsClient/sfs-client/client/tests/functional/SFSClientTests.cpp
delete mode 100644 src/SfsClient/sfs-client/client/tests/functional/details/CurlConnectionTests.cpp
delete mode 100644 src/SfsClient/sfs-client/client/tests/functional/details/SFSClientImplTests.cpp
delete mode 100644 src/SfsClient/sfs-client/client/tests/mock/MockWebServer.cpp
delete mode 100644 src/SfsClient/sfs-client/client/tests/mock/MockWebServer.h
delete mode 100644 src/SfsClient/sfs-client/client/tests/mock/ProxyServer.cpp
delete mode 100644 src/SfsClient/sfs-client/client/tests/mock/ProxyServer.h
delete mode 100644 src/SfsClient/sfs-client/client/tests/mock/ServerCommon.cpp
delete mode 100644 src/SfsClient/sfs-client/client/tests/mock/ServerCommon.h
delete mode 100644 src/SfsClient/sfs-client/client/tests/unit/AppContentTests.cpp
delete mode 100644 src/SfsClient/sfs-client/client/tests/unit/AppFileTests.cpp
delete mode 100644 src/SfsClient/sfs-client/client/tests/unit/ApplicabilityDetailsTests.cpp
delete mode 100644 src/SfsClient/sfs-client/client/tests/unit/ContentIdTests.cpp
delete mode 100644 src/SfsClient/sfs-client/client/tests/unit/ContentTests.cpp
delete mode 100644 src/SfsClient/sfs-client/client/tests/unit/FileTests.cpp
delete mode 100644 src/SfsClient/sfs-client/client/tests/unit/ResultTests.cpp
delete mode 100644 src/SfsClient/sfs-client/client/tests/unit/SFSClientTests.cpp
delete mode 100644 src/SfsClient/sfs-client/client/tests/unit/details/CurlConnectionManagerTests.cpp
delete mode 100644 src/SfsClient/sfs-client/client/tests/unit/details/CurlConnectionTests.cpp
delete mode 100644 src/SfsClient/sfs-client/client/tests/unit/details/EnvTests.cpp
delete mode 100644 src/SfsClient/sfs-client/client/tests/unit/details/ErrorHandlingTests.cpp
delete mode 100644 src/SfsClient/sfs-client/client/tests/unit/details/ReportingHandlerTests.cpp
delete mode 100644 src/SfsClient/sfs-client/client/tests/unit/details/SFSClientImplTests.cpp
delete mode 100644 src/SfsClient/sfs-client/client/tests/unit/details/SFSUrlBuilderTests.cpp
delete mode 100644 src/SfsClient/sfs-client/client/tests/unit/details/TestOverrideTests.cpp
delete mode 100644 src/SfsClient/sfs-client/client/tests/unit/details/UrlBuilderTests.cpp
delete mode 100644 src/SfsClient/sfs-client/client/tests/unit/details/UtilTests.cpp
delete mode 100644 src/SfsClient/sfs-client/client/tests/unit/details/entity/FileEntityTests.cpp
delete mode 100644 src/SfsClient/sfs-client/client/tests/unit/details/entity/VersionEntityTests.cpp
delete mode 100644 src/SfsClient/sfs-client/client/tests/util/SFSExceptionMatcher.cpp
delete mode 100644 src/SfsClient/sfs-client/client/tests/util/SFSExceptionMatcher.h
delete mode 100644 src/SfsClient/sfs-client/client/tests/util/TestHelper.cpp
delete mode 100644 src/SfsClient/sfs-client/client/tests/util/TestHelper.h
delete mode 100644 src/SfsClient/sfs-client/cmake/SFSOptions.cmake
delete mode 100644 src/SfsClient/sfs-client/cmake/sfsclient-config.cmake.in
delete mode 100644 src/SfsClient/sfs-client/pre-commit-wrapper.sh
delete mode 100644 src/SfsClient/sfs-client/pre-commit.sh
delete mode 100644 src/SfsClient/sfs-client/samples/CMakeLists.txt
delete mode 100644 src/SfsClient/sfs-client/samples/README.md
delete mode 100644 src/SfsClient/sfs-client/samples/integration-do-client/CMakeLists.txt
delete mode 100644 src/SfsClient/sfs-client/samples/integration-do-client/IntegrationDOClient.cpp
delete mode 100644 src/SfsClient/sfs-client/samples/tool/CMakeLists.txt
delete mode 100644 src/SfsClient/sfs-client/samples/tool/SFSClientTool.cpp
delete mode 100644 src/SfsClient/sfs-client/scripts/Build.ps1
delete mode 100644 src/SfsClient/sfs-client/scripts/Setup.ps1
delete mode 100644 src/SfsClient/sfs-client/scripts/Test.ps1
delete mode 100755 src/SfsClient/sfs-client/scripts/build.sh
delete mode 100644 src/SfsClient/sfs-client/scripts/check-format.py
delete mode 100644 src/SfsClient/sfs-client/scripts/pip.requirements.txt
delete mode 100755 src/SfsClient/sfs-client/scripts/setup.sh
delete mode 100755 src/SfsClient/sfs-client/scripts/test.sh
delete mode 100644 src/SfsClient/sfs-client/sfs-client-vcpkg-port/sfs-client/portfile.cmake
delete mode 100644 src/SfsClient/sfs-client/sfs-client-vcpkg-port/sfs-client/usage
delete mode 100644 src/SfsClient/sfs-client/sfs-client-vcpkg-port/sfs-client/vcpkg.json
delete mode 100644 src/SfsClient/sfs-client/vcpkg-custom-triplets/x64-windows-static-custom.cmake
delete mode 100644 src/SfsClient/sfs-client/vcpkg.json
create mode 100644 src/VcpkgPortOverlay/.gitignore
delete mode 100644 src/VcpkgPortOverlay/cpprestsdk/add-server-certificate-validation.patch
delete mode 100644 src/VcpkgPortOverlay/cpprestsdk/fix-find-openssl.patch
delete mode 100644 src/VcpkgPortOverlay/cpprestsdk/fix-uwp.patch
delete mode 100644 src/VcpkgPortOverlay/cpprestsdk/fix_narrowing.patch
delete mode 100644 src/VcpkgPortOverlay/cpprestsdk/portfile.cmake
delete mode 100644 src/VcpkgPortOverlay/cpprestsdk/test.patch
delete mode 100644 src/VcpkgPortOverlay/cpprestsdk/vcpkg.json
delete mode 100644 src/VcpkgPortOverlay/detours/find-jmp-bounds-arm64.patch
delete mode 100644 src/VcpkgPortOverlay/detours/portfile.cmake
delete mode 100644 src/VcpkgPortOverlay/detours/usage
delete mode 100644 src/VcpkgPortOverlay/detours/vcpkg.json
delete mode 100644 src/VcpkgPortOverlay/libyaml/export-pkgconfig.patch
delete mode 100644 src/VcpkgPortOverlay/libyaml/fix-POSIX_name.patch
delete mode 100644 src/VcpkgPortOverlay/libyaml/portfile.cmake
delete mode 100644 src/VcpkgPortOverlay/libyaml/vcpkg.json
create mode 100644 src/VcpkgPortOverlay/patches/cpprestsdk/add-server-certificate-validation.patch
create mode 100644 src/VcpkgPortOverlay/patches/sfs-client/remove-unconditional-toolchain-override.patch
diff --git a/cgmanifest.json b/cgmanifest.json
index 0ab008bb1a..fc5c3c3447 100644
--- a/cgmanifest.json
+++ b/cgmanifest.json
@@ -33,7 +33,7 @@
"type": "git",
"git": {
"repositoryUrl": "https://github.com/microsoft/sfs-client.git",
- "commitHash": "ff315ecfa2ef2953d8a808e51e8a61a4e0759180"
+ "commitHash": "0e27525d597c730e71646fd0b15bdc8c8503f24d"
}
}
},
diff --git a/src/AppInstallerCLI.sln b/src/AppInstallerCLI.sln
index 3a37b38505..96505d4af5 100644
--- a/src/AppInstallerCLI.sln
+++ b/src/AppInstallerCLI.sln
@@ -180,8 +180,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{5A52D9FC
PowerShell\tests\RunTests.ps1 = PowerShell\tests\RunTests.ps1
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SfsClient", "SfsClient\SfsClient.vcxproj", "{1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}"
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "VcpkgCustomTriplets", "VcpkgCustomTriplets", "{76B26B2C-602A-4AD0-9736-4162D3FCA92A}"
ProjectSection(SolutionItems) = preProject
VcpkgCustomTriplets\arm64-release-static.cmake = VcpkgCustomTriplets\arm64-release-static.cmake
@@ -199,6 +197,12 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "VcpkgCustomTriplets", "Vcpk
VcpkgCustomTriplets\x86.cmake = VcpkgCustomTriplets\x86.cmake
EndProjectSection
EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "VcpkgPortOverlay", "VcpkgPortOverlay", "{EF18BED6-EBC0-45E9-8D61-4202528E8AAB}"
+ ProjectSection(SolutionItems) = preProject
+ VcpkgPortOverlay\CreatePortOverlay.ps1 = VcpkgPortOverlay\CreatePortOverlay.ps1
+ VcpkgPortOverlay\README.md = VcpkgPortOverlay\README.md
+ EndProjectSection
+EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.Management.Deployment.OutOfProc", "Microsoft.Management.Deployment.OutOfProc\Microsoft.Management.Deployment.OutOfProc.vcxproj", "{0BA531C8-CF0C-405B-8221-0FE51BA529D1}"
ProjectSection(ProjectDependencies) = postProject
{2B00D362-AC92-41F3-A8D2-5B1599BDCA01} = {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}
@@ -941,27 +945,6 @@ Global
{272B2B0E-40D4-4F0F-B187-519A6EF89B10}.ReleaseStatic|x64.Build.0 = ReleaseStatic|Any CPU
{272B2B0E-40D4-4F0F-B187-519A6EF89B10}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Any CPU
{272B2B0E-40D4-4F0F-B187-519A6EF89B10}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Any CPU
- {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Debug|ARM64.ActiveCfg = Debug|ARM64
- {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Debug|ARM64.Build.0 = Debug|ARM64
- {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Debug|x64.ActiveCfg = Debug|x64
- {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Debug|x64.Build.0 = Debug|x64
- {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Debug|x86.ActiveCfg = Debug|Win32
- {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Debug|x86.Build.0 = Debug|Win32
- {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Fuzzing|ARM64.ActiveCfg = Release|ARM64
- {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Fuzzing|x64.ActiveCfg = Release|x64
- {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Fuzzing|x86.ActiveCfg = Release|Win32
- {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Release|ARM64.ActiveCfg = Release|ARM64
- {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Release|ARM64.Build.0 = Release|ARM64
- {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Release|x64.ActiveCfg = Release|x64
- {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Release|x64.Build.0 = Release|x64
- {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Release|x86.ActiveCfg = Release|Win32
- {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Release|x86.Build.0 = Release|Win32
- {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|ARM64
- {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.ReleaseStatic|ARM64.Build.0 = ReleaseStatic|ARM64
- {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64
- {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64
- {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32
- {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32
{0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Debug|ARM64.ActiveCfg = Debug|ARM64
{0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Debug|ARM64.Build.0 = Debug|ARM64
{0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Debug|x64.ActiveCfg = Debug|x64
@@ -1109,8 +1092,8 @@ Global
{C54F80ED-B736-49B0-9BD3-662F57024D01} = {7C218A3E-9BC8-48FF-B91B-BCACD828C0C9}
{272B2B0E-40D4-4F0F-B187-519A6EF89B10} = {7C218A3E-9BC8-48FF-B91B-BCACD828C0C9}
{5A52D9FC-0059-4A4A-8196-427A7AA0D1C5} = {7C218A3E-9BC8-48FF-B91B-BCACD828C0C9}
- {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4} = {60618CAC-2995-4DF9-9914-45C6FC02C995}
{76B26B2C-602A-4AD0-9736-4162D3FCA92A} = {1A5D7A7D-5CB2-47D5-B40D-4E61CAEDC798}
+ {EF18BED6-EBC0-45E9-8D61-4202528E8AAB} = {1A5D7A7D-5CB2-47D5-B40D-4E61CAEDC798}
{A0B4F808-B190-41C4-97CB-C8EA1932F84F} = {8D53D749-D51C-46F8-A162-9371AAA6C2E7}
{A33223D2-550B-4D99-A53D-488B1F68683E} = {60618CAC-2995-4DF9-9914-45C6FC02C995}
{7139ED6E-8FBC-0B61-3E3A-AA2A23CC4D6A} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
diff --git a/src/AppInstallerCLITests/AppInstallerCLITests.vcxproj b/src/AppInstallerCLITests/AppInstallerCLITests.vcxproj
index 8dea7d9f4a..ad2925f603 100644
--- a/src/AppInstallerCLITests/AppInstallerCLITests.vcxproj
+++ b/src/AppInstallerCLITests/AppInstallerCLITests.vcxproj
@@ -121,8 +121,8 @@
Disabled_NO_ASYNCRTIMP;_SILENCE_STDEXT_ARR_ITERS_DEPRECATION_WARNING;_DEBUG;%(PreprocessorDefinitions)
- $(MSBuildThisFileDirectory)..\AppInstallerCommonCore;$(MSBuildThisFileDirectory)..\AppInstallerRepositoryCore\Public;$(MSBuildThisFileDirectory)..\AppInstallerRepositoryCore;$(MSBuildThisFileDirectory)..\AppInstallerCommonCore\Public;$(MSBuildThisFileDirectory)..\AppInstallerSharedLib\Public;$(MSBuildThisFileDirectory)..\AppInstallerCLICore\Public;$(MSBuildThisFileDirectory)..\AppInstallerCLICore;$(ProjectDir)..\SfsClient\sfs-client\client\include;%(AdditionalIncludeDirectories)
- $(MSBuildThisFileDirectory)..\AppInstallerCommonCore;$(MSBuildThisFileDirectory)..\AppInstallerRepositoryCore\Public;$(MSBuildThisFileDirectory)..\AppInstallerRepositoryCore;$(MSBuildThisFileDirectory)..\AppInstallerCommonCore\Public;$(MSBuildThisFileDirectory)..\AppInstallerSharedLib\Public;$(MSBuildThisFileDirectory)..\AppInstallerCLICore\Public;$(MSBuildThisFileDirectory)..\AppInstallerCLICore;$(ProjectDir)..\SfsClient\sfs-client\client\include;%(AdditionalIncludeDirectories)
+ $(MSBuildThisFileDirectory)..\AppInstallerCommonCore;$(MSBuildThisFileDirectory)..\AppInstallerRepositoryCore\Public;$(MSBuildThisFileDirectory)..\AppInstallerRepositoryCore;$(MSBuildThisFileDirectory)..\AppInstallerCommonCore\Public;$(MSBuildThisFileDirectory)..\AppInstallerSharedLib\Public;$(MSBuildThisFileDirectory)..\AppInstallerCLICore\Public;$(MSBuildThisFileDirectory)..\AppInstallerCLICore;%(AdditionalIncludeDirectories)
+ $(MSBuildThisFileDirectory)..\AppInstallerCommonCore;$(MSBuildThisFileDirectory)..\AppInstallerRepositoryCore\Public;$(MSBuildThisFileDirectory)..\AppInstallerRepositoryCore;$(MSBuildThisFileDirectory)..\AppInstallerCommonCore\Public;$(MSBuildThisFileDirectory)..\AppInstallerSharedLib\Public;$(MSBuildThisFileDirectory)..\AppInstallerCLICore\Public;$(MSBuildThisFileDirectory)..\AppInstallerCLICore;%(AdditionalIncludeDirectories)truetruefalse
@@ -148,7 +148,7 @@
_NO_ASYNCRTIMP;_SILENCE_STDEXT_ARR_ITERS_DEPRECATION_WARNING;WIN32;%(PreprocessorDefinitions)
- $(MSBuildThisFileDirectory)..\AppInstallerCommonCore;$(MSBuildThisFileDirectory)..\AppInstallerRepositoryCore\Public;$(MSBuildThisFileDirectory)..\AppInstallerRepositoryCore;$(MSBuildThisFileDirectory)..\AppInstallerCommonCore\Public;$(MSBuildThisFileDirectory)..\AppInstallerSharedLib\Public;$(MSBuildThisFileDirectory)..\AppInstallerCLICore\Public;$(MSBuildThisFileDirectory)..\AppInstallerCLICore;$(ProjectDir)..\SfsClient\sfs-client\client\include;%(AdditionalIncludeDirectories)
+ $(MSBuildThisFileDirectory)..\AppInstallerCommonCore;$(MSBuildThisFileDirectory)..\AppInstallerRepositoryCore\Public;$(MSBuildThisFileDirectory)..\AppInstallerRepositoryCore;$(MSBuildThisFileDirectory)..\AppInstallerCommonCore\Public;$(MSBuildThisFileDirectory)..\AppInstallerSharedLib\Public;$(MSBuildThisFileDirectory)..\AppInstallerCLICore\Public;$(MSBuildThisFileDirectory)..\AppInstallerCLICore;%(AdditionalIncludeDirectories)truefalse
@@ -169,9 +169,9 @@
truetrue_NO_ASYNCRTIMP;_SILENCE_STDEXT_ARR_ITERS_DEPRECATION_WARNING;NDEBUG;%(PreprocessorDefinitions)
- $(MSBuildThisFileDirectory)..\AppInstallerCommonCore;$(MSBuildThisFileDirectory)..\AppInstallerRepositoryCore\Public;$(MSBuildThisFileDirectory)..\AppInstallerRepositoryCore;$(MSBuildThisFileDirectory)..\AppInstallerCommonCore\Public;$(MSBuildThisFileDirectory)..\AppInstallerSharedLib\Public;$(MSBuildThisFileDirectory)..\AppInstallerCLICore\Public;$(MSBuildThisFileDirectory)..\AppInstallerCLICore;$(ProjectDir)..\SfsClient\sfs-client\client\include;%(AdditionalIncludeDirectories)
- $(MSBuildThisFileDirectory)..\AppInstallerCommonCore;$(MSBuildThisFileDirectory)..\AppInstallerRepositoryCore\Public;$(MSBuildThisFileDirectory)..\AppInstallerRepositoryCore;$(MSBuildThisFileDirectory)..\AppInstallerCommonCore\Public;$(MSBuildThisFileDirectory)..\AppInstallerSharedLib\Public;$(MSBuildThisFileDirectory)..\AppInstallerCLICore\Public;$(MSBuildThisFileDirectory)..\AppInstallerCLICore;$(ProjectDir)..\SfsClient\sfs-client\client\include;%(AdditionalIncludeDirectories)
- $(MSBuildThisFileDirectory)..\AppInstallerCommonCore;$(MSBuildThisFileDirectory)..\AppInstallerRepositoryCore\Public;$(MSBuildThisFileDirectory)..\AppInstallerRepositoryCore;$(MSBuildThisFileDirectory)..\AppInstallerCommonCore\Public;$(MSBuildThisFileDirectory)..\AppInstallerSharedLib\Public;$(MSBuildThisFileDirectory)..\AppInstallerCLICore\Public;$(MSBuildThisFileDirectory)..\AppInstallerCLICore;$(ProjectDir)..\SfsClient\sfs-client\client\include;%(AdditionalIncludeDirectories)
+ $(MSBuildThisFileDirectory)..\AppInstallerCommonCore;$(MSBuildThisFileDirectory)..\AppInstallerRepositoryCore\Public;$(MSBuildThisFileDirectory)..\AppInstallerRepositoryCore;$(MSBuildThisFileDirectory)..\AppInstallerCommonCore\Public;$(MSBuildThisFileDirectory)..\AppInstallerSharedLib\Public;$(MSBuildThisFileDirectory)..\AppInstallerCLICore\Public;$(MSBuildThisFileDirectory)..\AppInstallerCLICore;%(AdditionalIncludeDirectories)
+ $(MSBuildThisFileDirectory)..\AppInstallerCommonCore;$(MSBuildThisFileDirectory)..\AppInstallerRepositoryCore\Public;$(MSBuildThisFileDirectory)..\AppInstallerRepositoryCore;$(MSBuildThisFileDirectory)..\AppInstallerCommonCore\Public;$(MSBuildThisFileDirectory)..\AppInstallerSharedLib\Public;$(MSBuildThisFileDirectory)..\AppInstallerCLICore\Public;$(MSBuildThisFileDirectory)..\AppInstallerCLICore;%(AdditionalIncludeDirectories)
+ $(MSBuildThisFileDirectory)..\AppInstallerCommonCore;$(MSBuildThisFileDirectory)..\AppInstallerRepositoryCore\Public;$(MSBuildThisFileDirectory)..\AppInstallerRepositoryCore;$(MSBuildThisFileDirectory)..\AppInstallerCommonCore\Public;$(MSBuildThisFileDirectory)..\AppInstallerSharedLib\Public;$(MSBuildThisFileDirectory)..\AppInstallerCLICore\Public;$(MSBuildThisFileDirectory)..\AppInstallerCLICore;%(AdditionalIncludeDirectories)truetruetrue
@@ -1116,9 +1116,6 @@
{ca460806-5e41-4e97-9a3d-1d74b433b663}
-
- {1b9077b3-8923-4ecd-8fc9-b3190fcbe4d4}
-
diff --git a/src/AppInstallerCommonCore/AppInstallerCommonCore.vcxproj b/src/AppInstallerCommonCore/AppInstallerCommonCore.vcxproj
index 5fa3628a34..ff8ac9f05e 100644
--- a/src/AppInstallerCommonCore/AppInstallerCommonCore.vcxproj
+++ b/src/AppInstallerCommonCore/AppInstallerCommonCore.vcxproj
@@ -204,8 +204,8 @@
Disabled_NO_ASYNCRTIMP;_SILENCE_STDEXT_ARR_ITERS_DEPRECATION_WARNING;_DEBUG;%(PreprocessorDefinitions);CLICOREDLLBUILD
- $(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\AppInstallerSharedLib;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\binver;$(ProjectDir)..\SfsClient\sfs-client\client\include;%(AdditionalIncludeDirectories)
- $(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\AppInstallerSharedLib;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\binver;$(ProjectDir)..\SfsClient\sfs-client\client\include;%(AdditionalIncludeDirectories)
+ $(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\AppInstallerSharedLib;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\binver;%(AdditionalIncludeDirectories)
+ $(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\AppInstallerSharedLib;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\binver;%(AdditionalIncludeDirectories)truetruetrue
@@ -224,7 +224,7 @@
_NO_ASYNCRTIMP;_SILENCE_STDEXT_ARR_ITERS_DEPRECATION_WARNING;WIN32;%(PreprocessorDefinitions);CLICOREDLLBUILD
- $(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\AppInstallerSharedLib;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\binver;$(ProjectDir)..\SfsClient\sfs-client\client\include;%(AdditionalIncludeDirectories)
+ $(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\AppInstallerSharedLib;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\binver;%(AdditionalIncludeDirectories)truetruetrue
@@ -240,9 +240,9 @@
truetrue_NO_ASYNCRTIMP;_SILENCE_STDEXT_ARR_ITERS_DEPRECATION_WARNING;NDEBUG;%(PreprocessorDefinitions);CLICOREDLLBUILD
- $(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\AppInstallerSharedLib;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\binver;$(ProjectDir)..\SfsClient\sfs-client\client\include;%(AdditionalIncludeDirectories)
- $(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\AppInstallerSharedLib;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\binver;$(ProjectDir)..\SfsClient\sfs-client\client\include;%(AdditionalIncludeDirectories)
- $(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\AppInstallerSharedLib;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\binver;$(ProjectDir)..\SfsClient\sfs-client\client\include;%(AdditionalIncludeDirectories)
+ $(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\AppInstallerSharedLib;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\binver;%(AdditionalIncludeDirectories)
+ $(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\AppInstallerSharedLib;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\binver;%(AdditionalIncludeDirectories)
+ $(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\AppInstallerSharedLib;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\binver;%(AdditionalIncludeDirectories)truetruetrue
@@ -271,9 +271,9 @@
truetrue_NO_ASYNCRTIMP;_SILENCE_STDEXT_ARR_ITERS_DEPRECATION_WARNING;NDEBUG;%(PreprocessorDefinitions);CLICOREDLLBUILD
- $(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\AppInstallerSharedLib;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\binver;$(ProjectDir)..\SfsClient\sfs-client\client\include;%(AdditionalIncludeDirectories)
- $(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\AppInstallerSharedLib;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\binver;$(ProjectDir)..\SfsClient\sfs-client\client\include;%(AdditionalIncludeDirectories)
- $(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\AppInstallerSharedLib;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\binver;$(ProjectDir)..\SfsClient\sfs-client\client\include;%(AdditionalIncludeDirectories)
+ $(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\AppInstallerSharedLib;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\binver;%(AdditionalIncludeDirectories)
+ $(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\AppInstallerSharedLib;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\binver;%(AdditionalIncludeDirectories)
+ $(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\AppInstallerSharedLib;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\binver;%(AdditionalIncludeDirectories)truetruetrue
diff --git a/src/SfsClient/SfsClient.vcxproj b/src/SfsClient/SfsClient.vcxproj
deleted file mode 100644
index 9b50a5516e..0000000000
--- a/src/SfsClient/SfsClient.vcxproj
+++ /dev/null
@@ -1,291 +0,0 @@
-
-
-
- 16.0
- {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}
- Win32Proj
- true
- 10.0.26100.0
- 10.0.17763.0
-
-
-
-
- Debug
- ARM64
-
-
- Debug
- Win32
-
-
- ReleaseStatic
- ARM64
-
-
- ReleaseStatic
- Win32
-
-
- ReleaseStatic
- x64
-
-
- Release
- ARM64
-
-
- Release
- Win32
-
-
- Debug
- x64
-
-
- Release
- x64
-
-
-
- StaticLibrary
- true
-
-
- StaticLibrary
- false
- Spectre
-
-
- true
- true
- true
- $(ProjectDir)..\vcpkg_installed
-
-
-
-
-
-
-
-
- true
- $(SolutionDir)$(PlatformShortname)\$(Configuration)\$(ProjectName)\
-
-
- true
- $(SolutionDir)$(PlatformShortname)\$(Configuration)\$(ProjectName)\
-
-
- true
- $(SolutionDir)$(PlatformShortname)\$(Configuration)\$(ProjectName)\
-
-
- $(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\
-
-
- $(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\
-
-
- $(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\
-
-
- $(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\
-
-
- $(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\
-
-
- $(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\
-
-
- x64
-
-
- x64-release
-
-
- x64-release-static
-
-
- arm64-release-static
-
-
- x86-release-static
-
-
- arm64
-
-
- x86
-
-
- x86-release
-
-
- arm64-release
-
-
-
- CURL_STATICLIB;GUID_WINDOWS;SFS_VERSION="1.1.0";WIN32;_DEBUG;%(PreprocessorDefinitions)
- TurnOffAllWarnings
- ProgramDatabase
- stdcpp17
- Disabled
- $(ProjectDir)sfs-client\client\include\sfsclient;%(AdditionalIncludeDirectories)
- true
-
-
- MachineX86
- true
- Windows
-
-
-
-
- CURL_STATICLIB;GUID_WINDOWS;SFS_VERSION="1.1.0";WIN32;NDEBUG;%(PreprocessorDefinitions)
- Level3
- ProgramDatabase
- stdcpp17
- $(ProjectDir)sfs-client\client\include\sfsclient;%(AdditionalIncludeDirectories)
- true
-
-
- MachineX86
- true
- Windows
- true
- true
-
-
-
-
- CURL_STATICLIB;GUID_WINDOWS;SFS_VERSION="1.1.0";WIN32;NDEBUG;%(PreprocessorDefinitions)
- Level3
- ProgramDatabase
- stdcpp17
- $(ProjectDir)sfs-client\client\include\sfsclient;%(AdditionalIncludeDirectories)
- MultiThreaded
- true
-
-
- MachineX86
- true
- Windows
- true
- true
-
-
-
-
- stdcpp17
- NotUsing
- CURL_STATICLIB;GUID_WINDOWS;SFS_VERSION="1.1.0";NDEBUG;%(PreprocessorDefinitions)
- Level3
- $(ProjectDir)sfs-client\client\include\sfsclient;%(AdditionalIncludeDirectories)
- true
-
-
-
-
- stdcpp17
- NotUsing
- CURL_STATICLIB;GUID_WINDOWS;SFS_VERSION="1.1.0";NDEBUG;%(PreprocessorDefinitions)
- Level3
- $(ProjectDir)sfs-client\client\include\sfsclient;%(AdditionalIncludeDirectories)
- MultiThreaded
- true
-
-
-
-
- stdcpp17
- NotUsing
- CURL_STATICLIB;GUID_WINDOWS;SFS_VERSION="1.1.0";NDEBUG;%(PreprocessorDefinitions)%(PreprocessorDefinitions)
- Level3
- $(ProjectDir)sfs-client\client\include\sfsclient;%(AdditionalIncludeDirectories)
- true
-
-
-
-
- stdcpp17
- NotUsing
- CURL_STATICLIB;GUID_WINDOWS;SFS_VERSION="1.1.0";NDEBUG;%(PreprocessorDefinitions)%(PreprocessorDefinitions)
- Level3
- $(ProjectDir)sfs-client\client\include\sfsclient;%(AdditionalIncludeDirectories)
- MultiThreaded
- true
-
-
-
-
- stdcpp17
- NotUsing
- CURL_STATICLIB;GUID_WINDOWS;SFS_VERSION="1.1.0";_DEBUG;%(PreprocessorDefinitions)%(PreprocessorDefinitions)
- TurnOffAllWarnings
- $(ProjectDir)sfs-client\client\include\sfsclient;%(AdditionalIncludeDirectories)
- true
-
-
-
-
- stdcpp17
- NotUsing
- CURL_STATICLIB;GUID_WINDOWS;SFS_VERSION="1.1.0";_DEBUG;%(PreprocessorDefinitions)
- TurnOffAllWarnings
- $(ProjectDir)sfs-client\client\include\sfsclient;%(AdditionalIncludeDirectories)
- true
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/SfsClient/SfsClient.vcxproj.filters b/src/SfsClient/SfsClient.vcxproj.filters
deleted file mode 100644
index 6db39e4511..0000000000
--- a/src/SfsClient/SfsClient.vcxproj.filters
+++ /dev/null
@@ -1,159 +0,0 @@
-
-
-
-
- {7825c1db-0159-4653-b26c-bc674bb9e29f}
-
-
- {357ffe7c-3ce6-4b0d-9e93-bbda28fb9fc3}
-
-
- {d7879d14-b049-4837-a336-895bd20ab5d8}
-
-
- {15462934-ddd8-46ad-a0fd-110df7fa2acb}
-
-
- {133cf863-8baa-4ce2-9050-40155b027f04}
-
-
- {93204abc-3d4c-4cf0-9433-db8c4ad667b5}
-
-
- {102d246a-6b50-4171-a909-cb68923ac321}
-
-
-
-
- include\sfsclient
-
-
- include\sfsclient
-
-
- include\sfsclient
-
-
- include\sfsclient
-
-
- include\sfsclient
-
-
- include\sfsclient
-
-
- include\sfsclient
-
-
- include\sfsclient
-
-
- include\sfsclient
-
-
- include\sfsclient
-
-
- include\sfsclient
-
-
-
-
- src
-
-
- src
-
-
- src
-
-
- src
-
-
- src
-
-
- src
-
-
- src
-
-
- src
-
-
- src
-
-
- src\details
-
-
- src\details
-
-
- src\details
-
-
- src\details
-
-
- src\details
-
-
- src\details
-
-
- src\details
-
-
- src\details
-
-
- src\details
-
-
- src\details
-
-
- src\details
-
-
- src\details
-
-
- src\details\connection
-
-
- src\details\connection
-
-
- src\details\connection
-
-
- src\details\connection
-
-
- src\details\connection
-
-
- src\details\connection
-
-
- src\details\connection\mock
-
-
- src\details\connection\mock
-
-
- src\details\entity
-
-
- src\details\entity
-
-
- src\details\entity
-
-
-
diff --git a/src/SfsClient/readme.md b/src/SfsClient/readme.md
deleted file mode 100644
index 84fcea431b..0000000000
--- a/src/SfsClient/readme.md
+++ /dev/null
@@ -1,19 +0,0 @@
-## SfsClient
-
-Do not change code under the sfs-client directory; it contains sfs-client source code from release 1.1.0 (https://github.com/microsoft/sfs-client/releases/tag/1.1.0).
-It was initially created using git subtree command:
-```
- git subtree add --prefix=src/SfsClient/sfs-client https://github.com/microsoft/sfs-client.git be733af9e5c8e9227f2018ff618800bf08a31180 --squash
-```
-Then updated to release 1.1.0 using:
-```
- git subtree pull -P src/SfsClient/sfs-client https://github.com/microsoft/sfs-client 1.1.0 --squash
-```
-
-
-### Update
-To update, run the following command, then update the above commit for reference. 'master' can be replaced with the appropriate commit spec as desired.
-```
- git subtree pull -P src/SfsClient/sfs-client https://github.com/microsoft/sfs-client master --squash
-```
-**When committing the PR, DO NOT squash it. The two commits are needed as is to allow for future subtree pulls.**
diff --git a/src/SfsClient/sfs-client/.clang-format b/src/SfsClient/sfs-client/.clang-format
deleted file mode 100644
index 4ee2a2ec17..0000000000
--- a/src/SfsClient/sfs-client/.clang-format
+++ /dev/null
@@ -1,29 +0,0 @@
-# Copyright (c) Microsoft Corporation. All rights reserved.
-#
-# -- Usage --
-# Read README.md for initial context, and instructions for VSCode and command line.
-#
-# See here for the meaning of each item in this file: https://clang.llvm.org/docs/ClangFormatStyleOptions.html
-# To get all the options that are part of a standard style such as Microsoft, do this:
-# > clang-format --style=Microsoft -dump-config > clang-format-microsoft.txt
-#
-# -- Philosophy --
-# We will try to adhere to the standard Microsoft style as much as possible.
-# The overrides below are deviations from the standard. Keep it short.
----
-Language: Cpp
-BasedOnStyle: Microsoft
-
-AllowAllArgumentsOnNextLine: false
-AllowAllParametersOfDeclarationOnNextLine: false
-AlwaysBreakBeforeMultilineStrings: true
-AlwaysBreakTemplateDeclarations: Yes
-BinPackArguments: false
-BinPackParameters: false
-BraceWrapping:
- AfterCaseLabel: true
-BreakConstructorInitializers: BeforeComma
-BreakStringLiterals: false
-InsertNewlineAtEOF: true
-PackConstructorInitializers: CurrentLine
-PointerAlignment: Left
diff --git a/src/SfsClient/sfs-client/.cmake-format.json b/src/SfsClient/sfs-client/.cmake-format.json
deleted file mode 100644
index a06983a3f8..0000000000
--- a/src/SfsClient/sfs-client/.cmake-format.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "first_comment_is_literal": "true",
- "keyword_case": "upper",
- "line_ending": "windows",
- "max_pargs_hwrap": 3,
- "tab_size": 4
-}
\ No newline at end of file
diff --git a/src/SfsClient/sfs-client/.github/CODEOWNERS b/src/SfsClient/sfs-client/.github/CODEOWNERS
deleted file mode 100644
index 69e67dd6cb..0000000000
--- a/src/SfsClient/sfs-client/.github/CODEOWNERS
+++ /dev/null
@@ -1,2 +0,0 @@
-# The SFS Client Reviewers team will be requested for review when someone opens a pull request.
-* @microsoft/sfs-client-reviewers
\ No newline at end of file
diff --git a/src/SfsClient/sfs-client/.github/ISSUE_TEMPLATE/bug_report.md b/src/SfsClient/sfs-client/.github/ISSUE_TEMPLATE/bug_report.md
deleted file mode 100644
index 74514987e3..0000000000
--- a/src/SfsClient/sfs-client/.github/ISSUE_TEMPLATE/bug_report.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-name: Bug report
-about: Create a report to help us improve
-title: ''
-labels: ''
-assignees: ''
-
----
-
-**Describe the bug**
-A clear and concise description of what the bug is.
-
-**To Reproduce**
-Steps to reproduce the behavior:
-1. Go to '...'
-2. Click on '....'
-3. Scroll down to '....'
-4. See error
-
-**Expected behavior**
-A clear and concise description of what you expected to happen.
-
-**Additional context**
-Add any other context about the problem here.
diff --git a/src/SfsClient/sfs-client/.github/ISSUE_TEMPLATE/feature_request.md b/src/SfsClient/sfs-client/.github/ISSUE_TEMPLATE/feature_request.md
deleted file mode 100644
index bbcbbe7d61..0000000000
--- a/src/SfsClient/sfs-client/.github/ISSUE_TEMPLATE/feature_request.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-name: Feature request
-about: Suggest an idea for this project
-title: ''
-labels: ''
-assignees: ''
-
----
-
-**Is your feature request related to a problem? Please describe.**
-A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
-
-**Describe the solution you'd like**
-A clear and concise description of what you want to happen.
-
-**Describe alternatives you've considered**
-A clear and concise description of any alternative solutions or features you've considered.
-
-**Additional context**
-Add any other context or screenshots about the feature request here.
diff --git a/src/SfsClient/sfs-client/.github/dependabot.yml b/src/SfsClient/sfs-client/.github/dependabot.yml
deleted file mode 100644
index c64b5ab54b..0000000000
--- a/src/SfsClient/sfs-client/.github/dependabot.yml
+++ /dev/null
@@ -1,23 +0,0 @@
-# Dependabot helps maintain dependencies updated for different package ecosystems
-#
-# Here is the documentation for all configuration options:
-# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
-
-version: 2
-updates:
-
- # Maintain dependencies for GitHub Actions
- - package-ecosystem: "github-actions"
- directory: "/"
- schedule:
- interval: "weekly"
-
- # Maintain dependencies for pip
- - package-ecosystem: "pip"
- directory: "/"
- schedule:
- interval: "weekly"
- ignore:
- # Ignore patch updates for all pip dependencies
- - dependency-name: "*"
- update-types: ["version-update:semver-patch"]
diff --git a/src/SfsClient/sfs-client/.github/pull_request_template.md b/src/SfsClient/sfs-client/.github/pull_request_template.md
deleted file mode 100644
index ddaa8e6abe..0000000000
--- a/src/SfsClient/sfs-client/.github/pull_request_template.md
+++ /dev/null
@@ -1,15 +0,0 @@
-#### Related Issues
-
-- Closes #
-- Helps #
-
-#### Why is this change being made?
-
-#### What is being changed?
-
-#### How was the change tested?
-
-
-
-
-
diff --git a/src/SfsClient/sfs-client/.github/workflows/initialize-codeql/action.yml b/src/SfsClient/sfs-client/.github/workflows/initialize-codeql/action.yml
deleted file mode 100644
index 990b0603bf..0000000000
--- a/src/SfsClient/sfs-client/.github/workflows/initialize-codeql/action.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-name: Initialize CodeQL
-
-description: Initializes CodeQL action to be used in build workflows
-
-runs:
- using: "composite"
-
- steps:
- - name: Initialize CodeQL
- uses: github/codeql-action/init@v3
- with:
- languages: cpp
\ No newline at end of file
diff --git a/src/SfsClient/sfs-client/.github/workflows/install-winget/action.yml b/src/SfsClient/sfs-client/.github/workflows/install-winget/action.yml
deleted file mode 100644
index 55847ae2ce..0000000000
--- a/src/SfsClient/sfs-client/.github/workflows/install-winget/action.yml
+++ /dev/null
@@ -1,56 +0,0 @@
-name: Install WinGet
-
-description: Installs WinGet from sources, caching the installation files if possible
-
-inputs:
- winget-installation-cache:
- description: 'Where the installation files will be cached'
- required: false
- default: 'winget-installation-cache'
-
-runs:
- using: "composite"
-
- steps:
- - name: Cache WinGet installation
- id: cache-winget-installation
- uses: actions/cache@v4
- with:
- path: winget-installation-cache
- key: winget-installation
-
- # Winget is not available in the windows-latest image as it is Windows Server 2022 and winget is not yet available officially for it.
- # We can still install it in "experimental" mode manually though.
- - name: Install WinGet
- shell: pwsh
- run: |
- # Check it doesn't exist to avoid installing it without need
- if (!(Get-Command 'winget.exe' -CommandType Application -ErrorAction SilentlyContinue))
- {
- New-Item -ItemType Directory ${{ inputs.winget-installation-cache }} -Force | Out-Null
- Set-Location ${{ inputs.winget-installation-cache }}
- $ProgressPreference = "silentlyContinue"
- $WingetInstaller = "Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle"
- if (!(Test-Path $WingetInstaller))
- {
- Write-Host "Downloading Winget"
- Invoke-WebRequest -Uri https://github.com/microsoft/winget-cli/releases/download/v1.7.10582/$WingetInstaller -OutFile $WingetInstaller
- }
- $VCLibsInstaller = "Microsoft.VCLibs.x64.14.00.Desktop.appx"
- if (!(Test-Path $VCLibsInstaller))
- {
- Write-Host "Downloading Winget dependency VCLibs"
- Invoke-WebRequest -Uri https://aka.ms/$VCLibsInstaller -OutFile $VCLibsInstaller
- }
- $XamlInstaller = "Microsoft.UI.Xaml.2.8.x64.appx"
- if (!(Test-Path $XamlInstaller))
- {
- Write-Host "Downloading Winget dependency Xaml"
- Invoke-WebRequest -Uri https://github.com/microsoft/microsoft-ui-xaml/releases/download/v2.8.6/$XamlInstaller -OutFile $XamlInstaller
- }
-
- Import-Module -Name Appx -UseWindowsPowershell | Out-Null
- Add-AppxPackage $VCLibsInstaller
- Add-AppxPackage $XamlInstaller
- Add-AppxPackage $WingetInstaller
- }
diff --git a/src/SfsClient/sfs-client/.github/workflows/main-build-ubuntu.yml b/src/SfsClient/sfs-client/.github/workflows/main-build-ubuntu.yml
deleted file mode 100644
index 59ee8521c9..0000000000
--- a/src/SfsClient/sfs-client/.github/workflows/main-build-ubuntu.yml
+++ /dev/null
@@ -1,46 +0,0 @@
-name: Main Build (Ubuntu)
-
-on:
- push:
- branches: [ "main" ]
-
-# Permissions and environment values to be able to update the dependency graph with vcpkg information
-# and to enable the writing/uploading of CodeQL scan results
-permissions:
- contents: write
- security-events: write
-
-env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- VCPKG_FEATURE_FLAGS: dependencygraph
-
-jobs:
- build-ubuntu:
- runs-on: ubuntu-latest
-
- steps:
- - uses: actions/checkout@v4
-
- - name: Initialize CodeQL
- uses: ./.github/workflows/initialize-codeql
-
- - name: Setup
- run: source ./scripts/setup.sh
-
- - name: Build and Test (no test overrides)
- run: |
- ./scripts/build.sh
- ./scripts/test.sh --output-on-failure
-
- - name: Build and Test (with test overrides)
- run: |
- ./scripts/build.sh --enable-test-overrides
- ./scripts/test.sh --output-on-failure
-
- - name: Build and Test (Release)
- run: |
- ./scripts/build.sh --build-type Release
- ./scripts/test.sh --output-on-failure
-
- - name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@v3
diff --git a/src/SfsClient/sfs-client/.github/workflows/main-build-windows.yml b/src/SfsClient/sfs-client/.github/workflows/main-build-windows.yml
deleted file mode 100644
index 0c2a6cf653..0000000000
--- a/src/SfsClient/sfs-client/.github/workflows/main-build-windows.yml
+++ /dev/null
@@ -1,53 +0,0 @@
-name: Main Build (Windows)
-
-on:
- push:
- branches: [ "main" ]
-
-# Permissions and environment values to be able to update the dependency graph with vcpkg information
-# and to enable the writing/uploading of CodeQL scan results
-permissions:
- contents: write
- security-events: write
-
-env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- VCPKG_FEATURE_FLAGS: dependencygraph
-
-jobs:
- build-windows:
- runs-on: 'windows-latest'
-
- steps:
- - uses: actions/checkout@v4
-
- - name: Initialize CodeQL
- uses: ./.github/workflows/initialize-codeql
-
- - name: Install Winget
- uses: ./.github/workflows/install-winget
-
- - name: Setup
- shell: pwsh
- run: .\scripts\Setup.ps1
-
- - name: Build and Test (no test overrides)
- shell: pwsh
- run: |
- .\scripts\Build.ps1
- .\scripts\Test.ps1 -OutputOnFailure
-
- - name: Build and Test (with test overrides)
- shell: pwsh
- run: |
- .\scripts\Build.ps1 -EnableTestOverrides
- .\scripts\Test.ps1 -OutputOnFailure
-
- - name: Build and Test (Release)
- shell: pwsh
- run: |
- .\scripts\Build.ps1 -BuildType Release
- .\scripts\Test.ps1 -OutputOnFailure
-
- - name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@v3
diff --git a/src/SfsClient/sfs-client/.github/workflows/pr.yml b/src/SfsClient/sfs-client/.github/workflows/pr.yml
deleted file mode 100644
index f3740d36c4..0000000000
--- a/src/SfsClient/sfs-client/.github/workflows/pr.yml
+++ /dev/null
@@ -1,87 +0,0 @@
-name: PR Build
-
-env:
- # Set up vcpkg to read from the GitHub cache (https://learn.microsoft.com/en-us/vcpkg/consume/binary-caching-github-actions-cache)
- VCPKG_BINARY_SOURCES: 'clear;x-gha,readwrite'
-
-on:
- pull_request:
- branches: [ "main" ]
-
-jobs:
- build-windows:
- runs-on: 'windows-latest'
-
- steps:
- - uses: actions/checkout@v4
-
- - name: Set up required environment variables for vcpkg cache
- uses: actions/github-script@v7
- with:
- script: |
- core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
- core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
-
- - name: Initialize CodeQL
- uses: ./.github/workflows/initialize-codeql
-
- - name: Install Winget
- uses: ./.github/workflows/install-winget
-
- - name: Setup
- shell: pwsh
- run: .\scripts\Setup.ps1
-
- - name: Check formatting
- shell: pwsh
- run: python .\scripts\check-format.py
-
- - name: Build and Test (no test overrides)
- shell: pwsh
- run: |
- .\scripts\Build.ps1
- .\scripts\Test.ps1 -OutputOnFailure
-
- - name: Build and Test (with test overrides)
- shell: pwsh
- run: |
- .\scripts\Build.ps1 -EnableTestOverrides
- .\scripts\Test.ps1 -OutputOnFailure
-
- - name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@v3
-
- build-ubuntu:
- runs-on: ubuntu-latest
-
- steps:
- - uses: actions/checkout@v4
-
- - name: Set up required environment variables for vcpkg cache
- uses: actions/github-script@v7
- with:
- script: |
- core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
- core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
-
- - name: Initialize CodeQL
- uses: ./.github/workflows/initialize-codeql
-
- - name: Setup
- run: source ./scripts/setup.sh
-
- - name: Check formatting
- run: python ./scripts/check-format.py
-
- - name: Build and Test (no test overrides)
- run: |
- ./scripts/build.sh
- ./scripts/test.sh --output-on-failure
-
- - name: Build and Test (with test overrides)
- run: |
- ./scripts/build.sh --enable-test-overrides
- ./scripts/test.sh --output-on-failure
-
- - name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@v3
diff --git a/src/SfsClient/sfs-client/.gitignore b/src/SfsClient/sfs-client/.gitignore
deleted file mode 100644
index 934e6cbb7d..0000000000
--- a/src/SfsClient/sfs-client/.gitignore
+++ /dev/null
@@ -1,45 +0,0 @@
-# Prerequisites
-*.d
-
-# Compiled Object files
-*.slo
-*.lo
-*.o
-*.obj
-
-# Precompiled Headers
-*.gch
-*.pch
-
-# Compiled Dynamic libraries
-*.so
-*.dylib
-*.dll
-
-# Fortran module files
-*.mod
-*.smod
-
-# Compiled Static libraries
-*.lai
-*.la
-*.a
-*.lib
-
-# Executables
-*.exe
-*.out
-*.app
-
-# Build
-/build
-
-# VSCode specific folder
-/.vscode
-
-# Vcpkg
-/vcpkg
-/vcpkg_installed
-
-# Formatting temporary file
-/.tmp_formatted
diff --git a/src/SfsClient/sfs-client/API.md b/src/SfsClient/sfs-client/API.md
deleted file mode 100644
index acc930ad3c..0000000000
--- a/src/SfsClient/sfs-client/API.md
+++ /dev/null
@@ -1,59 +0,0 @@
-## SFSClient
-
-To start using the SFSClient library, use `SFSClient::Make()` to create an `SFSClient` instance, which allows you to use the SFS APIs.
-The first argument to the factory is a `ClientConfig` struct. Configuring this struct allows you to customize the behavior of the client.
-Refer to the documentation of the `ClientConfig` struct in [ClientConfig.h](client/include/sfsclient/ClientConfig.h) to see the available options.
-
-## Logging Callback
-
-To retrieve logging information from the API, set a logging callback in `ClientConfig::logCallbackFn` when constructing an SFSClient instance with `SFSClient::Make()`.
-
-The logging callback function has the signature:
-
-```cpp
-void callback(const SFS::LogData&);
-```
-
-An example to log the data directly to the standard output using `std::cout`:
-
-```cpp
-void LoggingCallback(const SFS::LogData& logData)
-{
- std::cout << "Log: [" << ToString(logData.severity) << "]" << " " << logData.file << ":"
- << logData.line << " " << logData.message << std::endl;
-}
-```
-
-Notes:
-- The callback itself is processed in the main thread. Do not use a blocking callback. If heavy processing has to be done, consider capturing the data and processing another thread.
-- The LogData contents only exist within the callback call. If the processing will be done later, you should copy the data elsewhere.
-- The callback should not do any re-entrant calls (e.g. call `SFSClient` methods).
-
-## Class instances
-
-It is recommended to only create a single `SFSClient` instance, even if multiple threads will be used.
-Each `GetLatestDownloadInfo()` call will create its own connection and should not interfere with other calls.
-
-### Thread safety
-
-All API calls are thread-safe.
-
-If a logging callback is set in a multi-threaded environment, and the same `SFSClient()` is reused across different threads, the same callback will be called by all usages of the class. So, make sure the callback itself is also thread-safe.
-
-## Content types
-
-A few data types are provided which abstract contents that can be sent by the SFS Service, such as `Content`, `ContentId`, `File`.
-These data types provide `noexcept` methods to interact with member data.
-
-## Retry Behavior
-
-The API follows a certain set of rules to retry upon reaching specific HTTP Status Codes. The behavior is configurable through the `retryOnError` member of `RequestParams`.
-
-By default, the client will retry up to 3 times when reaching the following HTTP Status Codes:
-- 429: Too Many Requests
-- 500: Internal Server Error
-- 502: Bad Gateway
-- 503: Server Busy
-- 504: Gateway Timeout
-
-Between each retry the Client will wait an interval that follows either the `Retry-After` response header, or an exponential backoff calculation with a factor of 2 starting from 15s.
diff --git a/src/SfsClient/sfs-client/CMakeLists.txt b/src/SfsClient/sfs-client/CMakeLists.txt
deleted file mode 100644
index 31bb1010cd..0000000000
--- a/src/SfsClient/sfs-client/CMakeLists.txt
+++ /dev/null
@@ -1,79 +0,0 @@
-# Copyright (c) Microsoft Corporation.
-# Licensed under the MIT License.
-
-cmake_minimum_required(VERSION 3.19)
-
-# Tell CMake to look in cmake for our custom CMake module files.
-set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
-
-include(SFSOptions)
-
-if(SFS_BUILD_TESTS)
- list(APPEND VCPKG_MANIFEST_FEATURES "tests")
-endif()
-
-set(CMAKE_TOOLCHAIN_FILE "vcpkg/scripts/buildsystems/vcpkg.cmake")
-
-# By default using x64 static custom triplet for Windows. Can be overridden by
-# setting VCPKG_TARGET_TRIPLET
-if(SFS_WINDOWS_STATIC_ONLY
- AND WIN32
- AND NOT DEFINED VCPKG_TARGET_TRIPLET)
- set(VCPKG_TARGET_TRIPLET "x64-windows-static-custom")
-endif()
-
-# Semver versioning. Given MAJOR.MINOR.PATCH, increment the:
-#
-# 1. MAJOR version when you make incompatible API changes
-# 2. MINOR version when you add functionality in a backward compatible manner
-# 3. PATCH version when you make backward compatible bug fixes
-set(SFS_LIBRARY_VERSION "1.1.0")
-
-project(
- sfsclient
- VERSION ${SFS_LIBRARY_VERSION}
- LANGUAGES CXX)
-
-set(CMAKE_CXX_STANDARD 17)
-set(CMAKE_CXX_STANDARD_REQUIRED True)
-
-# Use this function to set warning level and warnings as errors for a given
-# target
-function(set_compile_options_for_target target)
- if(MSVC)
- # Enable some MSVC warnings that are off by default:
- #
- # * 4062: all enums are handled in switch statements without a default
- # label
- # * 4191: unsafe conversion from 'type of expression' to 'type required'
- # * 4242: possible loss of data (identifier)
- # * 4254: possible loss of data (operator)
- # * 4287: 'operator': unsigned/negative constant mismatch
- # * 4296: 'operator': expression is always true (or false)
- # * 4388: signed/unsigned mismatch
- # * 4800: implicit conversion to bool; possible information loss
- # * 4946: reinterpret_cast used between related classes
-
- # cmake-format: off
- target_compile_options(${target} PRIVATE /W4 /WX /we4062 /we4191 /we4242 /we4254 /we4287 /we4296 /we4388 /we4800 /we4946)
- # cmake-format: on
- else()
- target_compile_options(
- ${target}
- PRIVATE -Wall
- -Wextra
- -Wpedantic
- -Werror)
- endif()
-endfunction()
-
-if(SFS_WINDOWS_STATIC_ONLY AND MSVC)
- # For MSVC, use a multi-threaded statically-linked runtime library
- set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>")
-endif()
-
-add_subdirectory(client)
-
-if(SFS_BUILD_SAMPLES)
- add_subdirectory(samples)
-endif()
diff --git a/src/SfsClient/sfs-client/CODE_OF_CONDUCT.md b/src/SfsClient/sfs-client/CODE_OF_CONDUCT.md
deleted file mode 100644
index f9ba8cf65f..0000000000
--- a/src/SfsClient/sfs-client/CODE_OF_CONDUCT.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# Microsoft Open Source Code of Conduct
-
-This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
-
-Resources:
-
-- [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/)
-- [Microsoft Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/)
-- Contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with questions or concerns
diff --git a/src/SfsClient/sfs-client/DEVELOPMENT.md b/src/SfsClient/sfs-client/DEVELOPMENT.md
deleted file mode 100644
index 015159ac88..0000000000
--- a/src/SfsClient/sfs-client/DEVELOPMENT.md
+++ /dev/null
@@ -1,6 +0,0 @@
-# cgmanifest.json
-
-Keep this file updated as you update `vcpkg.json`. It must indicate the dependencies we use for proper automatic scanning of dependencies done in the Azure DevOps backend.
-The folder `build\vcpkg_installed\vcpkg\info` is a good source of truth of which vcpkg packages are installed. It does however accumulate temporary packages you may have added in the past. Before using it, try cleaning the build folder and re-building.
-
-Once you find the GitHub repo of the dependency, use the version on the tags page to find the commit hash that corresponds to the installed version.
diff --git a/src/SfsClient/sfs-client/LICENSE b/src/SfsClient/sfs-client/LICENSE
deleted file mode 100644
index 9e841e7a26..0000000000
--- a/src/SfsClient/sfs-client/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
- MIT License
-
- Copyright (c) Microsoft Corporation.
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE
diff --git a/src/SfsClient/sfs-client/NOTICE.md b/src/SfsClient/sfs-client/NOTICE.md
deleted file mode 100644
index da464a7d05..0000000000
--- a/src/SfsClient/sfs-client/NOTICE.md
+++ /dev/null
@@ -1,441 +0,0 @@
-# NOTICES
-
-This repository incorporates material as listed below or described in the code.
-
----------------------------------------------------------
-
-**Component:**
-
-CorrelationVector-Cpp
-
-**Open Source License/Copyright Notice:**
-
-MIT License
-
-Copyright (c) Microsoft Corporation. All rights reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE
-
----------------------------------------------------------
-
-**Component:**
-
-curl
-
-**Open Source License/Copyright Notice:**
-
-COPYRIGHT AND PERMISSION NOTICE
-
-Copyright (c) 1996 - 2024, Daniel Stenberg, , and many
-contributors, see the THANKS file.
-
-All rights reserved.
-
-Permission to use, copy, modify, and distribute this software for any purpose
-with or without fee is hereby granted, provided that the above copyright
-notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN
-NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
-OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of a copyright holder shall not
-be used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization of the copyright holder.
-
----------------------------------------------------------
-
-**Component:**
-
-c-ares
-
-**Open Source License/Copyright Notice:**
-
-MIT License
-
-Copyright (c) 1998 Massachusetts Institute of Technology Copyright (c) 2007 - 2023 Daniel Stenberg with many contributors, see AUTHORS file.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-**Additional Attribution:**
-
-c-ares is based on ares, and these are the people that have worked on it since
-the fork was made:
-
-Albert Chin
-Alex Loukissas
-Alexander Klauer
-Alexander Lazic
-Alexey Simak
-Andreas Rieke
-Andrew Andkjar
-Andrew Ayer
-Andrew C. Morrow
-Ashish Sharma
-Ben Greear
-Ben Noordhuis
-BogDan Vatra
-Brad House
-Brad Spencer
-Bram Matthys
-Chris Araman
-Dan Fandrich
-Daniel Johnson
-Daniel Stenberg
-David Drysdale
-David Stuart
-Denis Bilenko
-Dima Tisnek
-Dirk Manske
-Dominick Meglio
-Doug Goldstein
-Doug Kwan
-Duncan Wilcox
-Eino Tuominen
-Erik Kline
-Fedor Indutny
-Frederic Germain
-Geert Uytterhoeven
-George Neill
-Gisle Vanem
-Google LLC
-Gregor Jasny
-Guenter Knauf
-Guilherme Balena Versiani
-Gunter Knauf
-Henrik Stoerner
-Jakub Hrozek
-James Bursa
-Jérémy Lal
-John Schember
-Keith Shaw
-Lei Shi
-Marko Kreen
-Michael Wallner
-Mike Crowe
-Nick Alcock
-Nick Mathewson
-Nicolas "Pixel" Noble
-Ning Dong
-Oleg Pudeyev
-Patrick Valsecchi
-Patrik Thunstrom
-Paul Saab
-Peter Pentchev
-Phil Blundell
-Poul Thomas Lomholt
-Ravi Pratap
-Robin Cornelius
-Saúl Ibarra Corretgé
-Sebastian at basti79.de
-Shmulik Regev
-Stefan Bühler
-Steinar H. Gunderson
-Svante Karlsson
-Tofu Linden
-Tom Hughes
-Tor Arntsen
-Viktor Szakats
-Vlad Dinulescu
-William Ahern
-Yang Tse
-hpopescu at ixiacom.com
-liren at vivisimo.com
-nordsturm
-saghul
-
----------------------------------------------------------
-
-**Component:**
-
-openssl
-
-**Open Source License/Copyright Notice:**
-
-
- Apache License
- Version 2.0, January 2004
- https://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
-
-**Additional Attribution:**
-
-
-
-Authors
-=======
-
-This is the list of OpenSSL authors for copyright purposes.
-It does not necessarily list everyone who has contributed code,
-since in some cases, their employer may be the copyright holder.
-To see the full list of contributors, see the revision history in
-source control.
-
-Groups
-------
-
- * OpenSSL Software Services, Inc.
- * OpenSSL Software Foundation, Inc.
-
-Individuals
------------
-
- * Andy Polyakov
- * Ben Laurie
- * Ben Kaduk
- * Bernd Edlinger
- * Bodo Möller
- * David Benjamin
- * David von Oheimb
- * Dmitry Belyavskiy (Дмитрий Белявский)
- * Emilia Käsper
- * Eric Young
- * Geoff Thorpe
- * Holger Reif
- * Kurt Roeckx
- * Lutz Jänicke
- * Mark J. Cox
- * Matt Caswell
- * Matthias St. Pierre
- * Nicola Tuveri
- * Nils Larsch
- * Patrick Steuer
- * Paul Dale
- * Paul C. Sutton
- * Paul Yang
- * Ralf S. Engelschall
- * Rich Salz
- * Richard Levitte
- * Shane Lontis
- * Stephen Henson
- * Steve Marquess
- * Tim Hudson
- * Tomáš Mráz
- * Ulf Möller
- * Viktor Dukhovni
-
-
----------------------------------------------------------
-
-**Component:** nlohmann/json
-
-**Open Source License/Copyright Notice:**
-
-MIT License
-
-Copyright (c) 2013-2022 Niels Lohmann
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/src/SfsClient/sfs-client/README.md b/src/SfsClient/sfs-client/README.md
deleted file mode 100644
index c16717c799..0000000000
--- a/src/SfsClient/sfs-client/README.md
+++ /dev/null
@@ -1,195 +0,0 @@
-# SFS Client
-
-[](https://github.com/microsoft/sfs-client/actions/workflows/main-build-windows.yml) [](https://github.com/microsoft/sfs-client/actions/workflows/main-build-ubuntu.yml)
-
-## Introduction
-
-This repository holds the Simple File Solution (SFS) Client, a C++ library that simplifies the interface with the SFS service.
-Read below to get started on developing and using the library.
-
-## Usage
-
-Follow the [API](API.md) document for tips on how to use the API.
-
-## Getting Started
-
-### Prerequisites
-
-#### Setup script
-
-There are a few dependencies required to work on this project.
-To set them up, use the Setup script.
-
-Windows:
-```powershell
-.\scripts\Setup.ps1
-```
-
-Linux:
-```bash
-source ./scripts/setup.sh
-```
-
-The script can be run multiple times as it does not replace what has been installed, and updates dependencies.
-It also sets up useful command-line aliases that can be used while developing.
-
-## Consuming the library
-
-This library is distributed as Source Code and meant for consumption in this format. Below we outline how to easily consume us through the vcpkg tool, but feel free to use other methods to incorporate the source.
-
-### vcpkg
-
-The [vcpkg](https://vcpkg.io/) tool is a Microsoft dependency manager for C/C++. It works "for all platforms, buildsystems, and workflows".
-In general the dependencies are registered in the central vcpkg registry, where the "portfile" recipes are hosted. These files indicate the way the dependencies should be acquired and built.
-
-One of the features it provides is also a way to find dependencies listed in the local filesystem. See the [overlay-ports](https://learn.microsoft.com/en-us/vcpkg/concepts/overlay-ports) feature to see that.
-We are not hosted in the central vcpkg registry, but we provide a template overlay-port for easy consumption of the library. See the [sfs-client-vcpkg-port](./sfs-client-vcpkg-port) folder for the files you need to have in your local repository in order to consume us. A few placeholders have to be filled in on those files.
-
-## Formatting
-
-This project is currently using the clang-format tool to format its source code according to predefined rules.
-It is also using cmake-format to format the CMakeLists.txt files.
-Both are installed automatically with the Setup script.
-
-### Automatic usage
-
-The project is configured to automatically run formatting upon committing so nobody introduces
-unformatted changes to the codebase. This is done through a pre-commit hook.
-If you must avoid the hook, you can use `git commit -n` to bypass it.
-
-### Running on command line
-
-Use -h to see the binary help:
-```
-clang-format -h
-cmake-format -h
-```
-
-Use -i to edit a file inplace:
-```
-clang-format -i ./interface.cpp
-cmake-format -i ./CMakeLists.txt
-```
-
-Wildcards are accepted in clang-format:
-```
-clang-format -i ./*.h
-```
-
-## Building
-
-To build, use the `build` command. It simplifies the CMake build commands and re-generates CMake configurations if needed.
-
-Available build options:
-
-| Switch (PowerShell) | Switch (Bash) | Description |
-|----------------------|---------------------------|------------------------------------------------------------------------------------------|
-| -Clean | --clean | Use this to clean the build folder before building. |
-| -BuildType | --build-type | Use this to define the build type between "Debug" and "Release". The default is "Debug". |
-| -EnableTestOverrides | --enable-test-overrides | Use this to enable test overrides. See [TEST](TEST.md) for more. |
-| -BuildTests | --build-tests {ON, OFF} | Use this to build tests alongside the library. On by default. |
-| -BuildSamples | --build-samples {ON, OFF} | Use this to build samples alongside the library. On by default. |
-
-See [below](#building-with-cmake-vscode-extension) for building within VSCode.
-
-## VSCode
-
-[Visual Studio Code](https://code.visualstudio.com) is the recommended editor to work with this project.
-But you're free to use other editors and command-line tools.
-
-### Configuring VSCode includes with CMake
-
-VSCode has a great integration with CMake through the CMake Tools extension (ms-vscode.cmake-tools).
-It allows you to configure and build the project through the UI.
-
-Open the command pane on VSCode and search for "C/C++: Edit Configurations (JSON)" to create a c_cpp_properties.json file under a .vscode folder in repo root.
-The folder is ignored in git by default.
-Add the following line to the "configurations" element to make VSCode start using the includes defined in the CMakeLists.txt files.
-
-```json
-"configurations": [
- {
- "configurationProvider": "ms-vscode.cmake-tools"
- }
-]
-```
-
-### Formatting C++ Sources with VSCode
-
-Install the extension https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools and Shift+Alt+F inside a file.
-You can also access "Format" options by right clicking on an open file or over a line selection.
-
-If you want it, you can also make VSCode format on each Save operation by adding this to your User JSON settings:
-`"editor.formatOnSave": true`
-
-### vcpkg integration
-
-From [the vcpkg docs](https://github.com/Microsoft/vcpkg/#visual-studio-code-with-cmake-tools):
-
-Adding the following to your workspace settings.json will make CMake Tools automatically use vcpkg for libraries:
-
-```json
-{
- "cmake.configureSettings": {
- "CMAKE_TOOLCHAIN_FILE": "[vcpkg root]/scripts/buildsystems/vcpkg.cmake"
- }
-}
-```
-
-### Building with CMake VSCode extension
-
-If you're using the CMake Tools extension on VSCode, you can set the build options through the VSCode settings. Add something like below to either your user or workspace JSON settings to get a default value for an option. You can also later use the command "Edit CMake Cache (UI)" for visual editing.
-
-```json
-"cmake.configureArgs": [
- "-DSFS_ENABLE_TEST_OVERRIDES=ON"
-]
-```
-
-See [SFSOptions.cmake](cmake/SFSOptions.cmake) for the CMake options available for the library.
-
-## Testing
-
-Tests are compiled alongside the library by default, and live in the client/tests subdirectory.
-To run the tests, you can use the `test` command. It will run all tests directly and output the result to the console.
-
-If you want to customize the test run, you can make use of the `ctest` tool.
-
-```
-ctest --test-dir ./build/client
-```
-
-To run specific tests, you can filter the chosen tests through the switch `-R` or `--tests-regex`.
-For more test selection switches, use `ctest --help`.
-
-The tests are built using the Catch2 framework. For a more verbose run you can run the executable directly, with -s.
-
-Windows:
-```
-.\build\tests\bin\\SFSClientTests.exe -s
-```
-
-Linux:
-```
-./build/tests/bin/SFSClientTests -s
-```
-
-Follow the [TEST](TEST.md) document for more information regarding testing.
-
-## Contributing
-
-This project welcomes contributions and suggestions. Most contributions require you to agree to a
-Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us
-the rights to use your contribution. For details, visit https://cla.opensource.microsoft.com.
-
-When you submit a pull request, a CLA bot will automatically determine whether you need to provide
-a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions
-provided by the bot. You will only need to do this once across all repos using our CLA.
-
-This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
-For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or
-contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.
-
-## Trademarks
-
-This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft trademarks or logos is subject to and must follow Microsoft’s Trademark & Brand Guidelines. Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship. Any use of third-party trademarks or logos are subject to those third-party’s policies.
diff --git a/src/SfsClient/sfs-client/SECURITY.md b/src/SfsClient/sfs-client/SECURITY.md
deleted file mode 100644
index b3c89efc85..0000000000
--- a/src/SfsClient/sfs-client/SECURITY.md
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
-## Security
-
-Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet) and [Xamarin](https://github.com/xamarin).
-
-If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://aka.ms/security.md/definition), please report it to us as described below.
-
-## Reporting Security Issues
-
-**Please do not report security vulnerabilities through public GitHub issues.**
-
-Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/security.md/msrc/create-report).
-
-If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://aka.ms/security.md/msrc/pgp).
-
-You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://www.microsoft.com/msrc).
-
-Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue:
-
- * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.)
- * Full paths of source file(s) related to the manifestation of the issue
- * The location of the affected source code (tag/branch/commit or direct URL)
- * Any special configuration required to reproduce the issue
- * Step-by-step instructions to reproduce the issue
- * Proof-of-concept or exploit code (if possible)
- * Impact of the issue, including how an attacker might exploit the issue
-
-This information will help us triage your report more quickly.
-
-If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://aka.ms/security.md/msrc/bounty) page for more details about our active programs.
-
-## Preferred Languages
-
-We prefer all communications to be in English.
-
-## Policy
-
-Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/security.md/cvd).
-
-
diff --git a/src/SfsClient/sfs-client/SUPPORT.md b/src/SfsClient/sfs-client/SUPPORT.md
deleted file mode 100644
index 85c3de9c9f..0000000000
--- a/src/SfsClient/sfs-client/SUPPORT.md
+++ /dev/null
@@ -1,11 +0,0 @@
-# Support
-
-## How to file issues and get help
-
-This project uses GitHub Issues to track bugs and feature requests. Please search the existing
-issues before filing new issues to avoid duplicates. For new issues, file your bug or
-feature request as a new Issue.
-
-## Microsoft Support Policy
-
-Support for this **PROJECT or PRODUCT** is limited to the resources listed above.
diff --git a/src/SfsClient/sfs-client/TEST.md b/src/SfsClient/sfs-client/TEST.md
deleted file mode 100644
index 99406e95c5..0000000000
--- a/src/SfsClient/sfs-client/TEST.md
+++ /dev/null
@@ -1,12 +0,0 @@
-## Testing overrides
-
-Some test behaviors are controlled by test overrides set via environment variables.
-They only work when the CMake Option `SFS_ENABLE_TEST_OVERRIDES` is set to `ON`.
-To enable that during build, you must use the switch `-EnableTestOverrides` (`--enable-test-overrides` on Linux) with the build scripts. Click [here](README.md#building) for more. See also [here](README.md#building-with-cmake-vscode-extension) for how to set when using VSCode.
-
-When the test overrides are enabled, a few environment variables can be used to adjust the behavior of the tool:
-
-| Environment Variable | Description |
-|-----------------------------------------------|---------------------------------------------------------------------------------------------|
-| SFS_TEST_BASE_RETRY_DELAY_MS | Set this to override the base retry delay of 15s. |
-| SFS_TEST_OVERRIDE_BASE_URL | Set this to any string value which will be used as the SFS URL rather than the default one. |
diff --git a/src/SfsClient/sfs-client/cgmanifest.json b/src/SfsClient/sfs-client/cgmanifest.json
deleted file mode 100644
index 355bf846a5..0000000000
--- a/src/SfsClient/sfs-client/cgmanifest.json
+++ /dev/null
@@ -1,85 +0,0 @@
-{
- "$schema": "https://json.schemastore.org/component-detection-manifest.json",
- "version": 1,
- "registrations": [
- {
- "component": {
- "type": "git",
- "git": {
- "repositoryUrl": "https://github.com/catchorg/Catch2",
- "commitHash": "6e79e682b726f524310d55dec8ddac4e9c52fb5f"
- }
- },
- "developmentDependency": true
- },
- {
- "component": {
- "type": "git",
- "git": {
- "repositoryUrl": "https://github.com/microsoft/CorrelationVector-Cpp",
- "commitHash": "cf38d2b44baaf352509ad9980786bc49554c32e4"
- }
- },
- "developmentDependency": false
- },
- {
- "component": {
- "type": "git",
- "git": {
- "repositoryUrl": "https://github.com/yhirose/cpp-httplib",
- "commitHash": "5c00bbf36ba8ff47b4fb97712fc38cb2884e5b98"
- }
- },
- "developmentDependency": true
- },
- {
- "component": {
- "type": "git",
- "git": {
- "repositoryUrl": "https://github.com/curl/curl",
- "commitHash": "83bedbd730d62b83744cc26fa0433d3f6e2e4cd6"
- }
- },
- "developmentDependency": false
- },
- {
- "component": {
- "type": "git",
- "git": {
- "repositoryUrl": "https://github.com/c-ares/c-ares",
- "commitHash": "fddf01938d3789e06cc1c3774e4cd0c7d2a89976"
- }
- },
- "developmentDependency": false,
- "dependencyRoots": [
- {
- "type": "git",
- "git": {
- "repositoryUrl": "https://github.com/curl/curl",
- "commitHash": "83bedbd730d62b83744cc26fa0433d3f6e2e4cd6"
- }
- }
- ]
- },
- {
- "component": {
- "type": "git",
- "git": {
- "repositoryUrl": "https://github.com/microsoft/do-client",
- "commitHash": "d71ade6f692dd8bc319ec3228c956517e9b29292"
- }
- },
- "developmentDependency": true
- },
- {
- "component": {
- "type": "git",
- "git": {
- "repositoryUrl": "https://github.com/nlohmann/json",
- "commitHash": "9cca280a4d0ccf0c08f47a99aa71d1b0e52f8d03"
- }
- },
- "developmentDependency": false
- }
- ]
-}
\ No newline at end of file
diff --git a/src/SfsClient/sfs-client/client/CMakeLists.txt b/src/SfsClient/sfs-client/client/CMakeLists.txt
deleted file mode 100644
index e2fd215ff9..0000000000
--- a/src/SfsClient/sfs-client/client/CMakeLists.txt
+++ /dev/null
@@ -1,147 +0,0 @@
-# Copyright (c) Microsoft Corporation.
-# Licensed under the MIT License.
-
-# HTTP stack library
-find_package(CURL REQUIRED)
-
-# JSON library
-find_package(nlohmann_json CONFIG REQUIRED)
-
-# CorrelationVector Library from Microsoft
-find_package(correlation_vector CONFIG REQUIRED)
-
-add_library(${PROJECT_NAME} STATIC)
-add_library(Microsoft::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
-
-target_sources(
- ${PROJECT_NAME}
- PRIVATE src/AppContent.cpp
- src/AppFile.cpp
- src/ApplicabilityDetails.cpp
- src/Content.cpp
- src/ContentId.cpp
- src/details/connection/Connection.cpp
- src/details/connection/ConnectionConfig.cpp
- src/details/connection/ConnectionManager.cpp
- src/details/connection/CurlConnection.cpp
- src/details/connection/CurlConnectionManager.cpp
- src/details/connection/HttpHeader.cpp
- src/details/connection/mock/MockConnection.cpp
- src/details/connection/mock/MockConnectionManager.cpp
- src/details/ContentUtil.cpp
- src/details/CorrelationVector.cpp
- src/details/entity/ContentType.cpp
- src/details/entity/FileEntity.cpp
- src/details/entity/VersionEntity.cpp
- src/details/Env.cpp
- src/details/ErrorHandling.cpp
- src/details/OSInfo.cpp
- src/details/ReportingHandler.cpp
- src/details/SFSClientImpl.cpp
- src/details/SFSException.cpp
- src/details/SFSUrlBuilder.cpp
- src/details/TestOverride.cpp
- src/details/UrlBuilder.cpp
- src/details/Util.cpp
- src/File.cpp
- src/Logging.cpp
- src/Result.cpp
- src/SFSClient.cpp)
-
-# Include dir for the library depends on whether the library is being built or
-# if it was installed
-target_include_directories(
- ${PROJECT_NAME}
- PUBLIC $
- $ # /include
-)
-
-target_link_libraries(${PROJECT_NAME} PRIVATE CURL::libcurl)
-target_link_libraries(${PROJECT_NAME} PRIVATE nlohmann_json::nlohmann_json)
-target_link_libraries(${PROJECT_NAME} PRIVATE microsoft::correlation_vector)
-
-# Pick up git revision during configuration to add to logging
-include(FindGit)
-if(GIT_FOUND)
- execute_process(
- COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD
- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
- OUTPUT_VARIABLE SFS_GIT_HEAD_NAME
- OUTPUT_STRIP_TRAILING_WHITESPACE)
- execute_process(
- COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
- OUTPUT_VARIABLE SFS_GIT_HEAD_REVISION
- OUTPUT_STRIP_TRAILING_WHITESPACE)
-
- target_compile_definitions(
- ${PROJECT_NAME}
- PRIVATE SFS_GIT_INFO="${SFS_GIT_HEAD_NAME}:${SFS_GIT_HEAD_REVISION}")
-endif()
-
-set_compile_options_for_target(${PROJECT_NAME})
-
-target_compile_definitions(${PROJECT_NAME}
- PRIVATE SFS_VERSION="${SFS_LIBRARY_VERSION}")
-
-if(SFS_ENABLE_TEST_OVERRIDES)
- target_compile_definitions(${PROJECT_NAME}
- PRIVATE SFS_ENABLE_TEST_OVERRIDES=1)
-endif()
-
-if(SFS_BUILD_TESTS)
- # Enables one to run tests through "ctest --test-dir .\build\client"
- enable_testing()
-
- add_subdirectory(tests)
-endif()
-
-#
-# Install section
-#
-
-set(_INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/sfsclient")
-set(_TARGET_CONFIG_CMAKE_FILEPATH
- "${CMAKE_CURRENT_BINARY_DIR}/sfsclient-config.cmake")
-
-# Install headers
-install(
- FILES include/sfsclient/AppContent.h
- include/sfsclient/AppFile.h
- include/sfsclient/ApplicabilityDetails.h
- include/sfsclient/ClientConfig.h
- include/sfsclient/Content.h
- include/sfsclient/ContentId.h
- include/sfsclient/File.h
- include/sfsclient/Logging.h
- include/sfsclient/RequestParams.h
- include/sfsclient/Result.h
- include/sfsclient/SFSClient.h
- DESTINATION include/sfsclient)
-
-# Export targets for this library to a local file
-install(
- TARGETS ${PROJECT_NAME}
- EXPORT sfsclient-targets
- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
- LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
- ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
-
-# And then install the exported targets file to the destination
-install(
- EXPORT sfsclient-targets
- FILE sfsclient-targets.cmake
- NAMESPACE microsoft::
- DESTINATION ${_INSTALL_DESTINATION})
-
-# Add configure_package_config_file for below
-include(CMakePackageConfigHelpers)
-
-# Create the sfsclient-config.cmake file, which will be used by find_package()
-configure_package_config_file(
- ../cmake/sfsclient-config.cmake.in ${_TARGET_CONFIG_CMAKE_FILEPATH}
- INSTALL_DESTINATION ${_INSTALL_DESTINATION})
-
-# Then install the generated file to the destination
-install(FILES ${_TARGET_CONFIG_CMAKE_FILEPATH}
- DESTINATION ${_INSTALL_DESTINATION})
diff --git a/src/SfsClient/sfs-client/client/include/sfsclient/AppContent.h b/src/SfsClient/sfs-client/client/include/sfsclient/AppContent.h
deleted file mode 100644
index e70eb538ba..0000000000
--- a/src/SfsClient/sfs-client/client/include/sfsclient/AppContent.h
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-#pragma once
-
-#include "AppFile.h"
-#include "Content.h"
-
-#include
-#include
-#include
-
-namespace SFS
-{
-class AppPrerequisiteContent
-{
- public:
- [[nodiscard]] static Result Make(std::unique_ptr&& contentId,
- std::vector&& files,
- std::unique_ptr& out) noexcept;
-
- AppPrerequisiteContent(AppPrerequisiteContent&&) noexcept;
-
- AppPrerequisiteContent(const AppPrerequisiteContent&) = delete;
- AppPrerequisiteContent& operator=(const AppPrerequisiteContent&) = delete;
-
- /**
- * @return Unique content identifier
- */
- const ContentId& GetContentId() const noexcept;
-
- /**
- * @return Files belonging to this Prequisite
- */
- const std::vector& GetFiles() const noexcept;
-
- private:
- AppPrerequisiteContent() = default;
-
- std::unique_ptr m_contentId;
- std::vector m_files;
-};
-
-class AppContent
-{
- public:
- [[nodiscard]] static Result Make(std::unique_ptr&& contentId,
- std::string updateId,
- std::vector&& prerequisites,
- std::vector&& files,
- std::unique_ptr& out) noexcept;
-
- AppContent(AppContent&&) noexcept;
-
- AppContent(const AppContent&) = delete;
- AppContent& operator=(const AppContent&) = delete;
-
- /**
- * @return Unique content identifier
- */
- const ContentId& GetContentId() const noexcept;
-
- /**
- * @return Unique Update Id
- */
- const std::string& GetUpdateId() const noexcept;
-
- /**
- * @return Files belonging to this App
- */
- const std::vector& GetFiles() const noexcept;
-
- /**
- * @return List of Prerequisite content needed for this App. Prerequisites don't have further dependencies.
- */
- const std::vector& GetPrerequisites() const noexcept;
-
- private:
- AppContent() = default;
-
- std::unique_ptr m_contentId;
- std::vector m_files;
-
- std::string m_updateId;
- std::vector m_prerequisites;
-};
-} // namespace SFS
diff --git a/src/SfsClient/sfs-client/client/include/sfsclient/AppFile.h b/src/SfsClient/sfs-client/client/include/sfsclient/AppFile.h
deleted file mode 100644
index 35e4f94ee2..0000000000
--- a/src/SfsClient/sfs-client/client/include/sfsclient/AppFile.h
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-#pragma once
-
-#include "ApplicabilityDetails.h"
-#include "File.h"
-
-#include
-#include
-#include
-#include
-
-namespace SFS
-{
-class AppFile : private File
-{
- public:
- [[nodiscard]] static Result Make(std::string fileId,
- std::string url,
- uint64_t sizeInBytes,
- std::unordered_map hashes,
- std::vector architectures,
- std::vector platformApplicabilityForPackage,
- std::string fileMoniker,
- std::unique_ptr& out) noexcept;
-
- AppFile(AppFile&&) noexcept;
-
- AppFile(const AppFile&) = delete;
- AppFile& operator=(const AppFile&) = delete;
-
- /// Getter methods from File class
- using File::GetFileId;
- using File::GetHashes;
- using File::GetSizeInBytes;
- using File::GetUrl;
-
- /**
- * @return Set of details related to applicability of the file
- */
- const ApplicabilityDetails& GetApplicabilityDetails() const noexcept;
-
- /**
- * @return Package Moniker of the file
- */
- const std::string& GetFileMoniker() const noexcept;
-
- private:
- AppFile(std::string&& fileId,
- std::string&& url,
- uint64_t sizeInBytes,
- std::unordered_map&& hashes,
- std::string&& fileMoniker);
-
- std::unique_ptr m_applicabilityDetails;
- std::string m_fileMoniker;
-};
-} // namespace SFS
diff --git a/src/SfsClient/sfs-client/client/include/sfsclient/ApplicabilityDetails.h b/src/SfsClient/sfs-client/client/include/sfsclient/ApplicabilityDetails.h
deleted file mode 100644
index 0cbf451c8c..0000000000
--- a/src/SfsClient/sfs-client/client/include/sfsclient/ApplicabilityDetails.h
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-#pragma once
-
-#include "Result.h"
-
-#include
-#include
-#include
-
-namespace SFS
-{
-enum class Architecture
-{
- None,
- Amd64,
- Arm,
- Arm64,
- x86,
-};
-
-class ApplicabilityDetails
-{
- public:
- [[nodiscard]] static Result Make(std::vector architectures,
- std::vector platformApplicabilityForPackage,
- std::unique_ptr& out) noexcept;
-
- ApplicabilityDetails(const ApplicabilityDetails&) = delete;
- ApplicabilityDetails& operator=(const ApplicabilityDetails&) = delete;
-
- const std::vector& GetArchitectures() const noexcept;
- const std::vector& GetPlatformApplicabilityForPackage() const noexcept;
-
- private:
- ApplicabilityDetails() = default;
-
- std::vector m_architectures;
- std::vector m_platformApplicabilityForPackage;
-};
-} // namespace SFS
diff --git a/src/SfsClient/sfs-client/client/include/sfsclient/ClientConfig.h b/src/SfsClient/sfs-client/client/include/sfsclient/ClientConfig.h
deleted file mode 100644
index 38d2defa4e..0000000000
--- a/src/SfsClient/sfs-client/client/include/sfsclient/ClientConfig.h
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-#pragma once
-
-#include "Logging.h"
-
-#include
-#include
-
-namespace SFS
-{
-/// @brief Configurations to create an SFSClient instance
-struct ClientConfig
-{
- /// @brief The account ID of the SFS service is used to identify the caller (required)
- std::string accountId;
-
- /// @brief The instance ID of the SFS service
- std::optional instanceId;
-
- /// @brief The namespace of the SFS service
- std::optional nameSpace;
-
- /**
- * @brief A logging callback function that is called when the SFSClient logs a message
- * @details This function returns logging information from the SFSClient. The caller is responsible for incoporating
- * the received data into their logging system. The callback will be called in the same thread as the
- * main flow, so make sure the callback does not block for too long so it doesn't delay operations. The
- * LogData does not exist after the callback returns, so caller has to copy it if the data will be stored.
- */
- std::optional logCallbackFn;
-};
-} // namespace SFS
diff --git a/src/SfsClient/sfs-client/client/include/sfsclient/Content.h b/src/SfsClient/sfs-client/client/include/sfsclient/Content.h
deleted file mode 100644
index 512e1058c2..0000000000
--- a/src/SfsClient/sfs-client/client/include/sfsclient/Content.h
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-#pragma once
-
-#include "ContentId.h"
-#include "File.h"
-#include "Result.h"
-
-#include
-#include
-#include
-
-namespace SFS
-{
-class Content
-{
- public:
- /**
- * @brief This Make() method should be used when the caller wants the @param files to be cloned
- */
- [[nodiscard]] static Result Make(std::string contentNameSpace,
- std::string contentName,
- std::string contentVersion,
- const std::vector& files,
- std::unique_ptr& out) noexcept;
-
- /**
- * @brief This Make() method should be used when the caller wants the @param files to be moved
- */
- [[nodiscard]] static Result Make(std::string contentNameSpace,
- std::string contentName,
- std::string contentVersion,
- std::vector&& files,
- std::unique_ptr& out) noexcept;
-
- /**
- * @brief This Make() method should be used when the caller wants the @param contentId and @param files to be moved
- */
- [[nodiscard]] static Result Make(std::unique_ptr&& contentId,
- std::vector&& files,
- std::unique_ptr& out) noexcept;
-
- Content(Content&&) noexcept;
-
- Content(const Content&) = delete;
- Content& operator=(const Content&) = delete;
-
- /**
- * @return Unique content identifier
- */
- const ContentId& GetContentId() const noexcept;
-
- const std::vector& GetFiles() const noexcept;
-
- private:
- Content() = default;
-
- std::unique_ptr m_contentId;
- std::vector m_files;
-};
-} // namespace SFS
diff --git a/src/SfsClient/sfs-client/client/include/sfsclient/ContentId.h b/src/SfsClient/sfs-client/client/include/sfsclient/ContentId.h
deleted file mode 100644
index 903cf8dedd..0000000000
--- a/src/SfsClient/sfs-client/client/include/sfsclient/ContentId.h
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-#pragma once
-
-#include "Result.h"
-
-#include
-#include
-
-namespace SFS
-{
-class ContentId
-{
- public:
- [[nodiscard]] static Result Make(std::string nameSpace,
- std::string name,
- std::string version,
- std::unique_ptr& out) noexcept;
-
- ContentId(ContentId&&) noexcept;
-
- ContentId(const ContentId&) = delete;
- ContentId& operator=(const ContentId&) = delete;
-
- /**
- * @return Content namespace
- */
- const std::string& GetNameSpace() const noexcept;
-
- /**
- * @return Content name
- */
- const std::string& GetName() const noexcept;
-
- /**
- * @return 4-part integer version. Each part can range from 0-65535
- */
- const std::string& GetVersion() const noexcept;
-
- private:
- ContentId() = default;
-
- std::string m_nameSpace;
- std::string m_name;
- std::string m_version;
-};
-} // namespace SFS
diff --git a/src/SfsClient/sfs-client/client/include/sfsclient/File.h b/src/SfsClient/sfs-client/client/include/sfsclient/File.h
deleted file mode 100644
index 160801a41f..0000000000
--- a/src/SfsClient/sfs-client/client/include/sfsclient/File.h
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-#pragma once
-
-#include "Result.h"
-
-#include
-#include
-#include
-#include
-
-namespace SFS
-{
-enum class HashType
-{
- Sha1,
- Sha256
-};
-
-class File
-{
- public:
- [[nodiscard]] static Result Make(std::string fileId,
- std::string url,
- uint64_t sizeInBytes,
- std::unordered_map hashes,
- std::unique_ptr& out) noexcept;
-
- File(File&&) noexcept;
-
- File(const File&) = delete;
- File& operator=(const File&) = delete;
-
- /**
- * @return Unique file identifier within a content version
- */
- const std::string& GetFileId() const noexcept;
-
- /**
- * @return Download URL
- */
- const std::string& GetUrl() const noexcept;
-
- /**
- * @return File size in number of bytes
- */
- uint64_t GetSizeInBytes() const noexcept;
-
- /**
- * @return Dictionary of algorithm type to base64 encoded file hash string
- */
- const std::unordered_map& GetHashes() const noexcept;
-
- protected:
- File(std::string&& fileId,
- std::string&& url,
- uint64_t sizeInBytes,
- std::unordered_map&& hashes);
-
- [[nodiscard]] Result Clone(std::unique_ptr& out) const noexcept;
-
- friend class Content;
-
- std::string m_fileId;
- std::string m_url;
- uint64_t m_sizeInBytes;
- std::unordered_map m_hashes;
-};
-} // namespace SFS
diff --git a/src/SfsClient/sfs-client/client/include/sfsclient/Logging.h b/src/SfsClient/sfs-client/client/include/sfsclient/Logging.h
deleted file mode 100644
index d8608e19e0..0000000000
--- a/src/SfsClient/sfs-client/client/include/sfsclient/Logging.h
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-#pragma once
-
-#include
-#include
-#include
-
-namespace SFS
-{
-enum class LogSeverity
-{
- Info,
- Warning,
- Error,
- Verbose,
-};
-
-struct LogData
-{
- LogSeverity severity;
- const char* message;
- const char* file;
- unsigned line;
- const char* function;
- std::chrono::time_point time;
-};
-
-using LoggingCallbackFn = std::function;
-
-std::string_view ToString(LogSeverity severity) noexcept;
-}; // namespace SFS
diff --git a/src/SfsClient/sfs-client/client/include/sfsclient/RequestParams.h b/src/SfsClient/sfs-client/client/include/sfsclient/RequestParams.h
deleted file mode 100644
index b2961f5c99..0000000000
--- a/src/SfsClient/sfs-client/client/include/sfsclient/RequestParams.h
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-#pragma once
-
-#include
-#include
-#include
-#include
-
-namespace SFS
-{
-using TargetingAttributes = std::unordered_map