X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fcoreuserinputhandler.cpp;h=a5c0ce7f7ec0e3fb836a9aa12b0227eb2ecc0a3b;hp=cac1ff2434efd1e2a0c966cff6cbb61471d54320;hb=0cfeb61fd9ed1c415bcd88796010843e87150e9c;hpb=3260afbf85dff47d1dc83293f8147889c90d4699 diff --git a/src/core/coreuserinputhandler.cpp b/src/core/coreuserinputhandler.cpp index cac1ff24..a5c0ce7f 100644 --- a/src/core/coreuserinputhandler.cpp +++ b/src/core/coreuserinputhandler.cpp @@ -186,8 +186,10 @@ void CoreUserInputHandler::handleDelkey(const BufferInfo &bufferInfo, const QStr if (!bufferInfo.isValid()) return; - if (!Cipher::neededFeaturesAvailable()) + if (!Cipher::neededFeaturesAvailable()) { + emit displayMsg(Message::Error, typeByTarget(bufname), bufname, tr("Error: QCA provider plugin not found. It is usually provided by the qca-ossl plugin.")); return; + } QStringList parms = msg.split(' ', QString::SkipEmptyParts); @@ -195,7 +197,7 @@ void CoreUserInputHandler::handleDelkey(const BufferInfo &bufferInfo, const QStr parms.prepend(bufferInfo.bufferName()); if (parms.isEmpty()) { - emit displayMsg(Message::Info, bufname, + emit displayMsg(Message::Info, typeByTarget(bufname), bufname, tr("[usage] /delkey deletes the encryption key for nick or channel or just /delkey when in a channel or query.")); return; } @@ -203,16 +205,16 @@ void CoreUserInputHandler::handleDelkey(const BufferInfo &bufferInfo, const QStr QString target = parms.at(0); if (network()->cipherKey(target).isEmpty()) { - emit displayMsg(Message::Info, bufname, tr("No key has been set for %1.").arg(target)); + emit displayMsg(Message::Info, typeByTarget(bufname), bufname, tr("No key has been set for %1.").arg(target)); return; } network()->setCipherKey(target, QByteArray()); - emit displayMsg(Message::Info, bufname, tr("The key for %1 has been deleted.").arg(target)); + emit displayMsg(Message::Info, typeByTarget(bufname), bufname, tr("The key for %1 has been deleted.").arg(target)); #else Q_UNUSED(msg) - emit displayMsg(Message::Error, bufname, tr("Error: Setting an encryption key requires Quassel to have been built " + emit displayMsg(Message::Error, typeByTarget(bufname), bufname, tr("Error: Setting an encryption key requires Quassel to have been built " "with support for the Qt Cryptographic Architecture (QCA2) library. " "Contact your distributor about a Quassel package with QCA2 " "support, or rebuild Quassel with QCA2 present.")); @@ -225,7 +227,7 @@ void CoreUserInputHandler::doMode(const BufferInfo &bufferInfo, const QChar& add bool isNumber; int maxModes = network()->support("MODES").toInt(&isNumber); if (!isNumber || maxModes == 0) maxModes = 1; - + QStringList nickList; if (nicks == "*") { // All users in channel const QList users = network()->ircChannel(bufferInfo.bufferName())->ircUsers(); @@ -234,12 +236,12 @@ void CoreUserInputHandler::doMode(const BufferInfo &bufferInfo, const QChar& add || (addOrRemove == '-' && network()->ircChannel(bufferInfo.bufferName())->userModes(user).contains(mode))) nickList.append(user->nick()); } - } else { + } else { nickList = nicks.split(' ', QString::SkipEmptyParts); } - + if (nickList.count() == 0) return; - + while (!nickList.isEmpty()) { int amount = qMin(nickList.count(), maxModes); QString m = addOrRemove; for(int i = 0; i < amount; i++) m += mode; @@ -355,37 +357,44 @@ void CoreUserInputHandler::handleKeyx(const BufferInfo &bufferInfo, const QStrin if (!bufferInfo.isValid()) return; - if (!Cipher::neededFeaturesAvailable()) + if (!Cipher::neededFeaturesAvailable()) { + emit displayMsg(Message::Error, typeByTarget(bufname), bufname, tr("Error: QCA provider plugin not found. It is usually provided by the qca-ossl plugin.")); return; + } QStringList parms = msg.split(' ', QString::SkipEmptyParts); if (parms.count() == 0 && !bufferInfo.bufferName().isEmpty()) parms.prepend(bufferInfo.bufferName()); else if (parms.count() != 1) { - emit displayMsg(Message::Info, bufname, - tr("[usage] /keyx [] Initiates a DH1080 key exchange with the target.")); + emit displayMsg(Message::Info, typeByTarget(bufname), bufname, + tr("[usage] /keyx [] Initiates a DH1080 key exchange with the target.")); return; } QString target = parms.at(0); + if (network()->isChannelName(target)) { + emit displayMsg(Message::Info, typeByTarget(bufname), bufname, tr("It is only possible to exchange keys in a query buffer.")); + return; + } + Cipher *cipher = network()->cipher(target); if (!cipher) // happens when there is no CoreIrcChannel for the target return; QByteArray pubKey = cipher->initKeyExchange(); if (pubKey.isEmpty()) - emit displayMsg(Message::Error, bufname, tr("Failed to initiate key exchange with %1.").arg(target)); + emit displayMsg(Message::Error, typeByTarget(bufname), bufname, tr("Failed to initiate key exchange with %1.").arg(target)); else { QList params; params << serverEncode(target) << serverEncode("DH1080_INIT ") + pubKey; emit putCmd("NOTICE", params); - emit displayMsg(Message::Info, bufname, tr("Initiated key exchange with %1.").arg(target)); + emit displayMsg(Message::Info, typeByTarget(bufname), bufname, tr("Initiated key exchange with %1.").arg(target)); } #else Q_UNUSED(msg) - emit displayMsg(Message::Error, bufname, tr("Error: Setting an encryption key requires Quassel to have been built " + emit displayMsg(Message::Error, typeByTarget(bufname), bufname, tr("Error: Setting an encryption key requires Quassel to have been built " "with support for the Qt Cryptographic Architecture (QCA) library. " "Contact your distributor about a Quassel package with QCA " "support, or rebuild Quassel with QCA present.")); @@ -489,7 +498,7 @@ void CoreUserInputHandler::handleNotice(const BufferInfo &bufferInfo, const QStr QList params; params << serverEncode(bufferName) << channelEncode(bufferInfo.bufferName(), payload); emit putCmd("NOTICE", params); - emit displayMsg(Message::Notice, bufferName, payload, network()->myNick(), Message::Self); + emit displayMsg(Message::Notice, typeByTarget(bufferName), bufferName, payload, network()->myNick(), Message::Self); } @@ -592,15 +601,17 @@ void CoreUserInputHandler::handleSetkey(const BufferInfo &bufferInfo, const QStr if (!bufferInfo.isValid()) return; - if (!Cipher::neededFeaturesAvailable()) + if (!Cipher::neededFeaturesAvailable()) { + emit displayMsg(Message::Error, typeByTarget(bufname), bufname, tr("Error: QCA provider plugin not found. It is usually provided by the qca-ossl plugin.")); return; + } QStringList parms = msg.split(' ', QString::SkipEmptyParts); if (parms.count() == 1 && !bufferInfo.bufferName().isEmpty()) parms.prepend(bufferInfo.bufferName()); else if (parms.count() != 2) { - emit displayMsg(Message::Info, bufname, + emit displayMsg(Message::Info, typeByTarget(bufname), bufname, tr("[usage] /setkey sets the encryption key for nick or channel. " "/setkey when in a channel or query buffer sets the key for it.")); return; @@ -610,10 +621,10 @@ void CoreUserInputHandler::handleSetkey(const BufferInfo &bufferInfo, const QStr QByteArray key = parms.at(1).toLocal8Bit(); network()->setCipherKey(target, key); - emit displayMsg(Message::Info, bufname, tr("The key for %1 has been set.").arg(target)); + emit displayMsg(Message::Info, typeByTarget(bufname), bufname, tr("The key for %1 has been set.").arg(target)); #else Q_UNUSED(msg) - emit displayMsg(Message::Error, bufname, tr("Error: Setting an encryption key requires Quassel to have been built " + emit displayMsg(Message::Error, typeByTarget(bufname), bufname, tr("Error: Setting an encryption key requires Quassel to have been built " "with support for the Qt Cryptographic Architecture (QCA) library. " "Contact your distributor about a Quassel package with QCA " "support, or rebuild Quassel with QCA present.")); @@ -628,8 +639,10 @@ void CoreUserInputHandler::handleShowkey(const BufferInfo &bufferInfo, const QSt if (!bufferInfo.isValid()) return; - if (!Cipher::neededFeaturesAvailable()) + if (!Cipher::neededFeaturesAvailable()) { + emit displayMsg(Message::Error, typeByTarget(bufname), bufname, tr("Error: QCA provider plugin not found. It is usually provided by the qca-ossl plugin.")); return; + } QStringList parms = msg.split(' ', QString::SkipEmptyParts); @@ -637,7 +650,7 @@ void CoreUserInputHandler::handleShowkey(const BufferInfo &bufferInfo, const QSt parms.prepend(bufferInfo.bufferName()); if (parms.isEmpty()) { - emit displayMsg(Message::Info, bufname, tr("[usage] /showkey shows the encryption key for nick or channel or just /showkey when in a channel or query.")); + emit displayMsg(Message::Info, typeByTarget(bufname), bufname, tr("[usage] /showkey shows the encryption key for nick or channel or just /showkey when in a channel or query.")); return; } @@ -645,15 +658,15 @@ void CoreUserInputHandler::handleShowkey(const BufferInfo &bufferInfo, const QSt QByteArray key = network()->cipherKey(target); if (key.isEmpty()) { - emit displayMsg(Message::Info, bufname, tr("No key has been set for %1.").arg(target)); + emit displayMsg(Message::Info, typeByTarget(bufname), bufname, tr("No key has been set for %1.").arg(target)); return; } - emit displayMsg(Message::Info, bufname, tr("The key for %1 is %2").arg(target).arg(QString(key))); + emit displayMsg(Message::Info, typeByTarget(bufname), bufname, tr("The key for %1 is %2:%3").arg(target, network()->cipherUsesCBC(target) ? "CBC" : "ECB", QString(key))); #else Q_UNUSED(msg) - emit displayMsg(Message::Error, bufname, tr("Error: Setting an encryption key requires Quassel to have been built " + emit displayMsg(Message::Error, typeByTarget(bufname), bufname, tr("Error: Setting an encryption key requires Quassel to have been built " "with support for the Qt Cryptographic Architecture (QCA2) library. " "Contact your distributor about a Quassel package with QCA2 " "support, or rebuild Quassel with QCA2 present."));