public ResponseStruct Login(string SeasonID, string UserName, string Password) { ResponseStruct Result; MySqlConnection DBConnection = new MySqlConnection(OverallInformations.TShockDBConnectionString); DBConnection.Open(); string SQLQuery = "SELECT Username,Password,Usergroup FROM users WHERE Username=@UserName"; MySqlCommand DBCommand = new MySqlCommand(SQLQuery, DBConnection); DBCommand.Prepare(); DBCommand.Parameters.Add("@UserName", MySqlDbType.VarChar).Value = UserName; MySqlDataReader DBReader = DBCommand.ExecuteReader(); List<TShockUserInformations> TShockUserList = new List<TShockUserInformations>(); while(DBReader.Read()) { TShockUserInformations TShockUserInstance = new TShockUserInformations(); TShockUserInstance.UserName = DBReader.GetString("Username"); TShockUserInstance.Password = DBReader.GetString("Password"); TShockUserInstance.UserGroup = DBReader.GetString("Usergroup"); TShockUserList.Add(TShockUserInstance); } DBReader.Dispose(); DBCommand.Dispose(); DBConnection.Dispose(); LauncherClientInformations aClient; if (!OverallInformations.ManagementClients.TryGetValue(SeasonID, out aClient)) { Result = new ResponseStruct() { Status = ResponseStatusType.Fail, Error = new List<string>() { "Không tìm thấy Season ID." }, Broadcast = new List<string>() { "Khởi động lại Launcher Client." } }; } else if (UserName == "") { Result = new ResponseStruct() { Status = ResponseStatusType.Fail, Error = new List<string>() { "'User Name' trống rỗng." }, Broadcast = new List<string>() { "'User Name' không được phép để trống, nhập đầy đủ thông tin để tiếp tục." } }; } else if (UserName.Length > 32) { Result = new ResponseStruct() { Status = ResponseStatusType.Fail, Error = new List<string>() { "Tên tài khoản quá dài." }, Broadcast = new List<string>() { "Nhập tên tài khoản với độ dài không quá 32 kí tự." } }; } else if (TShockUserList.Count == 0) { Result = new ResponseStruct() { Status = ResponseStatusType.Fail, Error = new List<string>() { "Tài khoản không tồn tại." }, Broadcast = new List<string>() { "Tạo tài khoản để có thể bắt đầu chơi." } }; } else if (TShockUserList.Count > 1) { Result = new ResponseStruct() { Status = ResponseStatusType.Fail, Error = new List<string>() { "Tài khoản bị trùng." }, Broadcast = new List<string>() { "Liên hệ Admin quản lí cơ sở dữ liệu." } }; } else if (String.IsNullOrWhiteSpace(Password)) { Result = new ResponseStruct() { Status = ResponseStatusType.Fail, Error = new List<string>() { "Mật mã trống rỗng." }, Broadcast = new List<string>() { "Nhập mật mã đầy đủ." } }; } else { if (BCrypt.Net.BCrypt.Verify(Password, TShockUserList[0].Password)) { if (TShockUserList[0].UserGroup != "superadmin") { Result = new ResponseStruct() { Status = ResponseStatusType.Fail, Error = new List<string>() { "Tài khoản của bạn không có quyền sử dụng Launcher Management." }, Broadcast = new List<string>() { "Yêu cầu tài khoản phải có quyền quản trị cao nhất: superadmin." } }; } else { if (OverallInformations.ManagementClients.TryUpdate(SeasonID, new LauncherClientInformations { SeasonID = aClient.SeasonID, UserName = UserName, Password = Password, TheFirstQueueName = aClient.TheFirstQueueName }, aClient)) { Result = new ResponseStruct() { Status = ResponseStatusType.Done, Error = new List<string>() { "Không có lỗi xảy ra." }, Broadcast = new List<string>() { "Đăng nhập thành công.", "Bạn có quyền sử dụng Launcher Management." } }; LauncherServer.OutputMessage(String.Format("[Management]: {0} has logged in.", UserName), LauncherServer.MessageType.Success); } else { Result = new ResponseStruct() { Status = ResponseStatusType.Fail, Error = new List<string>() { "Không thể thêm bản ghi của bạn vào danh sách Client." }, Broadcast = new List<string>() { "Khởi động lại Launcher Management và tiến hành đăng nhập." } }; } } } else { Result = new ResponseStruct() { Status = ResponseStatusType.Fail, Error = new List<string>() { "Mật mã không chính xác." }, Broadcast = new List<string>() { "Nhập lại mật mã nếu có sai sót. Liên hệ Admin nếu quên mật mã." } }; } } return Result; }
public ResponseStruct Login(string SeasonID, string UserName, string Password) { ResponseStruct Result; #region Lấy danh sách bản ghi có User Name theo yêu cầu trong tshock\users. MySqlConnection DBConnection = new MySqlConnection(OverallInformations.TShockDBConnectionString); DBConnection.Open(); string SQLQuery = "SELECT Username,Password FROM users WHERE Username=@UserName"; MySqlCommand DBCommand = new MySqlCommand(SQLQuery, DBConnection); DBCommand.Prepare(); DBCommand.Parameters.Add("@UserName", MySqlDbType.VarChar).Value = UserName; MySqlDataReader DBReader = DBCommand.ExecuteReader(); List<TShockUserInformations> TShockUserList = new List<TShockUserInformations>(); while (DBReader.Read()) { TShockUserInformations TShockUserInstance = new TShockUserInformations(); if (!DBReader.IsDBNull(DBReader.GetOrdinal("Username"))) { TShockUserInstance.UserName = DBReader.GetString("Username"); } if (!DBReader.IsDBNull(DBReader.GetOrdinal("Password"))) { TShockUserInstance.Password = DBReader.GetString("Password"); } TShockUserList.Add(TShockUserInstance); } DBReader.Dispose(); DBCommand.Dispose(); DBConnection.Dispose(); #endregion #region Kiểm tra điều kiện. LauncherClientInformations aClient; if (!OverallInformations.Clients.TryGetValue(SeasonID, out aClient)) { Result = new ResponseStruct() { Status = ResponseStatusType.Fail, Error = new List<string>() { "Không tìm thấy Season ID." }, Broadcast = new List<string>() { "Khởi động lại Launcher Client." } }; } else if (UserName == "") { Result = new ResponseStruct() { Status = ResponseStatusType.Fail, Error = new List<string>() { "'User Name' trống rỗng." }, Broadcast = new List<string>() { "'User Name' không được phép để trống, nhập đầy đủ thông tin để tiếp tục." } }; } else if (UserName.Length > 32) { Result = new ResponseStruct() { Status = ResponseStatusType.Fail, Error = new List<string>() { "Tên tài khoản quá dài." }, Broadcast = new List<string>() { "Nhập tên tài khoản với độ dài không quá 32 kí tự." } }; } else if (TShockUserList.Count == 0) { Result = new ResponseStruct() { Status = ResponseStatusType.Fail, Error = new List<string>() { "Tài khoản không tồn tại." }, Broadcast = new List<string>() { "Tạo tài khoản để có thể bắt đầu chơi." } }; } else if (TShockUserList.Count > 1) { Result = new ResponseStruct() { Status = ResponseStatusType.Fail, Error = new List<string>() { "Tài khoản bị trùng." }, Broadcast = new List<string>() { "Liên hệ Admin để xử lí." } }; } else if (Password == "") { Result = new ResponseStruct() { Status = ResponseStatusType.Fail, Error = new List<string>() { "Mật khẩu trống rỗng." }, Broadcast = new List<string>() { "Nhập mật mã đầy đủ." } }; } else if (IsAnUserLoggedOnLauncherServer(UserName)) { Result = new ResponseStruct() { Status = ResponseStatusType.Fail, Error = new List<string>() { "Phát hiện tài khoản đang có mặt trên hệ thống." }, Broadcast = new List<string>() { "Không dùng đăng nhập trên hai nơi khác nhau." } }; } else { if (BCrypt.Net.BCrypt.Verify(Password, TShockUserList[0].Password)) { if (OverallInformations.Clients.TryUpdate(SeasonID, new LauncherClientInformations { SeasonID = aClient.SeasonID, UserName = UserName, Password = Password, TheFirstQueueName = aClient.TheFirstQueueName }, aClient)) { Result = new ResponseStruct() { Status = ResponseStatusType.Done, Broadcast = new List<string>() { "Đăng nhập thành công.", "Chào mừng bạn trở lại với Terraria Việt Nam." } }; LauncherServer.OutputMessage(String.Format("[Client]: {0} has logged in.", UserName), LauncherServer.MessageType.Success); } else { Result = new ResponseStruct() { Status = ResponseStatusType.Fail, Error = new List<string>() { "Thông tin đăng nhập vừa bị thay đổi." }, Broadcast = new List<string>() { "Thử đăng nhập lại một lần nữa." } }; } } else { Result = new ResponseStruct() { Status = ResponseStatusType.Fail, Error = new List<string>() { "Mật mã không chính xác." }, Broadcast = new List<string>() { "Nhập lại mật mã nếu có sai sót.", "Liên hệ Admin nếu quên mật mã." } }; } #endregion } return Result; }