From fe1d417a756b8be3759432df23a988870d0114b4 Mon Sep 17 00:00:00 2001 From: qumeta Date: Mon, 31 Jul 2023 18:33:41 +0800 Subject: [PATCH 1/3] Fix Bug on Non Window platform --- Plugins/Web3AuthSDK/Source/Web3AuthSDK/Private/ECCrypto.cpp | 4 ++-- Plugins/Web3AuthSDK/Source/Web3AuthSDK/Public/ECCrypto.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Plugins/Web3AuthSDK/Source/Web3AuthSDK/Private/ECCrypto.cpp b/Plugins/Web3AuthSDK/Source/Web3AuthSDK/Private/ECCrypto.cpp index c77866b..55f03dc 100644 --- a/Plugins/Web3AuthSDK/Source/Web3AuthSDK/Private/ECCrypto.cpp +++ b/Plugins/Web3AuthSDK/Source/Web3AuthSDK/Private/ECCrypto.cpp @@ -3,8 +3,8 @@ #include #include -#pragma comment(lib, "crypt32.lib") -#pragma comment(lib, "WS2_32.lib") +//#pragma comment(lib, "crypt32.lib") +//#pragma comment(lib, "WS2_32.lib") unsigned char* toByteArray(const std::string& s) { diff --git a/Plugins/Web3AuthSDK/Source/Web3AuthSDK/Public/ECCrypto.h b/Plugins/Web3AuthSDK/Source/Web3AuthSDK/Public/ECCrypto.h index f6650f9..76f41fb 100644 --- a/Plugins/Web3AuthSDK/Source/Web3AuthSDK/Public/ECCrypto.h +++ b/Plugins/Web3AuthSDK/Source/Web3AuthSDK/Public/ECCrypto.h @@ -5,7 +5,7 @@ #include "CoreMinimal.h" #pragma warning(disable:4996) -#pragma comment(lib,"WS2_32.Lib") //Winsock Library +//#pragma comment(lib,"WS2_32.Lib") //Winsock Library #define UI UI_ST THIRD_PARTY_INCLUDES_START From b2e78be7d843c2f2a808a37a98fdeff8b53ce48f Mon Sep 17 00:00:00 2001 From: qumeta Date: Tue, 8 Aug 2023 19:23:53 +0800 Subject: [PATCH 2/3] Demo --- .gitignore | 4 +- .vsconfig | 17 ++++ Config/DefaultEngine.ini | 1 + Config/DefaultGame.ini | 2 +- Config/DefaultInput.ini | 85 ++++++++++++++++++ Platforms/HoloLens/Config/HoloLensEngine.ini | 32 +++++++ .../Web3AuthSDK/Content/AuthInterface.uasset | Bin 137482 -> 137498 bytes .../Source/Web3AuthSDK/Private/ECCrypto.cpp | 7 +- .../Web3AuthSDK/Private/KeyStoreUtils.cpp | 3 + .../Source/Web3AuthSDK/Private/Web3Auth.cpp | 21 ++++- .../Source/Web3AuthSDK/Public/ECCrypto.h | 5 +- .../Web3AuthSDK/Web3AuthSDK_Android.xml | 4 +- Web3AuthUnrealSDK.uproject | 2 +- 13 files changed, 173 insertions(+), 10 deletions(-) create mode 100644 .vsconfig create mode 100644 Config/DefaultInput.ini create mode 100644 Platforms/HoloLens/Config/HoloLensEngine.ini diff --git a/.gitignore b/.gitignore index 0fb6fa1..1dca42b 100644 --- a/.gitignore +++ b/.gitignore @@ -75,4 +75,6 @@ DerivedDataCache/* /Config/HoloLens # MAC -.DS_Store \ No newline at end of file +.DS_Store + +Temp/* \ No newline at end of file diff --git a/.vsconfig b/.vsconfig new file mode 100644 index 0000000..b9be525 --- /dev/null +++ b/.vsconfig @@ -0,0 +1,17 @@ +{ + "version": "1.0", + "components": [ + "Microsoft.Net.Component.4.6.2.TargetingPack", + "Microsoft.VisualStudio.Component.VC.14.33.17.3.ARM64", + "Microsoft.VisualStudio.Component.VC.14.33.17.3.x86.x64", + "Microsoft.VisualStudio.Component.VC.Tools.ARM64", + "Microsoft.VisualStudio.Component.VC.Tools.x86.x64", + "Microsoft.VisualStudio.Component.Windows10SDK", + "Microsoft.VisualStudio.Workload.CoreEditor", + "Microsoft.VisualStudio.Workload.ManagedDesktop", + "Microsoft.VisualStudio.Workload.NativeCrossPlat", + "Microsoft.VisualStudio.Workload.NativeDesktop", + "Microsoft.VisualStudio.Workload.NativeGame", + "Microsoft.VisualStudio.Workload.Universal" + ] +} diff --git a/Config/DefaultEngine.ini b/Config/DefaultEngine.ini index 2db72bb..3c1e601 100644 --- a/Config/DefaultEngine.ini +++ b/Config/DefaultEngine.ini @@ -55,6 +55,7 @@ Orientation=Portrait bSupportsVulkan=False bSupportsVulkanSM5=False bAndroidOpenGLSupportsBackbufferSampling=True +PackageName=com.mm.Coltan [/Script/GooglePADEditor.GooglePADRuntimeSettings] bEnablePlugin=False diff --git a/Config/DefaultGame.ini b/Config/DefaultGame.ini index 685b780..8382885 100644 --- a/Config/DefaultGame.ini +++ b/Config/DefaultGame.ini @@ -6,6 +6,6 @@ ProjectName=Web3Auth [/Script/UnrealEd.ProjectPackagingSettings] bGenerateChunks=False FullRebuild=True -BuildConfiguration=PPBC_Shipping +BuildConfiguration=PPBC_Development ForDistribution=False diff --git a/Config/DefaultInput.ini b/Config/DefaultInput.ini new file mode 100644 index 0000000..a72fda2 --- /dev/null +++ b/Config/DefaultInput.ini @@ -0,0 +1,85 @@ +[/Script/Engine.InputSettings] +-AxisConfig=(AxisKeyName="Gamepad_LeftX",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) +-AxisConfig=(AxisKeyName="Gamepad_LeftY",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) +-AxisConfig=(AxisKeyName="Gamepad_RightX",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) +-AxisConfig=(AxisKeyName="Gamepad_RightY",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) +-AxisConfig=(AxisKeyName="MouseX",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f)) +-AxisConfig=(AxisKeyName="MouseY",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f)) +-AxisConfig=(AxisKeyName="Mouse2D",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f)) ++AxisConfig=(AxisKeyName="Gamepad_LeftX",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_LeftY",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_RightX",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_RightY",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MouseX",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MouseY",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Mouse2D",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MouseWheelAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_LeftTriggerAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_RightTriggerAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_Special_Left_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_Special_Left_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Left_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Left_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Right_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Right_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Left_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Left_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Left_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Right_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Right_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Right_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Grip_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Trackpad_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Grip_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Trackpad_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) +bAltEnterTogglesFullscreen=True +bF11TogglesFullscreen=True +bUseMouseForTouch=False +bEnableMouseSmoothing=True +bEnableFOVScaling=True +bCaptureMouseOnLaunch=True +bEnableLegacyInputScales=True +bEnableMotionControls=True +bFilterInputByPlatformUser=False +bShouldFlushPressedKeysOnViewportFocusLost=True +bEnableDynamicComponentInputBinding=True +bAlwaysShowTouchInterface=False +bShowConsoleOnFourFingerTap=True +bEnableGestureRecognizer=False +bUseAutocorrect=False +DefaultViewportMouseCaptureMode=CapturePermanently_IncludingInitialMouseDown +DefaultViewportMouseLockMode=LockOnCapture +FOVScale=0.011110 +DoubleClickTime=0.200000 +DefaultPlayerInputClass=/Script/EnhancedInput.EnhancedPlayerInput +DefaultInputComponentClass=/Script/EnhancedInput.EnhancedInputComponent +DefaultTouchInterface=/Engine/MobileResources/HUD/DefaultVirtualJoysticks.DefaultVirtualJoysticks +-ConsoleKeys=Tilde ++ConsoleKeys=Tilde + diff --git a/Platforms/HoloLens/Config/HoloLensEngine.ini b/Platforms/HoloLens/Config/HoloLensEngine.ini new file mode 100644 index 0000000..d5ebb91 --- /dev/null +++ b/Platforms/HoloLens/Config/HoloLensEngine.ini @@ -0,0 +1,32 @@ + + +[/Script/HoloLensPlatformEditor.HoloLensTargetSettings] +bBuildForEmulation=False +bBuildForDevice=True +bUseNameForLogo=True +bBuildForRetailWindowsStore=False +bAutoIncrementVersion=False +bShouldCreateAppInstaller=False +AppInstallerInstallationURL= +HoursBetweenUpdateChecks=0 +bEnablePIXProfiling=False +TileBackgroundColor=(B=64,G=0,R=0,A=255) +SplashScreenBackgroundColor=(B=64,G=0,R=0,A=255) ++PerCultureResources=(CultureId="",Strings=(PackageDisplayName="",PublisherDisplayName="",PackageDescription="",ApplicationDisplayName="",ApplicationDescription=""),Images=()) +TargetDeviceFamily=Windows.Holographic +MinimumPlatformVersion= +MaximumPlatformVersionTested=10.0.18362.0 +MaxTrianglesPerCubicMeter=500.000000 +SpatialMeshingVolumeSize=20.000000 +CompilerVersion=Default +Windows10SDKVersion=10.0.18362.0 ++CapabilityList=internetClientServer ++CapabilityList=privateNetworkClientServer ++Uap2CapabilityList=spatialPerception +bSetDefaultCapabilities=False +SpatializationPlugin= +SourceDataOverridePlugin= +ReverbPlugin= +OcclusionPlugin= +SoundCueCookQualityIndex=-1 + diff --git a/Plugins/Web3AuthSDK/Content/AuthInterface.uasset b/Plugins/Web3AuthSDK/Content/AuthInterface.uasset index 9a3071f2b049e306b341c49dce31b68840e72b5e..e245644acf041815cece998cf2c05a672ffacf35 100644 GIT binary patch literal 137498 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

