Пример #1
0
        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());
            }
        }
Пример #2
0
        public static async Task <string> Reg(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((msg.Data["Etoken"] == "") ? RegByDevice(msg, context) : RegByEmail(msg, context));
            }
            if (msg.Data.ContainsKey("Etoken") && msg.Data.ContainsKey("Dtoken") && msg.Data.ContainsKey("NewEtoken"))
            {
                return(ChangePassword(msg, context));
            }
            return(Message.JsonGsErrorMessage(300));
        }
Пример #3
0
        public static async Task <string> Init(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("Version"))
            {
                if (msg.Data["Version"] == Startup.AppConfiguration["AppVersion"])
                {
                    return((new Message(new Dictionary <string, string>
                    {
                        { "AuthServer", Startup.AppConfiguration["AppServers:Auth"] }, { "Result", "OK" }
                    }
                                        )).ToJson());
                }
                else
                {
                    return((new Message(new Dictionary <string, string>
                    {
                        { "Result", "Unsupported version" }
                    }
                                        )).ToJson());
                }
            }
            else
            {
                return(Message.JsonGsErrorMessage(300));
            }
        }
Пример #4
0
        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());
            }
        }