Core/Network: Refactor local/remote ip address selection code and allow using hostnames in LoginREST bnetserver config options
Port From (https://github.com/TrinityCore/TrinityCore/commit/6be536a73bc8a6e331ce20e7d19e2ea56b99b4d0)
This commit is contained in:
@@ -18,17 +18,15 @@ namespace BNetServer
|
||||
{
|
||||
public class LoginServiceManager : Singleton<LoginServiceManager>
|
||||
{
|
||||
ConcurrentDictionary<(uint ServiceHash, uint MethodId), BnetServiceHandler> serviceHandlers;
|
||||
FormInputs formInputs;
|
||||
IPEndPoint externalAddress;
|
||||
IPEndPoint localAddress;
|
||||
ConcurrentDictionary<(uint ServiceHash, uint MethodId), BnetServiceHandler> serviceHandlers = new();
|
||||
FormInputs formInputs = new();
|
||||
string _externalHostname;
|
||||
IPEndPoint _externalEndpoint;
|
||||
string _localHostname;
|
||||
IPEndPoint _localEndpoint;
|
||||
X509Certificate2 certificate;
|
||||
|
||||
LoginServiceManager()
|
||||
{
|
||||
serviceHandlers = new ConcurrentDictionary<(uint ServiceHash, uint MethodId), BnetServiceHandler>();
|
||||
formInputs = new FormInputs();
|
||||
}
|
||||
LoginServiceManager() { }
|
||||
|
||||
public void Initialize()
|
||||
{
|
||||
@@ -46,7 +44,9 @@ namespace BNetServer
|
||||
Log.outError(LogFilter.Network, $"Could not resolve LoginREST.ExternalAddress {configuredAddress}");
|
||||
return;
|
||||
}
|
||||
externalAddress = new IPEndPoint(address, port);
|
||||
|
||||
_externalEndpoint = new IPEndPoint(address, port);
|
||||
_externalHostname = $"{configuredAddress}:{port}";
|
||||
|
||||
configuredAddress = ConfigMgr.GetDefaultValue("LoginREST.LocalAddress", "127.0.0.1");
|
||||
if (!IPAddress.TryParse(configuredAddress, out address))
|
||||
@@ -55,7 +55,8 @@ namespace BNetServer
|
||||
return;
|
||||
}
|
||||
|
||||
localAddress = new IPEndPoint(address, port);
|
||||
_localEndpoint = new IPEndPoint(address, port);
|
||||
_localHostname = $"{configuredAddress}:{port}";
|
||||
|
||||
// set up form inputs
|
||||
formInputs.Type = "LOGIN_FORM";
|
||||
@@ -117,14 +118,22 @@ namespace BNetServer
|
||||
return serviceHandlers.LookupByKey((serviceHash, methodId));
|
||||
}
|
||||
|
||||
public IPEndPoint GetAddressForClient(IPAddress address)
|
||||
public IPEndPoint GetEndpointForClient(IPAddress address)
|
||||
{
|
||||
if (IPAddress.IsLoopback(address))
|
||||
return localAddress;
|
||||
return _localEndpoint;
|
||||
|
||||
return externalAddress;
|
||||
return _externalEndpoint;
|
||||
}
|
||||
|
||||
public string GetHostnameForClient(IPEndPoint address)
|
||||
{
|
||||
if (IPAddress.IsLoopback(address.Address))
|
||||
return _localHostname;
|
||||
|
||||
return _externalHostname;
|
||||
}
|
||||
|
||||
public FormInputs GetFormInput()
|
||||
{
|
||||
return formInputs;
|
||||
|
||||
@@ -39,11 +39,11 @@ namespace BNetServer.Networking
|
||||
os = logonRequest.Platform;
|
||||
build = (uint)logonRequest.ApplicationVersion;
|
||||
|
||||
var endpoint = Global.LoginServiceMgr.GetAddressForClient(GetRemoteIpEndPoint().Address);
|
||||
var hostname = Global.LoginServiceMgr.GetHostnameForClient(GetRemoteIpEndPoint());
|
||||
|
||||
ChallengeExternalRequest externalChallenge = new();
|
||||
externalChallenge.PayloadType = "web_auth_url";
|
||||
externalChallenge.Payload = ByteString.CopyFromUtf8($"https://{endpoint.Address}:{endpoint.Port}/bnetserver/login/");
|
||||
externalChallenge.Payload = ByteString.CopyFromUtf8($"https://{hostname}/bnetserver/login/");
|
||||
|
||||
SendRequest((uint)OriginalHash.ChallengeListener, 3, externalChallenge);
|
||||
return BattlenetRpcErrorCode.Ok;
|
||||
|
||||
Reference in New Issue
Block a user