X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fsqlitestorage.cpp;h=c14d7cb7d78135b9c17dc3f2d20657d8132e5231;hp=311b47f772f1fc88d684c21f884551b36f7b9006;hb=cfbd4daee17dbb3c4052d938bf33edd08711d728;hpb=84cd3561e97167ffb98ecab0fd2b884ba1d13ada diff --git a/src/core/sqlitestorage.cpp b/src/core/sqlitestorage.cpp index 311b47f7..c14d7cb7 100644 --- a/src/core/sqlitestorage.cpp +++ b/src/core/sqlitestorage.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2014 by the Quassel Project * + * Copyright (C) 2005-2016 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -46,12 +46,19 @@ bool SqliteStorage::isAvailable() const } +QString SqliteStorage::backendId() const +{ + return QString("SQLite"); +} + + QString SqliteStorage::displayName() const { + // Note: Pre-0.13 clients use the displayName property for backend idenfication // We identify the backend to use for the monolithic core by its displayname. // so only change this string if you _really_ have to and make sure the core // setup for the mono client still works ;) - return QString("SQLite"); + return backendId(); } @@ -116,7 +123,7 @@ bool SqliteStorage::setupSchemaVersion(int version) } -UserId SqliteStorage::addUser(const QString &user, const QString &password) +UserId SqliteStorage::addUser(const QString &user, const QString &password, const QString &authenticator) { QSqlDatabase db = logDb(); UserId uid; @@ -129,7 +136,9 @@ UserId SqliteStorage::addUser(const QString &user, const QString &password) QSqlQuery query(db); query.prepare(queryString("insert_quasseluser")); query.bindValue(":username", user); - query.bindValue(":password", cryptedPassword(password)); + query.bindValue(":password", hashPassword(password)); + query.bindValue(":hashversion", Storage::HashVersion::Latest); + query.bindValue(":authenticator", authenticator); lockForWrite(); safeExec(query); if (query.lastError().isValid() && query.lastError().number() == 19) { // user already exists - sadly 19 seems to be the general constraint violation error... @@ -158,7 +167,8 @@ bool SqliteStorage::updateUser(UserId user, const QString &password) QSqlQuery query(db); query.prepare(queryString("update_userpassword")); query.bindValue(":userid", user.toInt()); - query.bindValue(":password", cryptedPassword(password)); + query.bindValue(":password", hashPassword(password)); + query.bindValue(":hashversion", Storage::HashVersion::Latest); lockForWrite(); safeExec(query); success = query.numRowsAffected() != 0; @@ -190,23 +200,30 @@ void SqliteStorage::renameUser(UserId user, const QString &newName) UserId SqliteStorage::validateUser(const QString &user, const QString &password) { UserId userId; + QString hashedPassword; + Storage::HashVersion hashVersion = Storage::HashVersion::Latest; { QSqlQuery query(logDb()); query.prepare(queryString("select_authuser")); query.bindValue(":username", user); - query.bindValue(":password", cryptedPassword(password)); lockForRead(); safeExec(query); if (query.first()) { userId = query.value(0).toInt(); + hashedPassword = query.value(1).toString(); + hashVersion = static_cast(query.value(2).toInt()); } } unlock(); - return userId; + UserId returnUserId; + if (userId != 0 && checkHashedPassword(userId, password, hashedPassword, hashVersion)) { + returnUserId = userId; + } + return returnUserId; } @@ -231,6 +248,26 @@ UserId SqliteStorage::getUserId(const QString &username) return userId; } +QString SqliteStorage::getUserAuthenticator(const UserId userid) +{ + QString authenticator = QString(""); + + { + QSqlQuery query(logDb()); + query.prepare(queryString("select_authenticator")); + query.bindValue(":userid", userid.toInt()); + + lockForRead(); + safeExec(query); + + if (query.first()) { + authenticator = query.value(0).toString(); + } + } + unlock(); + + return authenticator; +} UserId SqliteStorage::internalUser() { @@ -649,6 +686,11 @@ void SqliteStorage::bindNetworkInfo(QSqlQuery &query, const NetworkInfo &info) query.bindValue(":autoreconnectretries", info.autoReconnectRetries); query.bindValue(":unlimitedconnectretries", info.unlimitedReconnectRetries ? 1 : 0); query.bindValue(":rejoinchannels", info.rejoinChannels ? 1 : 0); + // Custom rate limiting + query.bindValue(":usecustomessagerate", info.useCustomMessageRate ? 1 : 0); + query.bindValue(":messagerateburstsize", info.messageRateBurstSize); + query.bindValue(":messageratedelay", info.messageRateDelay); + query.bindValue(":unlimitedmessagerate", info.unlimitedMessageRate ? 1 : 0); if (info.networkId.isValid()) query.bindValue(":networkid", info.networkId.toInt()); } @@ -667,6 +709,7 @@ void SqliteStorage::bindServerInfo(QSqlQuery &query, const Network::Server &serv query.bindValue(":proxyport", server.proxyPort); query.bindValue(":proxyuser", server.proxyUser); query.bindValue(":proxypass", server.proxyPass); + query.bindValue(":sslverify", server.sslVerify ? 1 : 0); } @@ -844,6 +887,11 @@ QList SqliteStorage::networks(UserId user) net.useSasl = networksQuery.value(16).toInt() == 1 ? true : false; net.saslAccount = networksQuery.value(17).toString(); net.saslPassword = networksQuery.value(18).toString(); + // Custom rate limiting + net.useCustomMessageRate = networksQuery.value(19).toInt() == 1 ? true : false; + net.messageRateBurstSize = networksQuery.value(20).toUInt(); + net.messageRateDelay = networksQuery.value(21).toUInt(); + net.unlimitedMessageRate = networksQuery.value(22).toInt() == 1 ? true : false; serversQuery.bindValue(":networkid", net.networkId.toInt()); safeExec(serversQuery); @@ -866,6 +914,7 @@ QList SqliteStorage::networks(UserId user) server.proxyPort = serversQuery.value(8).toUInt(); server.proxyUser = serversQuery.value(9).toString(); server.proxyPass = serversQuery.value(10).toString(); + server.sslVerify = serversQuery.value(11).toInt() == 1 ? true : false; servers << server; } net.serverList = servers; @@ -959,7 +1008,7 @@ void SqliteStorage::setChannelPersistent(UserId user, const NetworkId &networkId QSqlQuery query(db); query.prepare(queryString("update_buffer_persistent_channel")); query.bindValue(":userid", user.toInt()); - query.bindValue(":networkId", networkId.toInt()); + query.bindValue(":networkid", networkId.toInt()); query.bindValue(":buffercname", channel.toLower()); query.bindValue(":joined", isJoined ? 1 : 0); @@ -981,7 +1030,7 @@ void SqliteStorage::setPersistentChannelKey(UserId user, const NetworkId &networ QSqlQuery query(db); query.prepare(queryString("update_buffer_set_channel_key")); query.bindValue(":userid", user.toInt()); - query.bindValue(":networkId", networkId.toInt()); + query.bindValue(":networkid", networkId.toInt()); query.bindValue(":buffercname", channel.toLower()); query.bindValue(":key", key); @@ -1454,7 +1503,6 @@ QHash SqliteStorage::bufferMarkerLineMsgIds(UserId user) return markerLineHash; } - bool SqliteStorage::logMessage(Message &msg) { QSqlDatabase db = logDb(); @@ -1615,7 +1663,7 @@ QList SqliteStorage::requestMsgs(UserId user, BufferId bufferId, MsgId query.bindValue(":firstmsg", first.toInt()); } else { - query.prepare(queryString("select_messages")); + query.prepare(queryString("select_messagesRange")); query.bindValue(":lastmsg", last.toInt()); query.bindValue(":firstmsg", first.toInt()); } @@ -1799,6 +1847,8 @@ bool SqliteMigrationReader::readMo(QuasselUserMO &user) user.id = value(0).toInt(); user.username = value(1).toString(); user.password = value(2).toString(); + user.hashversion = value(3).toInt(); + user.authenticator = value(4).toString(); return true; } @@ -1875,6 +1925,11 @@ bool SqliteMigrationReader::readMo(NetworkMO &network) network.usesasl = value(22).toInt() == 1 ? true : false; network.saslaccount = value(23).toString(); network.saslpassword = value(24).toString(); + // Custom rate limiting + network.usecustommessagerate = value(25).toInt() == 1 ? true : false; + network.messagerateburstsize = value(26).toInt(); + network.messageratedelay = value(27).toUInt(); + network.unlimitedmessagerate = value(28).toInt() == 1 ? true : false; return true; } @@ -1891,10 +1946,11 @@ bool SqliteMigrationReader::readMo(BufferMO &buffer) buffer.buffername = value(4).toString(); buffer.buffercname = value(5).toString(); buffer.buffertype = value(6).toInt(); - buffer.lastseenmsgid = value(7).toInt(); - buffer.markerlinemsgid = value(8).toInt(); - buffer.key = value(9).toString(); - buffer.joined = value(10).toInt() == 1 ? true : false; + buffer.lastmsgid = value(7).toInt(); + buffer.lastseenmsgid = value(8).toInt(); + buffer.markerlinemsgid = value(9).toInt(); + buffer.key = value(10).toString(); + buffer.joined = value(11).toInt() == 1 ? true : false; return true; } @@ -1967,6 +2023,7 @@ bool SqliteMigrationReader::readMo(IrcServerMO &ircserver) ircserver.proxyport = value(11).toInt(); ircserver.proxyuser = value(12).toString(); ircserver.proxypass = value(13).toString(); + ircserver.sslverify = value(14).toInt() == 1 ? true : false; return true; }