public static void UpdateUOEmails( ) { //Console.WriteLine( "Getting New Emails..." ); try { ArrayList ToUpdateEmailFromDB = new ArrayList( ); OdbcConnection Connection = new OdbcConnection(ConnectionString); Connection.Open( ); OdbcCommand Command = Connection.CreateCommand( ); Command.CommandText = string.Format("SELECT name,email FROM {0} WHERE state='{1}'", DatabaseTable, ( int )Status.EmailChanged); OdbcDataReader reader = Command.ExecuteReader( ); QueryCount += 1; while (reader.Read( )) { string username = reader.GetString(0); string email = reader.GetString(1); Account AtoUpdate = Accounts.GetAccount(username) as Account; if (AtoUpdate != null && (AtoUpdate.Email == null || AtoUpdate.Email == "" || AtoUpdate.Email != email)) { AtoUpdate.Email = email; ToUpdateEmailFromDB.Add(AtoUpdate); } } reader.Close( ); //Console.WriteLine( "Updating Database..." ); foreach (Account a in ToUpdateEmailFromDB) { QueryCount += 1; Command.CommandText = string.Format("UPDATE {0} SET state='{1}',email='{2}' WHERE name='{3}'", DatabaseTable, ( int )Status.Active, a.Email, a.Username); Command.ExecuteNonQuery( ); } Connection.Close( ); Console.WriteLine("[{0} In-Game Emails Changed] ", ToUpdateEmailFromDB.Count); } catch (System.Exception e) { Console.WriteLine("[In-Game Email Change] Error..."); Console.WriteLine(e); } }
private static void Sync(IDataReader reader) { int numCreated = 0, numUpdated = 0; while (reader.Read()) { string username = reader.GetString(0); string password = reader.GetString(1); int flags = reader.GetInt32(2); int accessLevel = reader.GetInt32(3); DateTime created = ParseDateTime(username, reader.GetString(4)); DateTime lastLogin = ParseDateTime(username, reader.GetString(5)); DateTime donationStart = ParseDateTime(username, reader.GetString(6)); TimeSpan donationDuration = ParseTimeSpan(username, reader.GetString(7)); long latestUpdate = reader.GetInt64(8); /* skip invalid accounts */ if (username == null || username == "" || password == null || password == "") { continue; } /* we should better pause during a world save */ if (World.Saving) { //log.Info("cancelling account sync because of world save"); break; } /* get or create an account */ Account account = Accounts.GetAccount(username) as Account; if (account == null) { //log.Info(String.Format("creating account '{0}'", username)); account = new Account(username, String.Empty); numCreated++; //Console.WriteLine(String.Format("Debug: Created account:{0}, latestupdate:{1}", username,latestUpdate)); } else { numUpdated++; //Console.WriteLine(String.Format("Debug: Updated account:{0}, latestupdate:{1}", username, latestUpdate)); } /* transform hashed password into RunUO format */ password = password.ToUpper(); for (int i = 2; i < 32 + 15; i += 3) { password = password.Insert(i, "-"); } /* update Account properties */ account.CryptPassword = password; account.Flags = flags; account.AccessLevel = (AccessLevel)accessLevel; account.Created = created; account.LastLogin = lastLogin; /* update donation status */ //if (donationStart != DateTime.MinValue && donationDuration != TimeSpan.Zero) // Server.Misc.DonationSystem.SetSubscriptionStatus(account, donationStart, donationDuration); if (latestUpdate > m_LatestUpdate) { m_LatestUpdate = latestUpdate; } } //Console.WriteLine(String.Format("Debug: m_LatestUpdate={0}", m_LatestUpdate)); //log.Info(String.Format("account sync finished, {0} new accounts, {1} updated accounts",numCreated, numUpdated)); Console.WriteLine(String.Format("account sync finished, {0} new accounts, {1} updated accounts", numCreated, numUpdated)); }
public static void CreateAccountsFromUO( ) { //Console.WriteLine( "Exporting New Accounts..." ); try { ArrayList ToCreateFromUO = new ArrayList( ); OdbcConnection Connection = new OdbcConnection(ConnectionString); Connection.Open( ); OdbcCommand Command = Connection.CreateCommand( ); Command.CommandText = string.Format("SELECT name FROM {0}", DatabaseTable); OdbcDataReader reader = Command.ExecuteReader( ); QueryCount += 1; while (reader.Read( )) { string username = reader.GetString(0); Account toCheck = Accounts.GetAccount(username) as Account; if (toCheck == null) { ToCreateFromUO.Add(toCheck); } } reader.Close( ); //Console.WriteLine( "Updating Database..." ); foreach (Account a in ToCreateFromUO) { int ALevel = 0; if (a.AccessLevel == AccessLevel.Player) { ALevel = 1; } else if (a.AccessLevel == AccessLevel.Counselor) { ALevel = 2; } else if (a.AccessLevel == AccessLevel.GameMaster) { ALevel = 3; } else if (a.AccessLevel == AccessLevel.Seer) { ALevel = 4; } else if (a.AccessLevel == AccessLevel.Administrator) { ALevel = 6; } PasswordProtection PWMode = AccountHandler.ProtectPasswords; string Password = ""; switch (PWMode) { case PasswordProtection.None: { Password = a.PlainPassword; } break; case PasswordProtection.Crypt: { Password = a.CryptPassword; } break; default: { Password = a.NewCryptPassword; } break; } QueryCount += 1; OdbcCommand InsertCommand = Connection.CreateCommand( ); InsertCommand.CommandText = string.Format("INSERT INTO {0} (name,password,email,access,timestamp,state) VALUES( '{1}', '{2}', '{3}', '{4}', '{5}', '{6}')", DatabaseTable, a.Username, Password, a.Email, ALevel, ToUnixTimestamp(a.Created), ( int )Status.Active); InsertCommand.ExecuteNonQuery( ); } Connection.Close( ); Console.WriteLine("[{0} Database Accounts Added] ", ToCreateFromUO.Count); } catch (Exception e) { Console.WriteLine("[Database Account Create] Error..."); Console.WriteLine(e); } }
public static void UpdateDBPasswords( ) { //Console.WriteLine( "Exporting New Passwords..." ); try { ArrayList ToUpdatePWFromUO = new ArrayList( ); OdbcConnection Connection = new OdbcConnection(ConnectionString); Connection.Open( ); OdbcCommand Command = Connection.CreateCommand( ); Command.CommandText = string.Format("SELECT name,password FROM {0} WHERE state='{1}'", DatabaseTable, ( int )Status.Active); OdbcDataReader reader = Command.ExecuteReader( ); QueryCount += 1; while (reader.Read( )) { string username = reader.GetString(0); string password = reader.GetString(1); Account AtoUpdate = Accounts.GetAccount(username) as Account; if (AtoUpdate != null) { PasswordProtection PWMode = AccountHandler.ProtectPasswords; string Password = ""; switch (PWMode) { case PasswordProtection.None: { Password = AtoUpdate.PlainPassword; } break; case PasswordProtection.Crypt: { Password = AtoUpdate.CryptPassword; } break; default: { Password = AtoUpdate.NewCryptPassword; } break; } if (Password == null || Password == "" || Password != password) { ToUpdatePWFromUO.Add(AtoUpdate); } } } reader.Close( ); //Console.WriteLine( "Updating Database..." ); foreach (Account a in ToUpdatePWFromUO) { PasswordProtection PWModeU = AccountHandler.ProtectPasswords; string PasswordU = ""; switch (PWModeU) { case PasswordProtection.None: { PasswordU = a.PlainPassword; } break; case PasswordProtection.Crypt: { PasswordU = a.CryptPassword; } break; default: { PasswordU = a.NewCryptPassword; } break; } QueryCount += 1; Command.CommandText = string.Format("UPDATE {0} SET state='{1}',password='******' WHERE name='{3}'", DatabaseTable, ( int )Status.Active, PasswordU, a.Username); Command.ExecuteNonQuery( ); } Connection.Close( ); Console.WriteLine("[{0} Database Passwords Changed] ", ToUpdatePWFromUO.Count); } catch (Exception e) { Console.WriteLine("[Database Password Change] Error..."); Console.WriteLine(e); } }
public static void CreateAccountsFromDB( ) { //Console.WriteLine( "Getting New Accounts..." ); try { ArrayList ToCreateFromDB = new ArrayList( ); OdbcConnection Connection = new OdbcConnection(ConnectionString); Connection.Open( ); OdbcCommand Command = Connection.CreateCommand( ); Command.CommandText = string.Format("SELECT name,password,email FROM {0} WHERE state='{1}'", DatabaseTable, ( int )Status.Pending); OdbcDataReader reader = Command.ExecuteReader( ); QueryCount += 1; while (reader.Read( )) { string username = reader.GetString(0); string password = reader.GetString(1); string email = reader.GetString(2); if (Accounts.GetAccount(username) == null) { ToCreateFromDB.Add(Accounts.AddAccount(username, password, email)); } } reader.Close( ); //Console.WriteLine( "Updating Database..." ); foreach (Account a in ToCreateFromDB) { int ALevel = 0; if (a.AccessLevel == AccessLevel.Player) { ALevel = 1; } else if (a.AccessLevel == AccessLevel.Counselor) { ALevel = 2; } else if (a.AccessLevel == AccessLevel.GameMaster) { ALevel = 3; } else if (a.AccessLevel == AccessLevel.Seer) { ALevel = 4; } else if (a.AccessLevel == AccessLevel.Administrator) { ALevel = 6; } QueryCount += 1; Command.CommandText = string.Format("UPDATE {0} SET email='{1}',password='******',state='{3}',access='{4}' WHERE name='{5}'", DatabaseTable, a.Email, a.CryptPassword, ( int )Status.Active, ALevel, a.Username); Command.ExecuteNonQuery( ); } Connection.Close( ); Console.WriteLine("[{0} In-Game Accounts Created] ", ToCreateFromDB.Count); } catch (Exception e) { Console.WriteLine("[In-Game Account Create] Error..."); Console.WriteLine(e); } }