Files
UnrealEngine/Engine/Plugins/Online/WebAuth/Source/Private/WebAuthModule.cpp
2025-05-18 13:04:45 +08:00

101 lines
2.5 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "WebAuthModule.h"
#include "Modules/ModuleManager.h"
#include "Misc/CommandLine.h"
#include "Misc/CoreDelegates.h"
DEFINE_LOG_CATEGORY(LogWebAuth);
// FWebAuthModule
IMPLEMENT_MODULE(FWebAuthModule, WebAuth);
FWebAuthModule* FWebAuthModule::Singleton = nullptr;
void FWebAuthModule::StartupModule()
{
UE_LOG(LogWebAuth, Display, TEXT("FWebAuthModule::StartupModule: Starting WebAuth Module"));
Singleton = this;
// This can return null is the module is not available on this platform, check IsAvailable() before use
WebAuth = FPlatformWebAuth::CreatePlatformWebAuth();
if (WebAuth == nullptr)
{
// platform does not provide web auth
UE_LOG(LogWebAuth, Display, TEXT("FWebAuthModule::StartupModule: WebAuth Module not implemented on this platform"));
}
}
void FWebAuthModule::ShutdownModule()
{
UE_LOG(LogWebAuth, Display, TEXT("FWebAuthModule::ShutdownModule:"));
delete WebAuth; // can be passed NULLs
WebAuth = nullptr;
Singleton = nullptr;
}
bool FWebAuthModule::HandleWebAuthCommand(const TCHAR* Cmd, FOutputDevice& Ar)
{
// TODO: Support params, but use test case
#if !UE_BUILD_SHIPPING
if (FParse::Command(&Cmd, TEXT("Session")))
{
FString Url = FParse::Token(Cmd, false);
FString AppScheme = FParse::Token(Cmd, false);
if (Url.IsEmpty() || AppScheme.IsEmpty())
{
UE_LOG(LogWebAuth, Warning, TEXT("usage: WebAuth Session <url> <app scheme>"));
}
else
{
if (IsAvailable())
{
UE_LOG(LogWebAuth, Display, TEXT("Starting auth session"));
GetWebAuth().AuthSessionWithURL(
Url,
AppScheme,
FWebAuthSessionCompleteDelegate::CreateLambda([this](const FString &RedirectURL, bool bHasResponse) {
UE_LOG(LogWebAuth, Display, TEXT("WebAuth Session RedirectURL=[%s], bHasResponse=[%d]"), *RedirectURL, bHasResponse);
}));
}
else
{
UE_LOG(LogWebAuth, Warning, TEXT("WebAuth not available"));
}
}
}
#endif // !UE_BUILD_SHIPPING
return true;
}
bool FWebAuthModule::Exec_Dev(UWorld* InWorld, const TCHAR* Cmd, FOutputDevice& Ar)
{
// Ignore any execs that don't start with WebAuth
if (FParse::Command(&Cmd, TEXT("WebAuth")))
{
return HandleWebAuthCommand(Cmd, Ar);
}
return false;
}
FWebAuthModule& FWebAuthModule::Get()
{
UE_LOG(LogWebAuth, Display, TEXT("FWebAuthModule::Get:"));
if (Singleton == nullptr)
{
check(IsInGameThread());
FModuleManager::LoadModuleChecked<FWebAuthModule>("WebAuth");
}
check(Singleton != nullptr);
return *Singleton;
}