diff --git a/include/transport/pqxxbackend.h b/include/transport/pqxxbackend.h index 21d54339..e13c6b03 100644 --- a/include/transport/pqxxbackend.h +++ b/include/transport/pqxxbackend.h @@ -97,6 +97,7 @@ class PQXXBackend : public StorageBackend private: bool exec(const std::string &query, bool show_error = true); + bool exec(pqxx::work &txn, const std::string &query, bool show_error = true); Config *m_config; std::string m_prefix; diff --git a/src/pqxxbackend.cpp b/src/pqxxbackend.cpp index bc28772b..05ba1a5c 100644 --- a/src/pqxxbackend.cpp +++ b/src/pqxxbackend.cpp @@ -126,6 +126,10 @@ bool PQXXBackend::createDatabase() { bool PQXXBackend::exec(const std::string &query, bool show_error) { pqxx::work txn(*m_conn); + return exec(txn, query, show_error); +} + +bool PQXXBackend::exec(pqxx::work &txn, const std::string &query, bool show_error) { try { txn.exec(query); txn.commit(); @@ -139,12 +143,20 @@ bool PQXXBackend::exec(const std::string &query, bool show_error) { } void PQXXBackend::setUser(const UserInfo &user) { -// std::string encrypted = user.password; -// if (!CONFIG_STRING(m_config, "database.encryption_key").empty()) { -// encrypted = Util::encryptPassword(encrypted, CONFIG_STRING(m_config, "database.encryption_key")); -// } -// *m_setUser << user.jid << user.uin << encrypted << user.language << user.encoding << user.vip << user.uin << encrypted; -// EXEC(m_setUser, setUser(user)); + std::string encrypted = user.password; + if (!CONFIG_STRING(m_config, "database.encryption_key").empty()) { + encrypted = Util::encryptPassword(encrypted, CONFIG_STRING(m_config, "database.encryption_key")); + } + pqxx::work txn(*m_conn); + exec(txn, "UPDATE " + m_prefix + "users SET uin=" + txn.quote(user.uin) + ", password=" + txn.quote(encrypted) + ";" + "INSERT INTO " + m_prefix + "users (jid, uin, password, language, encoding, last_login, vip) VALUES " + "(" + txn.quote(user.jid) + "," + + txn.quote(user.uin) + "," + + txn.quote(encrypted) + "," + + txn.quote(user.language) + "," + + txn.quote(user.encoding) + "," + + "NOW()," + + txn.quote(user.vip) +")"); } bool PQXXBackend::getUser(const std::string &barejid, UserInfo &user) {