Example #1
0
        /// <summary>
        ///     Loads a user account that has the given username from the database.
        /// </summary>
        /// <param name="database">Database to load username from.</param>
        /// <param name="username">Username of account to load.</param>
        /// <returns>Account loaded, or null if one dosen't exist.</returns>
        public static UserAccount LoadByUsername(DBConnection database, string username)
        {
            DBResults results = database.Query(@"SELECT id, username, password, email, last_login_timestamp, persistent_state FROM {0} WHERE LOWER(`username`)='{1}'",
                                                Settings.DB_TABLE_ACCOUNTS,
                                                StringHelper.Escape(username.ToLower()));

            if (results.RowsAffected > 0)
            {
                DBRow row = results[0];

                UserAccount account = new UserAccount();
                account.m_id                    = (int)row["id"];
                account.m_username              = row["username"].ToString();
                account.m_password              = row["password"].ToString();
                account.m_email                 = row["email"].ToString();
                account.m_last_login_timestamp  = row["last_login_timestamp"] == null ? 0 : (int)row["last_login_timestamp"];
                account.m_persistent_state      = new UserAccountPersistentState((byte[])row["persistent_state"]);

                return account;
            }
            else
            {
                return null;
            }
        }
Example #2
0
        /// <summary>
        ///     Serializes this user account into the database.
        /// </summary>
        /// <param name="database">Database to serialize into.</param>
        public void Serialize(DBConnection database)
        {
            DBResults results = null;

            results = database.Query(@"SELECT id FROM {0} WHERE username='******'",
                                                  Settings.DB_TABLE_ACCOUNTS,
                                                  StringHelper.Escape(m_username));

            byte[] persistentState = m_persistent_state.Serialize();

            // Already exists?
            if (results.RowsAffected > 0)
            {
                results = database.QueryParameterized(@"UPDATE {0} SET
                                                            username='******',
                                                            password='******',
                                                            email='{3}',
                                                            last_login_timestamp=UNIX_TIMESTAMP(),
                                                            persistent_state=@parameter_1
                                                       WHERE
                                                            username='******'",
                                        new object[] { persistentState },
                                        Settings.DB_TABLE_ACCOUNTS,
                                        StringHelper.Escape(m_username.ToLower()),
                                        StringHelper.Escape(m_password.ToLower()),
                                        StringHelper.Escape(m_email.ToLower()),
                                        StringHelper.Escape(m_username.ToLower()));
            }

            // New account?
            else
            {
                results = database.QueryParameterized(@"INSERT INTO {0}
                                                            (username, password, email, last_login_timestamp, persistent_state)
                                                        VALUES
                                                            ('{1}', '{2}', '{3}', UNIX_TIMESTAMP(), @parameter_1)",
                                            new object [] { persistentState },
                                            Settings.DB_TABLE_ACCOUNTS,
                                            StringHelper.Escape(m_username.ToLower()),
                                            StringHelper.Escape(m_password.ToLower()),
                                            StringHelper.Escape(m_email.ToLower()));
            }
        }
Example #3
0
        /// <summary>
        ///     Create a user account with the given information.
        /// </summary>
        /// <param name="settings">Settings used to initialize this account.</param>
        /// <param name="database">Database to load username from.</param>
        /// <param name="username">Username of account to load.</param>
        /// <returns>Account loaded, or null if one dosen't exist.</returns>
        public static UserAccount CreateAccount(Settings settings, DBConnection database, string username, string password, string email)
        {
            DBResults results = database.Query(@"SELECT id FROM {0} WHERE LOWER(`username`)='{1}'",
                                                Settings.DB_TABLE_ACCOUNTS,
                                                StringHelper.Escape(username.ToLower()));

            if (results.RowsAffected <= 0)
            {
                UserAccount account = new UserAccount();
                account.m_id                    = (int)results.LastInsertID;
                account.m_username              = username;
                account.m_password              = password;
                account.m_email                 = email;
                account.m_last_login_timestamp  = 0;
                account.m_persistent_state      = new UserAccountPersistentState();

                account.LoadDefaults(settings);

                account.Serialize(database);

                return account;
            }
            else
            {
                return null;
            }
        }