示例#1
0
        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);
            }
        }
示例#2
0
        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));
        }
示例#3
0
        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);
            }
        }
示例#4
0
        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);
            }
        }
示例#5
0
        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);
            }
        }