/// <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; } }
/// <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())); } }
/// <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; } }