From 18568159a2e6441825da2bec4a147e7bdff3694f Mon Sep 17 00:00:00 2001 From: ChronosX88 Date: Sat, 31 Oct 2020 13:43:39 +0400 Subject: [PATCH] Refactor InBandLogin plugin: split code into few files --- .../InBandLogin/Handlers/LoginC2SHandler.cs | 60 ++++++ .../Handlers/RegisterC2SHandler.cs | 82 ++++++++ .../InBandLogin/PayloadModels.cs | 46 +++++ src/ZirconiumPlugins/InBandLogin/Plugin.cs | 183 +----------------- 4 files changed, 194 insertions(+), 177 deletions(-) create mode 100644 src/ZirconiumPlugins/InBandLogin/Handlers/LoginC2SHandler.cs create mode 100644 src/ZirconiumPlugins/InBandLogin/Handlers/RegisterC2SHandler.cs create mode 100644 src/ZirconiumPlugins/InBandLogin/PayloadModels.cs diff --git a/src/ZirconiumPlugins/InBandLogin/Handlers/LoginC2SHandler.cs b/src/ZirconiumPlugins/InBandLogin/Handlers/LoginC2SHandler.cs new file mode 100644 index 0000000..4b9f631 --- /dev/null +++ b/src/ZirconiumPlugins/InBandLogin/Handlers/LoginC2SHandler.cs @@ -0,0 +1,60 @@ +using System.Collections.Generic; +using Zirconium.Core.Models; +using Zirconium.Core.Plugins.Interfaces; +using Zirconium.Utils; + +namespace InBandLogin.Handlers +{ + public class LoginC2SHandler : IC2SMessageHandler + { + private const string errID = "invalid_creds"; + private readonly IPluginHostAPI _pluginHost; + + public LoginC2SHandler(IPluginHostAPI pluginHostApi) + { + this._pluginHost = pluginHostApi; + } + + public string GetHandlerUniqueID() + { + return "LoginC2SHandler"; + } + + public string GetHandlingMessageType() + { + return "profile:login"; + } + + public void HandleMessage(Session session, BaseMessage message) + { + var pObj = message.Payload.ToObject(); + var authProvider = _pluginHost.GetAuthProvider(); + if (authProvider.TestPassword(pObj.Username, pObj.Password)) + { + BaseMessage reply = new BaseMessage(message, true); + var p = new LoginResponsePayload(); + string deviceID = "ABCDEF"; // TODO fix device id system + p.AuthToken = _pluginHost.GenerateAuthToken($"@{pObj.Username}@{_pluginHost.GetServerID()}", deviceID); + p.DeviceID = deviceID; + reply.Payload = p.ToDictionary(); + reply.Ok = true; + session.ConnectionHandler.SendMessage(reply); + } + else + { + var reply = OtherUtils.GenerateProtocolError( + message, + errID, + "Username/password isn't valid", + new Dictionary() + ); + session.ConnectionHandler.SendMessage(reply); + } + } + + public bool IsAuthorizationRequired() + { + return false; + } + } +} \ No newline at end of file diff --git a/src/ZirconiumPlugins/InBandLogin/Handlers/RegisterC2SHandler.cs b/src/ZirconiumPlugins/InBandLogin/Handlers/RegisterC2SHandler.cs new file mode 100644 index 0000000..1400c1e --- /dev/null +++ b/src/ZirconiumPlugins/InBandLogin/Handlers/RegisterC2SHandler.cs @@ -0,0 +1,82 @@ +using System; +using System.Collections.Generic; +using Zirconium.Core.Models; +using Zirconium.Core.Plugins.Interfaces; +using Zirconium.Utils; + +namespace InBandLogin.Handlers +{ + public class RegisterC2SHandler : IC2SMessageHandler + { + private readonly IPluginHostAPI _pluginHost; + + public RegisterC2SHandler(IPluginHostAPI pluginHost) + { + this._pluginHost = pluginHost; + } + + public string GetHandlerUniqueID() + { + return "RegisterC2SHandler"; + } + + public string GetHandlingMessageType() + { + return "profile:register"; + } + + public void HandleMessage(Session session, BaseMessage message) + { + var pObj = message.Payload.ToObject(); + var authProvider = _pluginHost.GetAuthProvider(); + try + { + authProvider.CreateUser(pObj.Username, pObj.Password); + } + catch (Exception e) + { + BaseMessage errorReply; + if (e.Message.Contains("E11000")) + { + errorReply = OtherUtils.GenerateProtocolError( + message, + "id_exists", + "Username already taken", + new Dictionary() + ); + } + else + { + errorReply = OtherUtils.GenerateProtocolError( + message, + "other", + e.ToString(), + new Dictionary() + ); + } + + session.ConnectionHandler.SendMessage(errorReply); + return; + } + + BaseMessage reply = new BaseMessage(message, true); + var p = new RegisterResponsePayload(); + p.UserID = $"@{pObj.Username}@{_pluginHost.GetServerID()}"; + if (pObj.LoginOnSuccess) + { + string deviceID = "ABCDEF"; // TODO fix device id system + p.AuthToken = _pluginHost.GenerateAuthToken($"@{pObj.Username}@{_pluginHost.GetServerID()}", deviceID); + p.DeviceID = deviceID; + } + + reply.Payload = p.ToDictionary(); + reply.Ok = true; + session.ConnectionHandler.SendMessage(reply); + } + + public bool IsAuthorizationRequired() + { + return false; + } + } +} \ No newline at end of file diff --git a/src/ZirconiumPlugins/InBandLogin/PayloadModels.cs b/src/ZirconiumPlugins/InBandLogin/PayloadModels.cs new file mode 100644 index 0000000..77c84c6 --- /dev/null +++ b/src/ZirconiumPlugins/InBandLogin/PayloadModels.cs @@ -0,0 +1,46 @@ +using Newtonsoft.Json; + +namespace InBandLogin +{ + class LoginRequestPayload + { + [JsonProperty("username")] + public string Username { get; set; } + + [JsonProperty("password")] + public string Password { get; set; } + } + + class LoginResponsePayload + { + [JsonProperty("authToken")] + public string AuthToken { get; set; } + + [JsonProperty("deviceID")] + public string DeviceID { get; set; } + } + + class RegisterRequestPayload + { + [JsonProperty("username")] + public string Username { get; set; } + + [JsonProperty("password")] + public string Password { get; set; } + + [JsonProperty("loginOnSuccess")] + public bool LoginOnSuccess { get; set; } + } + + class RegisterResponsePayload + { + [JsonProperty("userID")] + public string UserID { get; set; } + + [JsonProperty("authToken")] + public string AuthToken { get; set; } + + [JsonProperty("deviceID")] + public string DeviceID { get; set; } + } +} \ No newline at end of file diff --git a/src/ZirconiumPlugins/InBandLogin/Plugin.cs b/src/ZirconiumPlugins/InBandLogin/Plugin.cs index ef85fad..3d9a656 100644 --- a/src/ZirconiumPlugins/InBandLogin/Plugin.cs +++ b/src/ZirconiumPlugins/InBandLogin/Plugin.cs @@ -1,57 +1,11 @@ -using System; -using System.Collections.Generic; -using Newtonsoft.Json; -using Zirconium.Core.Models; +using InBandLogin.Handlers; using Zirconium.Core.Plugins.Interfaces; -using Zirconium.Utils; namespace InBandLogin { - public class InBandLoginPlugin : IPluginAPI + public class Plugin : IPluginAPI { - class LoginRequestPayload - { - [JsonProperty("username")] - public string Username { get; set; } - - [JsonProperty("password")] - public string Password { get; set; } - } - - class LoginResponsePayload - { - [JsonProperty("authToken")] - public string AuthToken { get; set; } - - [JsonProperty("deviceID")] - public string DeviceID { get; set; } - } - - class RegisterRequestPayload - { - [JsonProperty("username")] - public string Username { get; set; } - - [JsonProperty("password")] - public string Password { get; set; } - - [JsonProperty("loginOnSuccess")] - public bool LoginOnSuccess { get; set; } - } - - class RegisterResponsePayload - { - [JsonProperty("userID")] - public string UserID { get; set; } - - [JsonProperty("authToken")] - public string AuthToken { get; set; } - - [JsonProperty("deviceID")] - public string DeviceID { get; set; } - } - - private IPluginHostAPI pluginHostAPI; + private IPluginHostAPI _pluginHost; public string GetPluginUniqueName() { @@ -60,134 +14,9 @@ namespace InBandLogin public void Initialize(IPluginHostAPI pluginHost) { - this.pluginHostAPI = pluginHost; - pluginHostAPI.Hook(new LoginC2SHandler(pluginHostAPI)); - pluginHostAPI.Hook(new RegisterC2SHandler(pluginHostAPI)); - } - - class LoginC2SHandler : IC2SMessageHandler - { - private const string errID = "invalid_creds"; - private IPluginHostAPI _phostAPI; - public LoginC2SHandler(IPluginHostAPI pluginHostAPI) - { - this._phostAPI = pluginHostAPI; - } - - public string GetHandlerUniqueID() - { - return "LoginC2SHandler"; - } - - public string GetHandlingMessageType() - { - return "profile:login"; - } - - public void HandleMessage(Session session, BaseMessage message) - { - var pObj = message.Payload.ToObject(); - var authProvider = _phostAPI.GetAuthProvider(); - if (authProvider.TestPassword(pObj.Username, pObj.Password)) - { - BaseMessage reply = new BaseMessage(message, true); - var p = new LoginResponsePayload(); - string deviceID = "ABCDEF"; // TODO fix device id system - p.AuthToken = _phostAPI.GenerateAuthToken($"@{pObj.Username}@{_phostAPI.GetServerID()}", deviceID); - p.DeviceID = deviceID; - reply.Payload = p.ToDictionary(); - reply.Ok = true; - session.ConnectionHandler.SendMessage(reply); - } - else - { - var reply = OtherUtils.GenerateProtocolError( - message, - errID, - "Username/password isn't valid", - new Dictionary() - ); - session.ConnectionHandler.SendMessage(reply); - } - } - - public bool IsAuthorizationRequired() - { - return false; - } - } - - class RegisterC2SHandler : IC2SMessageHandler - { - - private IPluginHostAPI _pluginHostAPI; - - public RegisterC2SHandler(IPluginHostAPI pluginHostAPI) - { - this._pluginHostAPI = pluginHostAPI; - } - - - public string GetHandlerUniqueID() - { - return "RegisterC2SHandler"; - } - - public string GetHandlingMessageType() - { - return "profile:register"; - } - - public void HandleMessage(Session session, BaseMessage message) - { - var pObj = message.Payload.ToObject(); - var authProvider = _pluginHostAPI.GetAuthProvider(); - try - { - authProvider.CreateUser(pObj.Username, pObj.Password); - } - catch (Exception e) - { - BaseMessage errorReply; - if (e.Message.Contains("E11000")) - { - errorReply = OtherUtils.GenerateProtocolError( - message, - "id_exists", - "Username already taken", - new Dictionary() - ); - } - else - { - errorReply = OtherUtils.GenerateProtocolError( - message, - "other", - e.ToString(), - new Dictionary() - ); - } - session.ConnectionHandler.SendMessage(errorReply); - return; - } - BaseMessage reply = new BaseMessage(message, true); - var p = new RegisterResponsePayload(); - p.UserID = $"@{pObj.Username}@{_pluginHostAPI.GetServerID()}"; - if (pObj.LoginOnSuccess) - { - string deviceID = "ABCDEF"; // TODO fix device id system - p.AuthToken = _pluginHostAPI.GenerateAuthToken($"@{pObj.Username}@{_pluginHostAPI.GetServerID()}", deviceID); - p.DeviceID = deviceID; - } - reply.Payload = p.ToDictionary(); - reply.Ok = true; - session.ConnectionHandler.SendMessage(reply); - } - - public bool IsAuthorizationRequired() - { - return false; - } + this._pluginHost = pluginHost; + this._pluginHost.Hook(new LoginC2SHandler(this._pluginHost)); + this._pluginHost.Hook(new RegisterC2SHandler(this._pluginHost)); } } }