Some REST and Auth improvement;

Small other improvements and refactoring.
This commit is contained in:
Lucca Faria Ferri 2023-01-28 02:08:51 -08:00
parent 9750e23e24
commit 0ba94f6147
7 changed files with 70 additions and 71 deletions

View File

@ -227,10 +227,7 @@ namespace DiIiS_NA.LoginServer.AccountsSystem
public string BattleTag public string BattleTag
{ {
get get => BattleTagName + "#" + HashCode.ToString("D4");
{
return BattleTagName + "#" + HashCode.ToString("D4");
}
set set
{ {
if (!value.Contains('#')) if (!value.Contains('#'))

View File

@ -266,12 +266,12 @@ namespace DiIiS_NA.LoginServer.Battle
if (method.Name == "KeepAlive") if (method.Name == "KeepAlive")
{ {
Logger.Debug( Logger.Debug(
$"Call: {service.GetType().Name}, Service hash: {header.ServiceHash}, Method: {method.Name}, ID: {header.MethodId}"); $"Call: $[olive]{service.GetType().Name}$[/]$, Service hash: $[olive]{header.ServiceHash}$[/]$, Method: $[olive]{method.Name}$[/]$, ID: $[olive]{header.MethodId}$[/]$");
} }
else else
{ {
Logger.Trace( Logger.Trace(
$"Call: {service.GetType().Name}, Service hash: {header.ServiceHash}, Method: {method.Name}, ID: {header.MethodId}"); $"Call: $[olive]${service.GetType().Name}$[/]$, Service hash: $[olive]${header.ServiceHash}$[/]$, Method: $[olive]${method.Name}$[/]$, ID: $[olive]${header.MethodId}$[/]$");
} }
#endif #endif

View File

@ -9,12 +9,12 @@ namespace DiIiS_NA.LoginServer.Battle
{ {
public static class PlayerManager public static class PlayerManager
{ {
public static readonly List<BattleClient> OnlinePlayers = new List<BattleClient>(); public static readonly List<BattleClient> OnlinePlayers = new();
public static void PlayerConnected(BattleClient client) public static void PlayerConnected(BattleClient client)
{ {
var already_logged = OnlinePlayers.Where(cli => cli.Account.Email == client.Account.Email); var alreadyLoggedIn = OnlinePlayers.Where(cli => cli.Account.Email == client.Account.Email).ToArray();
foreach (var logged in already_logged) foreach (var logged in alreadyLoggedIn)
{ {
OnlinePlayers.Remove(client); OnlinePlayers.Remove(client);
logged.SocketConnection.DisconnectAsync(); logged.SocketConnection.DisconnectAsync();
@ -23,6 +23,9 @@ namespace DiIiS_NA.LoginServer.Battle
OnlinePlayers.Add(client); OnlinePlayers.Add(client);
} }
public static BattleClient GetClientByEmail(string email) => OnlinePlayers.FirstOrDefault(cli => cli.Account.Email == email);
public static BattleClient GetClientByBattleTag(string battleTag) => OnlinePlayers.FirstOrDefault(cli => cli.Account.BattleTag == battleTag);
public static BattleClient GetClientByCID(ulong cid) public static BattleClient GetClientByCID(ulong cid)
{ {
return OnlinePlayers.FirstOrDefault(bc => bc.CID == cid); return OnlinePlayers.FirstOrDefault(bc => bc.CID == cid);

View File

@ -43,7 +43,7 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services
//Error 35 - Battle.net service - Disabled //Error 35 - Battle.net service - Disabled
//Error 36 - Failed to load authentication module //Error 36 - Failed to load authentication module
//Error 37 - Authentication service is receiving too many requests. //Error 37 - Authentication service is receiving too many requests.
//Error 38 - To play you need to get BattleTag //Error 38 - To play you need to get a BattleTag
//Error 42 - You are connecting to the wrong server (Wrong sequence of actions) //Error 42 - You are connecting to the wrong server (Wrong sequence of actions)
//Error 43 - You blocked your account from your mobile phone. //Error 43 - You blocked your account from your mobile phone.
//Error 44 - Unable to perform this action. The account is deprived of the function of voice communication. //Error 44 - Unable to perform this action. The account is deprived of the function of voice communication.
@ -105,11 +105,11 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services
case "zhCN": ((HandlerController)controller).Client.ClientLanguage = Battle.BattleClient.ClientLocale.zhCN; break; case "zhCN": ((HandlerController)controller).Client.ClientLanguage = Battle.BattleClient.ClientLocale.zhCN; break;
} }
done(NoData.CreateBuilder().Build()); done(NoData.CreateBuilder().Build());
Logger.Info("----------------------------------------------------------------");
var builder = ChallengeExternalRequest.CreateBuilder(); var builder = ChallengeExternalRequest.CreateBuilder();
var complete = LogonResult.CreateBuilder(); var complete = LogonResult.CreateBuilder();
switch (request.Program.ToLower()) switch (request.Program.ToLower())
{ {
//case "app":
case "d3": case "d3":
//if (!request.HasCachedWebCredentials) //if (!request.HasCachedWebCredentials)
{ {
@ -129,8 +129,7 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services
} }
break; break;
default: default:
Logger.Error("Authorization not implemented for Game: {0}", game); Logger.Error("Authorization not implemented for Game: $[red]${0}$[/]$ ({1})", game, request.Program.ToLower());
Logger.Info("----------------------------------------------------------------");
break; break;
} }
@ -160,34 +159,33 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services
{ {
done(NoData.CreateBuilder().Build()); done(NoData.CreateBuilder().Build());
#region Authentication complete #region Authentication complete
if (request.WebCredentials.ToStringUtf8().ToLower().Contains("eu-")) // if (request.WebCredentials.ToStringUtf8().ToLower().Contains("eu-"))
{ // {
((HandlerController)controller).Client.Account = AccountManager.GetAccountByPersistentID(1); // ((HandlerController)controller).Client.Account = AccountManager.GetAccountByPersistentID(1);
//
// var comple = LogonResult.CreateBuilder()
// .SetAccountId(((HandlerController)controller).Client.Account.BnetEntityId)
// .SetEmail("TEST@MAIL.DU")
// .SetBattleTag("Test#0000")
// .SetSessionKey(ByteString.CopyFrom("7CB18EDA470F96A4DD70C70B9307CBBA2A4131043075648D8B2F55EE0E383132025D3CC3BA43406DC0740D776B1E5C366BD1123D16E6D6759075B475C28C4022".ToByteArray()))
// .AddAvailableRegion(1)
// .AddAvailableRegion(2)
// .AddAvailableRegion(3)
// .SetConnectedRegion(1)
// .SetGeoipCountry("RU")
// .SetRestrictedMode(false)
// .SetErrorCode(0);
// comple.AddGameAccountId(((HandlerController)controller).Client.Account.GameAccount.BnetEntityId);
// ((HandlerController)controller).Client.Account.GameAccount.LoggedInClient = ((HandlerController)controller).Client;
// ((HandlerController)controller).Client.MakeRPC((lid) => AuthenticationListener.CreateStub(((HandlerController)controller).Client).OnLogonComplete(controller, comple.Build(), callback => { }));
// ((HandlerController)controller).Client.Account.GameAccount.ProgramField.Value = "FEN";
// PlayerManager.PlayerConnected(((HandlerController)controller).Client);
// var ga1selected = GameAccountSelectedRequest.CreateBuilder().SetResult(0).SetGameAccountId(((HandlerController)controller).Client.Account.GameAccount.BnetEntityId);
// ((HandlerController)controller).Client.MakeRPC((lid) =>
// AuthenticationListener.CreateStub(((HandlerController)controller).Client).OnGameAccountSelected(new HandlerController() { ListenerId = lid }, ga1selected.Build(), callback => { }));
// return;
// }
var comple = LogonResult.CreateBuilder()
.SetAccountId(((HandlerController)controller).Client.Account.BnetEntityId)
.SetEmail("TEST@MAIL.DU")
.SetBattleTag("Test#0000")
.SetSessionKey(ByteString.CopyFrom("7CB18EDA470F96A4DD70C70B9307CBBA2A4131043075648D8B2F55EE0E383132025D3CC3BA43406DC0740D776B1E5C366BD1123D16E6D6759075B475C28C4022".ToByteArray()))
.AddAvailableRegion(1)
.AddAvailableRegion(2)
.AddAvailableRegion(3)
.SetConnectedRegion(1)
.SetGeoipCountry("RU")
.SetRestrictedMode(false)
.SetErrorCode(0);
comple.AddGameAccountId(((HandlerController)controller).Client.Account.GameAccount.BnetEntityId);
((HandlerController)controller).Client.Account.GameAccount.LoggedInClient = ((HandlerController)controller).Client;
((HandlerController)controller).Client.MakeRPC((lid) => AuthenticationListener.CreateStub(((HandlerController)controller).Client).OnLogonComplete(controller, comple.Build(), callback => { }));
((HandlerController)controller).Client.Account.GameAccount.ProgramField.Value = "FEN";
PlayerManager.PlayerConnected(((HandlerController)controller).Client);
var ga1selected = GameAccountSelectedRequest.CreateBuilder().SetResult(0).SetGameAccountId(((HandlerController)controller).Client.Account.GameAccount.BnetEntityId);
((HandlerController)controller).Client.MakeRPC((lid) =>
AuthenticationListener.CreateStub(((HandlerController)controller).Client).OnGameAccountSelected(new HandlerController() { ListenerId = lid }, ga1selected.Build(), callback => { }));
}
else
{
((HandlerController)controller).Client.Account = AccountManager.GetAccountBySaltTicket(request.WebCredentials.ToStringUtf8()); ((HandlerController)controller).Client.Account = AccountManager.GetAccountBySaltTicket(request.WebCredentials.ToStringUtf8());
if (((HandlerController)controller).Client.Account == null) if (((HandlerController)controller).Client.Account == null)
@ -199,8 +197,8 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services
} }
else else
{ {
Logger.Info("Client connected - {0}#{1}", ((HandlerController)controller).Client.Account.DBAccount.BattleTagName, ((HandlerController)controller).Client.Account.HashCode); Logger.Info(
Logger.Info("----------------------------------------------------------------"); $"Client connected - {((HandlerController)controller).Client.Account.DBAccount.BattleTagName}#{((HandlerController)controller).Client.Account.HashCode}");
var complete = LogonResult.CreateBuilder() var complete = LogonResult.CreateBuilder()
.SetAccountId(((HandlerController)controller).Client.Account.BnetEntityId) .SetAccountId(((HandlerController)controller).Client.Account.BnetEntityId)
.SetEmail(((HandlerController)controller).Client.Account.Email) .SetEmail(((HandlerController)controller).Client.Account.Email)
@ -209,17 +207,16 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services
.SetConnectedRegion(1) .SetConnectedRegion(1)
.SetGeoipCountry("RU") .SetGeoipCountry("RU")
.SetRestrictedMode(false) .SetRestrictedMode(false)
.SetErrorCode(0); .SetErrorCode(0)
complete.AddGameAccountId(((HandlerController)controller).Client.Account.GameAccount.BnetEntityId); //D3 .AddGameAccountId(((HandlerController)controller).Client.Account.GameAccount.BnetEntityId); //D3
((HandlerController)controller).Client.Account.GameAccount.LoggedInClient = ((HandlerController)controller).Client; ((HandlerController)controller).Client.Account.GameAccount.LoggedInClient = ((HandlerController)controller).Client;
((HandlerController)controller).Client.MakeRPC((lid) => AuthenticationListener.CreateStub(((HandlerController)controller).Client).OnLogonComplete(controller, complete.Build(), callback => { })); ((HandlerController)controller).Client.MakeRPC((lid) => AuthenticationListener.CreateStub(((HandlerController)controller).Client).OnLogonComplete(controller, complete.Build(), callback => { }));
PlayerManager.PlayerConnected(((HandlerController)controller).Client); PlayerManager.PlayerConnected(((HandlerController)controller).Client);
var gaselected = GameAccountSelectedRequest.CreateBuilder().SetResult(0).SetGameAccountId(((HandlerController)controller).Client.Account.GameAccount.BnetEntityId); var selectedGameAccount = GameAccountSelectedRequest.CreateBuilder().SetResult(0).SetGameAccountId(((HandlerController)controller).Client.Account.GameAccount.BnetEntityId);
((HandlerController)controller).Client.MakeRPC((lid) => ((HandlerController)controller).Client.MakeRPC((lid) =>
AuthenticationListener.CreateStub(((HandlerController)controller).Client).OnGameAccountSelected(new HandlerController() { ListenerId = lid }, gaselected.Build(), callback => { })); AuthenticationListener.CreateStub(((HandlerController)controller).Client).OnGameAccountSelected(new HandlerController() { ListenerId = lid }, selectedGameAccount.Build(), callback => { }));
}
} }
#endregion #endregion
} }

View File

@ -50,7 +50,7 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services
(controller as HandlerController).Client.Services.Add(2119327385, 0x26); (controller as HandlerController).Client.Services.Add(2119327385, 0x26);
done(builder.Build()); done(builder.Build());
Logger.Info("Connect with $[dodgerblue1]$Blizz$[/]$$[deepskyblue2]$less$[/]$ established. Client - {0}", (controller as HandlerController).Client.SocketConnection.RemoteAddress); Logger.Info("Connect with Blizzless established. Client - {0}", (controller as HandlerController).Client.SocketConnection.RemoteAddress);
} }
public override void Echo(IRpcController controller, EchoRequest request, Action<EchoResponse> done) public override void Echo(IRpcController controller, EchoRequest request, Action<EchoResponse> done)

View File

@ -49,7 +49,7 @@ namespace DiIiS_NA.REST.Http
return Encoding.UTF8.GetBytes(sb.ToString()); return Encoding.UTF8.GetBytes(sb.ToString());
} }
public static byte[] CreateResponse(HttpCode httpCode, string content, bool closeConnection = false) public static byte[] CreateResponse(HttpCode httpCode, string content, bool closeConnection = false, string contentType = "application/json;charset=UTF-8")
{ {
var sb = new StringBuilder(); var sb = new StringBuilder();
@ -60,7 +60,7 @@ namespace DiIiS_NA.REST.Http
if (closeConnection) if (closeConnection)
sw.WriteLine("Connection: close"); sw.WriteLine("Connection: close");
sw.WriteLine("Content-Type: application/json;charset=UTF-8"); sw.WriteLine("Content-Type: " + contentType);
sw.WriteLine(); sw.WriteLine();
sw.WriteLine(content); sw.WriteLine(content);

View File

@ -13,6 +13,8 @@ using DiIiS_NA.REST.Data.Authentication;
using DiIiS_NA.REST.JSON; using DiIiS_NA.REST.JSON;
using DiIiS_NA.LoginServer.AccountsSystem; using DiIiS_NA.LoginServer.AccountsSystem;
using System.IO; using System.IO;
using System.Net.Security;
using System.Web;
using DiIiS_NA.GameServer.MessageSystem; using DiIiS_NA.GameServer.MessageSystem;
namespace DiIiS_NA.REST namespace DiIiS_NA.REST
@ -97,7 +99,7 @@ namespace DiIiS_NA.REST
void SendResponseHtml(HttpCode code, string response) void SendResponseHtml(HttpCode code, string response)
{ {
AsyncWrite(HttpHelper.CreateResponse(code, response)); AsyncWrite(HttpHelper.CreateResponse(code, response, contentType: "text/html"));
} }
public override void Start() public override void Start()