XEI%^fVF@;p7Ep4BW%i9T1 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 Vap^USUzJYz+OM~aM=t8;GI^Du`mG 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 diff --git a/Plugins/Web3AuthSDK/Source/Web3AuthSDK/Private/ECCrypto.cpp b/Plugins/Web3AuthSDK/Source/Web3AuthSDK/Private/ECCrypto.cpp index 55f03dc..47f53f4 100644 --- a/Plugins/Web3AuthSDK/Source/Web3AuthSDK/Private/ECCrypto.cpp +++ b/Plugins/Web3AuthSDK/Source/Web3AuthSDK/Private/ECCrypto.cpp @@ -3,9 +3,10 @@ #include #include -//#pragma comment(lib, "crypt32.lib") -//#pragma comment(lib, "WS2_32.lib") - +#if PLATFORM_WINDOWS +#pragma comment(lib, "crypt32.lib") +#pragma comment(lib, "WS2_32.lib") +#endif unsigned char* toByteArray(const std::string& s) { size_t len = s.length() / 2; diff --git a/Plugins/Web3AuthSDK/Source/Web3AuthSDK/Private/KeyStoreUtils.cpp b/Plugins/Web3AuthSDK/Source/Web3AuthSDK/Private/KeyStoreUtils.cpp index b0e3a32..bd4fb95 100644 --- a/Plugins/Web3AuthSDK/Source/Web3AuthSDK/Private/KeyStoreUtils.cpp +++ b/Plugins/Web3AuthSDK/Source/Web3AuthSDK/Private/KeyStoreUtils.cpp @@ -11,6 +11,9 @@ UKeyStoreUtils::~UKeyStoreUtils() { } void UKeyStoreUtils::Add(FString key, FString value) { + if (StorageInstance->KeyValuePairs.Contains(key)) { + StorageInstance->KeyValuePairs.Remove(key); + } StorageInstance->KeyValuePairs.Add(key, value); UGameplayStatics::SaveGameToSlot(StorageInstance, TEXT("Web3AuthDataSlot"), 0); } diff --git a/Plugins/Web3AuthSDK/Source/Web3AuthSDK/Private/Web3Auth.cpp b/Plugins/Web3AuthSDK/Source/Web3AuthSDK/Private/Web3Auth.cpp index e0db502..d2639bd 100644 --- a/Plugins/Web3AuthSDK/Source/Web3AuthSDK/Private/Web3Auth.cpp +++ b/Plugins/Web3AuthSDK/Source/Web3AuthSDK/Private/Web3Auth.cpp @@ -88,6 +88,25 @@ void AWeb3Auth::request(FString path, FLoginParams* loginParams = NULL, TShared initParams->SetStringField("whiteLabel", output); } + /* +loginConfig:{google: { + verifier: "web3auth-google-example", + typeOfLogin: "google", + clientId: + "774338308167-q463s7kpvja16l4l0kko3nb925ikds2p.apps.googleusercontent.com", + } +} + */ + + /* + FLoginConfigItem itemText; + itemText.verifier = "web3auth-google-example"; + itemText.typeOfLogin = "google"; + itemText.clientId = "774338308167-q463s7kpvja16l4l0kko3nb925ikds2p.apps.googleusercontent.com"; + + web3AuthOptions.loginConfig.Add("google", itemText); + */ + if (!web3AuthOptions.loginConfig.IsEmpty()) { FString output; @@ -178,7 +197,6 @@ void AWeb3Auth::setResultUrl(FString hash) { return; } - UE_LOG(LogTemp, Warning, TEXT("respose base64 %s"), *hash); FString json = ""; @@ -256,6 +274,7 @@ FString AWeb3Auth::startLocalWebServer() { httpServerModule.StartAllListeners(); return "http://localhost:"+ FString::FromInt(port) + "/complete"; + //return "http://localhost:5502/complete.html"; } diff --git a/Plugins/Web3AuthSDK/Source/Web3AuthSDK/Public/ECCrypto.h b/Plugins/Web3AuthSDK/Source/Web3AuthSDK/Public/ECCrypto.h index 76f41fb..f0439b9 100644 --- a/Plugins/Web3AuthSDK/Source/Web3AuthSDK/Public/ECCrypto.h +++ b/Plugins/Web3AuthSDK/Source/Web3AuthSDK/Public/ECCrypto.h @@ -5,7 +5,10 @@ #include "CoreMinimal.h" #pragma warning(disable:4996) -//#pragma comment(lib,"WS2_32.Lib") //Winsock Library + +#if PLATFORM_WINDOWS +#pragma comment(lib,"WS2_32.Lib") //Winsock Library +#endif #define UI UI_ST THIRD_PARTY_INCLUDES_START diff --git a/Plugins/Web3AuthSDK/Source/Web3AuthSDK/Web3AuthSDK_Android.xml b/Plugins/Web3AuthSDK/Source/Web3AuthSDK/Web3AuthSDK_Android.xml index 55d618a..179dc3d 100644 --- a/Plugins/Web3AuthSDK/Source/Web3AuthSDK/Web3AuthSDK_Android.xml +++ b/Plugins/Web3AuthSDK/Source/Web3AuthSDK/Web3AuthSDK_Android.xml @@ -58,10 +58,10 @@ https://docs.unrealengine.com/en-US/SharingAndReleasing/Mobile/UnrealPluginLangu + android:scheme="mm" /> diff --git a/Web3AuthUnrealSDK.uproject b/Web3AuthUnrealSDK.uproject index b347419..b8a8ed9 100644 --- a/Web3AuthUnrealSDK.uproject +++ b/Web3AuthUnrealSDK.uproject @@ -1,6 +1,6 @@ { "FileVersion": 3, - "EngineAssociation": "5.0", + "EngineAssociation": "5.1", "Category": "", "Description": "", "Modules": [ From 213cb31b8d72ae92373dd3e91a754cea935c9b9c Mon Sep 17 00:00:00 2001 From: qumeta Date: Wed, 9 Aug 2023 10:13:37 +0800 Subject: [PATCH 3/3] For com.MixMarvel.Tantalum Test --- Config/DefaultEngine.ini | 2 +- .../Web3AuthSDK/Content/AuthInterface.uasset | Bin 137498 -> 137680 bytes .../Web3AuthSDK/Private/KeyStoreUtils.cpp | 29 +++++++++++++++--- .../Source/Web3AuthSDK/Public/KeyStoreUtils.h | 4 ++- .../Web3AuthSDK/Web3AuthSDK_Android.xml | 2 +- 5 files changed, 30 insertions(+), 7 deletions(-) diff --git a/Config/DefaultEngine.ini b/Config/DefaultEngine.ini index 3c1e601..5c5c1a1 100644 --- a/Config/DefaultEngine.ini +++ b/Config/DefaultEngine.ini @@ -55,7 +55,7 @@ Orientation=Portrait bSupportsVulkan=False bSupportsVulkanSM5=False bAndroidOpenGLSupportsBackbufferSampling=True -PackageName=com.mm.Coltan +PackageName=com.MixMarvel.Tantalum [/Script/GooglePADEditor.GooglePADRuntimeSettings] bEnablePlugin=False diff --git a/Plugins/Web3AuthSDK/Content/AuthInterface.uasset b/Plugins/Web3AuthSDK/Content/AuthInterface.uasset index e245644acf041815cece998cf2c05a672ffacf35..16a51f244c7708266b720055593247cc10c517b3 100644 GIT binary patch delta 3260 zcmcJRdu$fR5x{rXIM^lxFeCy}hXZV|3%2+6_ICHoD|dT$et;p=CcGMm!4y7X^RTfY z&=e&iYK>F{_*$QoR4r|aTDPhCaMKeM+JLGQD^VcyK@!&R(0nyW^E~d zckjE$Z)SF8c4t=lp8ZL|<^Fj?oN^(8=4n zWz-d1k*BG_9>8PF;2_|0++e+{$Sq;8&n+*$Qz`|;$&E(Os56z*vL&LFJY6#?5{mq6 zk--7LTccPZ6=92wwnx&UnMJqV?im$lL}_-SnnsSs#0pk!NO&V$P)%LfWcP{4gmh*IfE4sDl+Ap26K^eCCWv5F%KRvx=$JPAXqQx zGg$8{^4JRo`vAZHLxY8ZBHQ~74g}@Jxu(jwo;$LLOD~R5EAo%i1}n58ubws7qiNCK zrslFiXwwBF9t5lC_Xg`jMK0eQgSY!R7xA|vjs5NSjJhyVU4_|KPIhU|gF0K|C$5<{px~zY)*Nz8lNDu1O=%P%HDMP9A~p0sQC= z6xGSR>r+NFI{|u%??C0$?6tbmym?beGP?zrB$GGcf^0>-%3F6YNq#*0j-&@9FHI-O z&?9(8QuQn@I6=o{2SHdhg8ycqIj{fBv=jTm4_x#XM9>T-dhy8~)U7dZn4n2-m zp$Kh6>rj9sdK9&yc4ULpLCt6la0jYFThVHeeFpRg&`!|UXdl?`N4roXT8?T*Rmr+^+@m z{iqYJW(c$rl2{MV4O#r;wk2~$^4|sS79k2(E7}9!)nKs`(q0LHJ7MVgAXbXhv zf@eFVw5$L4lZ(&b`N?aG@DkWBcv;E9#kd6brwxm77s)@DkI<>)S4;7ghieb43^%Ox z#pbPT^Z;vW-n_SR%R_Xv*q>pvb8UC~iiY~_2WhiY*CIq$OYI6zH|^M?+7C8W?rPo_ zF7H;YBFLJj?HbQsH^PI zr9AMIhM()iB1*?!#QU+uX-v6xT^{+4qitJq#hD*S*Ht`lZ9o0`0RB9-Vn>NEc75&$ z+gDK}v>(Pa2&v7PwgZ;dyn_ElEEO=1#Z+@Cf?SrK<8dJa9S0h|Y@Rf~hQILt>WJh2 z#x=>7OL(azLpKgt2rCGEC)8Sm3=;OWqnR(Y8znDY!cUdXhC;Qs*Hl+;-Q8aG$xfDsp=8Frdn&N*c);=b^>lri;~69=&ai&VZ3dld_res~$r!LvL^N+rMy;zSOMs1JJ- zd%}$)I}B+muHd_{6$V21aC2YsNO8_Wk3w}~p&iDcTIpwhgTIAmxte+c>dv9XxMZAq zG}1yT--~Fh=`0wCMMjln*#rM6~VKm}8iliU%DE1*qFD<)@pTL#_6NS$su5?Hp zEqtG=$O~*8h5-v0PcOWIpTd^Qpji|+2^}8$;5wo-(0;_YqqxW6&(2@*jP!{&@eXWh z&v7EhgCg@7TGa_`p*#p0N}(0A<23&*d=SiR7upyaP(tDiP7drE3j$xkG&hXG6uKVF zl+;i(9rIAzJ`^ypqu8dNhOTE+P?36X<4$Y|*WnJQltX(d-?g=hRV0H@KvihWMEdGG z_yb}EJo2;)mcE1q#nSOZ&l8?)^FaDBm+9Mo!uMk+Yam?Dm7GUX#N1PMP*d2_^yUq`vltgA z>xS_5dmn%kkoyO574AFZQ|Y7mq?aURMWiFiFCtd@(Reb6q+9dJ8Iry`gdfk(iN8~n ToA~nZtmE&`PmfF_y%YWiEs9Rv delta 3261 zcmZ9O3v3m~6^3W##>B?uWr$+l3rWBZ56|w-?#_S%nSGgSgTYV0DR0~2g6(UAAqJ8F zQ7U4o6(LvcwoMzMkhU_76j2kc(j=v7Q&cxn6B0EvX_ca=Au$1!h&+@?4LxfvW2?K` zz5C5M^Uv8i=dAtKVBt@HQ~1=YxbMVk$0q;!`r^*3FFsRy?Bn0RevetTC)bF(@3~w` z(AeW99DSu2O~(jbxn(@le2G8Lsn%uz!F6`UL%#UjedpGGkQSUgubXQ-ANrllk|I#jN6 zGE-9?{eTPRD;x&Y?^Rf?mzAVo8w%kn&TmNN0%aaBIH@XASY&cif4{;E;HJe2i_Ef; zDgURnbEz_yGfwtWh5dk!848C1`e}y_}QrtqL=u ztYlJNYe!zIYo{_7RdRBnLtzH+^B#pmfG77WEPsHLyALT$r0>d0Ka!XJ5r-ASYj*RG4TbDNDBR zrM%Wdzfk63@SZ%NFfBP*_kzL!z^7gugJmU210-5I^PRAIP?<9>Cud($I0Sg{WrgJ) zCud$&IP8^;lxm{&!Bn`x;r(HZnUi_%Dop#Fyl_q70N|193X1|x8gD2}`(-6b1`_G3 z`7q1AROTV@p7yoE@{ksbiOKQ^)!f8U-M9F@Tz|+@PfQ@ug%fx|uDWXB)N1IaMDN)V zKZMRrR7NMYX;L0eS2?L~Zo~LhPRg2+w~Sx4aH@p4iN??K8t>dT{sla{OGqTI;Mvj1 z>-dh`ed)^7bJJjM{q2$O!N~Yh5*@#e?}{G%37(uAPV-bBj3hChs;-`bw+_}kv@kW{ z{HdEaQwWcoR|gMozBuo&hb&ZscA*Zm2eqRvRE>1B8lD2+hfz0hBg&$Ka5bQ{s0wXF zEocMs!M_D8?cj9~wV^{OjU3brV_VSyxN4A%1ds)ORWP#^b)s67fqQ^@!QP3QfCXw^ z3`=yQb*LWofM_GCgDD$ff{xY$9RisEWRoDbqwX9&+O}wVKK?EUb~&POwt_+zs(>rG z`#_y&ANXenPaUoNEuIryT8v$TyAnh=V2Ic`XfGwHO8r+re`tkJ0Yjia2OAmG))H1y71$# zUdMe{GaSR`q3c6RuCw{$eF;Z51>+PZG9VIA90Pn#PKT7Hwuwq+xF1sm{hO?2W- zJT1B1uUS6hJam1g+e{CnX@rg*2w_>i!*wQj^p7|3<1Z6kRfcGg!ugU$UFEsJl8fo!!=9+B9=#) zWRzK@S$&2mkf znbcyE8_edeq=s%fQ2CZ81r$YG{?CzmmoVMXbq0m*JB}r6-SvHGdt48^&@dyY_eIg9 z_wd)z#~IESbCA_d30!Y&d+&J}bJQLo9+t52nkOsKuX2`(9 za)s@Nx*;q*TJaJ7N;7mfa3E#|de9*Z3SDwIeP~l=1!mlI8Lv!f%(Wpy(1I)s9p9yb z2|)#{$!r$5ffbz{#-D4x(UGameplayStatics::LoadGameFromSlot(TEXT("Web3AuthDataSlot"), 0)); - if(StorageInstance == nullptr) { - StorageInstance = Cast(UGameplayStatics::CreateSaveGameObject(UWeb3StorageAdapter::StaticClass())); - } + //StorageInstance = Cast(UGameplayStatics::LoadGameFromSlot(TEXT("Web3AuthDataSlot"), 0)); + //if(StorageInstance == nullptr) { + // StorageInstance = Cast(UGameplayStatics::CreateSaveGameObject(UWeb3StorageAdapter::StaticClass())); + //} } UKeyStoreUtils::~UKeyStoreUtils() { } +UWeb3StorageAdapter* UKeyStoreUtils::getStorageInstance() +{ + auto StorageInstance = Cast(UGameplayStatics::LoadGameFromSlot(TEXT("Web3AuthDataSlot"), 0)); + if (StorageInstance == nullptr) { + StorageInstance = Cast(UGameplayStatics::CreateSaveGameObject(UWeb3StorageAdapter::StaticClass())); + } + + return StorageInstance; +} + void UKeyStoreUtils::Add(FString key, FString value) { + + auto StorageInstance = getStorageInstance(); + if (StorageInstance->KeyValuePairs.Contains(key)) { StorageInstance->KeyValuePairs.Remove(key); } + StorageInstance->KeyValuePairs.Add(key, value); UGameplayStatics::SaveGameToSlot(StorageInstance, TEXT("Web3AuthDataSlot"), 0); } FString UKeyStoreUtils::Get(FString key) { + auto StorageInstance = getStorageInstance(); + + if (StorageInstance->KeyValuePairs.Contains(key)) { return StorageInstance->KeyValuePairs[key]; } @@ -26,6 +44,9 @@ FString UKeyStoreUtils::Get(FString key) { } void UKeyStoreUtils::Remove(FString key) { + auto StorageInstance = getStorageInstance(); + + if (StorageInstance->KeyValuePairs.Contains(key)) { StorageInstance->KeyValuePairs.Remove(key); UGameplayStatics::SaveGameToSlot(StorageInstance, TEXT("Web3AuthDataSlot"), 0); diff --git a/Plugins/Web3AuthSDK/Source/Web3AuthSDK/Public/KeyStoreUtils.h b/Plugins/Web3AuthSDK/Source/Web3AuthSDK/Public/KeyStoreUtils.h index 0f7cd4a..750a8a6 100644 --- a/Plugins/Web3AuthSDK/Source/Web3AuthSDK/Public/KeyStoreUtils.h +++ b/Plugins/Web3AuthSDK/Source/Web3AuthSDK/Public/KeyStoreUtils.h @@ -22,7 +22,9 @@ class WEB3AUTHSDK_API UKeyStoreUtils : public UObject { GENERATED_BODY() private: - UWeb3StorageAdapter* StorageInstance; + //UWeb3StorageAdapter* StorageInstance; + UWeb3StorageAdapter* getStorageInstance(); + public: void Add(FString key, FString value); FString Get(FString key); diff --git a/Plugins/Web3AuthSDK/Source/Web3AuthSDK/Web3AuthSDK_Android.xml b/Plugins/Web3AuthSDK/Source/Web3AuthSDK/Web3AuthSDK_Android.xml index 179dc3d..bf515c3 100644 --- a/Plugins/Web3AuthSDK/Source/Web3AuthSDK/Web3AuthSDK_Android.xml +++ b/Plugins/Web3AuthSDK/Source/Web3AuthSDK/Web3AuthSDK_Android.xml @@ -58,7 +58,7 @@ https://docs.unrealengine.com/en-US/SharingAndReleasing/Mobile/UnrealPluginLangu