using System; using System.Data; using System.Threading; using System.Data.SqlClient; namespace Launcher_Server { class Database { private SqlConnection Connection; public Database() { try { Program.Writer.WriteLine(WriteType.Information, false, "Initializing Database Connection To -> {0}", Properties.Settings.Default.Database_Source); Connection = new SqlConnection(String.Format("Data Source={0};MultipleActiveResultSets=True;Integrated Security=SSPI", Properties.Settings.Default.Database_Source)); OpenConnection(); Program.Writer.WriteLine(WriteType.Information, true, "Initialized Database Connection!"); } catch (Exception Error) { Program.Writer.WriteLine(WriteType.Error, false, "Initialization Of Database Failed!"); Program.Writer.WriteLine(WriteType.Error, false, Error.Message); Thread.Sleep(5000); Environment.Exit(-1); } } public Boolean UsernameExist(String Username) { try { OpenConnection(); SqlCommand Command = new SqlCommand(); Command.Connection = Connection; Command.CommandText = String.Format("SELECT * FROM {0}..tAccounts WHERE sUsername = '{1}'", Properties.Settings.Default.Database_Launcher, Username); SqlDataReader Reader = Command.ExecuteReader(); Reader.Read(); if (Reader.HasRows) { return true; } else { return false; } } catch (Exception Error) { Program.Writer.WriteLine(WriteType.Error, false, "Query Failed While Looking For Account -> {0}", Username); Program.Writer.WriteLine(WriteType.Error, false, Error.Message); return false; } } public Boolean CheckPassword(String Username, String Password) { try { OpenConnection(); SqlCommand Command = new SqlCommand(); Command.Connection = Connection; Command.CommandText = String.Format("SELECT * FROM {0}..tAccounts WHERE sUsername = '{1}' AND sUserPass = '{2}'", Properties.Settings.Default.Database_Launcher, Password); SqlDataReader Reader = Command.ExecuteReader(); Reader.Read(); if (Reader.HasRows) { return true; } else { return false; } } catch (Exception Error) { Program.Writer.WriteLine(WriteType.Error, false, "Query Failed While Looking For Account -> {0}", Username); Program.Writer.WriteLine(WriteType.Error, true, Error.Message); return false; } } public void AddLoginLog(String Username, ClientInformation Information, String Message, Boolean Successful) { try { OpenConnection(); SqlCommand Command = new SqlCommand(); Command.Connection = Connection; Command.CommandText = String.Format("INSERT INTO {0}..tLoginLog(sUsername, sIP, sMac, sUniqueID, sMessage, sSuccessful) VALUES('{1}', '{2}', '{3}', '{4}', '{5}')", Properties.Settings.Default.Database_Launcher, Information.IPAddress, Information.MacAddress, Information.UniqueID, Message, Successful); Command.ExecuteNonQuery(); } catch (Exception Error) { Program.Writer.WriteLine(WriteType.Error, false, "Log Add Failed For -> Username:{0}, IP:{1}, Mac:{2}, UniqueID:{3}", Username, Information.IPAddress, Information.MacAddress, Information.UniqueID); Program.Writer.WriteLine(WriteType.Error, true, Error.Message); } } public Boolean IsBanned(String Username, ClientInformation Information) { try { OpenConnection(); SqlCommand Command = new SqlCommand(); Command.Connection = Connection; Command.CommandText = String.Format("SELECT * FROM {0}..tBanned WHERE sUsername = '{1}'", Properties.Settings.Default.Database_Launcher, Username); SqlDataReader Reader = Command.ExecuteReader(); Reader.Read(); if (!Reader.HasRows) { Reader.Close(); Command.CommandText = String.Format("SELECT * FROM {0}..tBanned WHERE sIP = '{1}'", Properties.Settings.Default.Database_Launcher, Information.IPAddress); Reader = Command.ExecuteReader(); Reader.Read(); if (!Reader.HasRows) { Reader.Close(); Command.CommandText = String.Format("SELECT * FROM {0}..tBanned WHERE sMac = '{1}'", Properties.Settings.Default.Database_Launcher, Information.MacAddress); Reader = Command.ExecuteReader(); Reader.Read(); if (!Reader.HasRows) { Reader.Close(); Command.CommandText = String.Format("SELECT * FROM {0}..tBanned WHERE sUniqueID = '{1}'", Properties.Settings.Default.Database_Launcher, Information.UniqueID); Reader = Command.ExecuteReader(); Reader.Read(); if (!Reader.HasRows) { return false; } else { return true; } } else { return true; } } else { return true; } } else { return true; } } catch (Exception Error) { Program.Writer.WriteLine(WriteType.Error, false, "Ban Check Failed For -> Username:{0}, IP:{1}, Mac:{2}, UniqueID:{3}", Username, Information.IPAddress, Information.MacAddress, Information.UniqueID); Program.Writer.WriteLine(WriteType.Error, true, Error.Message); return true; } } public Boolean Maintenance(String Username) { try { OpenConnection(); SqlCommand Command = new SqlCommand(); Command.Connection = Connection; Command.CommandText = String.Format("SELECT nLoginable FROM {0}..tAuth WHERE nAuth = (SELECT nAuthID FROM {0}..tAccounts WHERE sUsername = '{1}')", Properties.Settings.Default.Database_Account, Username); Int32 LoginableNumber = Convert.ToInt32(Command.ExecuteScalar()); if (LoginableNumber == 1) { return true; } else { return false; } } catch (Exception Error) { Program.Writer.WriteLine(WriteType.Error, false, "Maintenance Check Failed For -> {0}", Username); Program.Writer.WriteLine(WriteType.Error, true, Error.Message); return true; } } public Boolean InsertToken(String Username, String Token) { try { OpenConnection(); SqlCommand Command = new SqlCommand(); Command.Connection = Connection; Command.CommandText = String.Format("INSERT INTO {0}..tTokens(nEMID, sToken) VALUES((SELECT nEMID FROM {0}..tAccounts WHERE sUsername = '{1}'), '{2}')", Properties.Settings.Default.Database_Account, Username, Token); Command.ExecuteNonQuery(); return true; } catch (Exception Error) { Program.Writer.WriteLine(WriteType.Error, false, "Token Insert Failed For -> {0}", Username); Program.Writer.WriteLine(WriteType.Error, true, Error.Message); return false; } } public String CheckToken(String Token) { try { OpenConnection(); SqlCommand Command = new SqlCommand(); Command.Connection = Connection; Command.CommandText = String.Format("SELECT * FROM {0}..tTokens WHERE sToken = '{1}'", Properties.Settings.Default.Database_Account, Token); SqlDataReader Reader = Command.ExecuteReader(); Reader.Read(); if (Reader.HasRows) { Token = CheckToken(Program.CreateRandom(50)); } return Token; } catch (Exception Error) { Program.Writer.WriteLine(WriteType.Error, false, "Token Check Failed!"); Program.Writer.WriteLine(WriteType.Error, true, Error.Message); return "Error!"; } } private void OpenConnection() { if (Connection.State != ConnectionState.Open) { Connection.Open(); } } } }