// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "Parameters/SubmitToolParameters.h" #include "Logic/ProcessWrapper.h" #include "Tasks/Task.h" #include "Services/Interfaces/ISubmitToolService.h" #include "Memory/SharedBuffer.h" DECLARE_DELEGATE_OneParam(FOnConfigFileRetrieved, bool /*bValid*/) class FSubmitToolServiceProvider; class FP4LockdownService : public ISubmitToolService { public: FP4LockdownService() = delete; FP4LockdownService(const FP4LockdownParameters& InParameters, TWeakPtr InServiceProvider); bool ArePathsInLockdown(const TArray& InPaths, bool& bOutAllowlisted); bool IsBlockingOperationRunning() const { return ConfigFilesTask.IsValid() && !ConfigFilesTask.IsCompleted(); } private: struct FAllowListData { FString GroupName; TSet AllowListers; TArray> Views; }; struct FOverrideData : public FAllowListData { TSet Sections; }; struct FPathLockdownResult { bool bIsLocked; bool bAllowlisted; }; FPathLockdownResult IsPathInLockdown(const FString& InPath) const; bool GetConfigFile(const FString& InConfigId, const FString& InDepotPath); void ParseAllowListData(); void GetAdditionalHardlockedPaths(); FString GetFilePath(const FString& InConfigId); TMap DownloadedFiles; UE::Tasks::TTask ConfigFilesTask; TWeakPtr ServiceProvider; const FP4LockdownParameters& Parameters; TArray AllowListData; TArray OverrideData; TArray AdditionalHardlocks; FCriticalSection FileMutex; }; Expose_TNameOf(FP4LockdownService);