From a49409f619ba884568a021ea2e0ec94bcc2491f3 Mon Sep 17 00:00:00 2001 From: Marcus Eggenberger Date: Tue, 21 Oct 2008 16:52:09 +0200 Subject: [PATCH] properly identifying the internal/admin user --- src/core/SQL/SQLite/11/select_internaluser.sql | 2 ++ src/core/core.cpp | 5 ++++- src/core/sql.qrc | 1 + src/core/sqlitestorage.cpp | 12 ++++++++++++ src/core/sqlitestorage.h | 1 + src/core/storage.h | 5 +++++ 6 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 src/core/SQL/SQLite/11/select_internaluser.sql diff --git a/src/core/SQL/SQLite/11/select_internaluser.sql b/src/core/SQL/SQLite/11/select_internaluser.sql new file mode 100644 index 00000000..8486d187 --- /dev/null +++ b/src/core/SQL/SQLite/11/select_internaluser.sql @@ -0,0 +1,2 @@ +SELECT min(userid) +FROM quasseluser diff --git a/src/core/core.cpp b/src/core/core.cpp index bf611aa9..6506061f 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp @@ -625,7 +625,10 @@ void Core::setupInternalClientSession(SignalProxy *proxy) { setupCoreForInternalUsage(); } - UserId uid = 3; // FIXME!!!11 + mutex.lock(); + UserId uid = storage->internalUser(); + mutex.unlock(); + // Find or create session for validated user SessionThread *sess; if(sessions.contains(uid)) diff --git a/src/core/sql.qrc b/src/core/sql.qrc index da98f983..16fdaa68 100644 --- a/src/core/sql.qrc +++ b/src/core/sql.qrc @@ -34,6 +34,7 @@ ./SQL/SQLite/11/select_buffers.sql ./SQL/SQLite/11/select_buffers_for_network.sql ./SQL/SQLite/11/select_connected_networks.sql + ./SQL/SQLite/11/select_internaluser.sql ./SQL/SQLite/11/select_messageRange.sql ./SQL/SQLite/11/select_messages.sql ./SQL/SQLite/11/select_messagesOffset.sql diff --git a/src/core/sqlitestorage.cpp b/src/core/sqlitestorage.cpp index 7f4dd78f..7c46333d 100644 --- a/src/core/sqlitestorage.cpp +++ b/src/core/sqlitestorage.cpp @@ -113,6 +113,18 @@ UserId SqliteStorage::validateUser(const QString &user, const QString &password) } } +UserId SqliteStorage::internalUser() { + QSqlQuery query(logDb()); + query.prepare(queryString("select_internaluser")); + query.exec(); + + if(query.first()) { + return query.value(0).toInt(); + } else { + return 0; + } +} + void SqliteStorage::delUser(UserId user) { QSqlQuery query(logDb()); query.prepare(queryString("delete_backlog_by_uid")); diff --git a/src/core/sqlitestorage.h b/src/core/sqlitestorage.h index ed04bf3e..4b49d417 100644 --- a/src/core/sqlitestorage.h +++ b/src/core/sqlitestorage.h @@ -49,6 +49,7 @@ public slots: virtual void updateUser(UserId user, const QString &password); virtual void renameUser(UserId user, const QString &newName); virtual UserId validateUser(const QString &user, const QString &password); + virtual UserId internalUser(); virtual void delUser(UserId user); virtual void setUserSetting(UserId userId, const QString &settingName, const QVariant &data); virtual QVariant getUserSetting(UserId userId, const QString &settingName, const QVariant &defaultData = QVariant()); diff --git a/src/core/storage.h b/src/core/storage.h index 2016ed39..9bf9a0ad 100644 --- a/src/core/storage.h +++ b/src/core/storage.h @@ -102,6 +102,11 @@ class Storage : public QObject { */ virtual UserId validateUser(const QString &user, const QString &password) = 0; + //! Determine the UserId of the internal user + /** \return A valid UserId if the password matches the username; 0 else + */ + virtual UserId internalUser() = 0; + //! Remove a core user from storage. /** \param user The userid to delete */ -- 2.20.1