private static string RegByEmail(Message msg, HttpContext context) { var DtokenPayload = JsonWebToken.DecodeToObject <Dictionary <string, string> >(msg.Data["Dtoken"], "", false); DtokenPayload.Add("IP", context.Connection.RemoteIpAddress.ToString()); var email = JsonWebToken.DecodeToObject <Dictionary <string, string> >(msg.Data["Etoken"], "", false)["Email"].Trim().ToLower(); if (JsonGsTools.IsValidEmailAddress(email)) { using var connection = new MySqlConnection(Startup.AppConfiguration.GetConnectionString("Auth")); connection.Open(); var command = new MySqlCommand("_NewPlayerByEmail", connection) { CommandType = CommandType.StoredProcedure }; command.Parameters.AddWithValue("Device", DtokenPayload["UI"]); command.Parameters.AddWithValue("Email", email); command.Parameters.AddWithValue("Etoken", msg.Data["Etoken"]); command.Parameters.AddWithValue("LogInfo", JsonGsTools.ObjectToJson(DtokenPayload)); var result = new MySqlParameter("Result", MySqlDbType.Int32) { Direction = ParameterDirection.Output }; command.Parameters.Add(result); command.ExecuteNonQuery(); if ((int)command.Parameters["Result"].Value == 0) { return((new Message(new Dictionary <string, string> { { "Result", "OK" } })).ToJson()); } else { return((new Message(new Dictionary <string, string> { { "Result", "Duplicated Email" } })).ToJson()); } } else { return((new Message(new Dictionary <string, string> { { "Result", "Invalid Email" } })).ToJson()); } }
public static async Task <string> Auth(HttpContext context) { var msg = await JsonGsTools.GetMessageAsync(context); if (msg == null) { context.Response.StatusCode = 404; return(""); } context.Response.ContentType = "application/json"; if (msg.Version != Message.VERSION) { return(Message.JsonGsErrorMessage(100)); } if (!msg.Data.ContainsKey("Etoken") || !msg.Data.ContainsKey("Dtoken")) { return(Message.JsonGsErrorMessage(300)); } var DtokenPayload = JsonWebToken.DecodeToObject <Dictionary <string, string> >(msg.Data["Dtoken"], "", false); DtokenPayload.Add("IP", context.Connection.RemoteIpAddress.ToString()); using var connection = new MySqlConnection(Startup.AppConfiguration.GetConnectionString("Auth")); connection.Open(); int PlayerId = 0; if (msg.Data["Etoken"] != "") { var command = new MySqlCommand("_GetPlayerByEtoken", connection) { CommandType = CommandType.StoredProcedure }; command.Parameters.AddWithValue("Etoken", msg.Data["Etoken"]); var reader = command.ExecuteReader(); if (reader.HasRows) { reader.Read(); PlayerId = reader.GetInt32(0); reader.Close(); } else { reader.Close(); command = new MySqlCommand("_InsertEtokenFlood", connection) { CommandType = CommandType.StoredProcedure }; command.Parameters.AddWithValue("Etoken", msg.Data["Etoken"]); command.Parameters.AddWithValue("Dtoken", msg.Data["Dtoken"]); command.Parameters.AddWithValue("LogInfo", JsonGsTools.ObjectToJson(DtokenPayload)); #pragma warning disable CS4014 // Так как этот вызов не ожидается, выполнение существующего метода продолжается до тех пор, пока вызов не будет завершен command.ExecuteNonQueryAsync(); #pragma warning restore CS4014 // Так как этот вызов не ожидается, выполнение существующего метода продолжается до тех пор, пока вызов не будет завершен return((new Message(new Dictionary <string, string> { { "Result", "EtokenError" } } )).ToJson()); } } if (PlayerId == 0) { var command = new MySqlCommand("_GetPlayerByDevice", connection) { CommandType = CommandType.StoredProcedure }; command.Parameters.AddWithValue("Device", DtokenPayload["UI"]); var reader = command.ExecuteReader(); if (reader.HasRows) { reader.Read(); PlayerId = reader.GetInt32(0); } reader.Close(); } if (PlayerId > 0) { var Token = JsonWebToken.Encode(new Dictionary <string, string> { { "ID", PlayerId.ToString() } }, "", JwtHashAlgorithm.GS); var command = new MySqlCommand("_SetToken", connection) { CommandType = CommandType.StoredProcedure }; command.Parameters.AddWithValue("PlayerId", PlayerId); command.Parameters.AddWithValue("Token", Token); command.Parameters.AddWithValue("LogInfo", JsonGsTools.ObjectToJson(DtokenPayload)); #pragma warning disable CS4014 // Так как этот вызов не ожидается, выполнение существующего метода продолжается до тех пор, пока вызов не будет завершен command.ExecuteNonQueryAsync(); #pragma warning restore CS4014 // Так как этот вызов не ожидается, выполнение существующего метода продолжается до тех пор, пока вызов не будет завершен return((new Message(new Dictionary <string, string> { { "Result", "OK" }, { "Token", Token } } )).ToJson()); } else { return((new Message(new Dictionary <string, string> { { "Result", "RegistrationRequired" }, { "Server", Startup.AppConfiguration["AppServers:Reg"] } } )).ToJson()); } }