From: Johannes Huber Date: Thu, 25 Feb 2010 18:36:55 +0000 (+0100) Subject: new commands setkey, delkey X-Git-Tag: 0.7-beta1~30 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=d81414703facf1199127394ec9d1d72faf77ded0;ds=sidebyside new commands setkey, delkey --- diff --git a/src/core/coreuserinputhandler.cpp b/src/core/coreuserinputhandler.cpp index ccba8b8a..101ccab3 100644 --- a/src/core/coreuserinputhandler.cpp +++ b/src/core/coreuserinputhandler.cpp @@ -28,6 +28,10 @@ #include #include +#ifdef HAVE_QCA2 +#include "cipher.h" +#endif + CoreUserInputHandler::CoreUserInputHandler(CoreNetwork *parent) : CoreBasicHandler(parent) { @@ -157,6 +161,60 @@ void CoreUserInputHandler::handleCtcp(const BufferInfo &bufferInfo, const QStrin emit displayMsg(Message::Action, BufferInfo::StatusBuffer, "", verboseMessage, network()->myNick()); } +void CoreUserInputHandler::handleDelkey(const BufferInfo &bufferInfo, const QString &msg) { + #ifdef HAVE_QCA2 + if (!bufferInfo.isValid()) + return; + + QStringList parms = msg.split(' ', QString::SkipEmptyParts); + + if(parms.isEmpty() && !bufferInfo.bufferName().isEmpty()) + parms.prepend(bufferInfo.bufferName()); + + if(parms.isEmpty()) { + QString message = tr("[usage] /delkey deletes the encryption key for nick or channel or just /delkey when in a channel or query."); + + if(bufferInfo.bufferName().isEmpty()) + emit displayMsg(Message::Info, BufferInfo::StatusBuffer, "", message); + else + emit displayMsg(Message::Info, bufferInfo.bufferName(), message); + return; + } + + if(network()->bufferKey(parms[0]).isEmpty()) { + QString message = tr("No key has been set for %1.").arg(parms[0]); + + if(bufferInfo.bufferName().isEmpty()) + emit displayMsg(Message::Info, BufferInfo::StatusBuffer, "", message); + else + emit displayMsg(Message::Info, bufferInfo.bufferName(), message); + return; + } + + network()->setBufferKey(parms[0], ""); + + if(network()->isChannelName(parms[0]) && network()->channels().contains(parms[0])) { + network()->ircChannel(parms[0])->setEncrypted(false); + } + else if(network()->nicks().contains(parms[0])) { + network()->ircUser(parms[0])->setEncrypted(false); + } + + QString message = tr("The key for %1 has been deleted.").arg(parms[0]); + + if(bufferInfo.bufferName().isEmpty()) + emit displayMsg(Message::Info, BufferInfo::StatusBuffer, "", message); + else + emit displayMsg(Message::Info, bufferInfo.bufferName(), message); + + #else + emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", 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.")); + #endif +} + void CoreUserInputHandler::handleDeop(const BufferInfo &bufferInfo, const QString &msg) { QStringList nicks = msg.split(' ', QString::SkipEmptyParts); QString m = "-"; for(int i = 0; i < nicks.count(); i++) m += 'o'; @@ -391,6 +449,44 @@ void CoreUserInputHandler::handleSay(const BufferInfo &bufferInfo, const QString emit displayMsg(Message::Plain, bufferInfo.type(), bufferInfo.bufferName(), msg, network()->myNick(), Message::Self); } +void CoreUserInputHandler::handleSetkey(const BufferInfo &bufferInfo, const QString &msg) { + #ifdef HAVE_QCA2 + if(!bufferInfo.isValid()) + return; + + QStringList parms = msg.split(' ', QString::SkipEmptyParts); + + if(parms.count() == 1 && !bufferInfo.bufferName().isEmpty()) + parms.prepend(bufferInfo.bufferName()); + else if(parms.count() != 2) { + QString message =tr("[usage] /setkey sets the encryption key for nick or channel. /setkey when in a channel or query buffer sets the key for it."); + + if(bufferInfo.bufferName().isEmpty()) + emit displayMsg(Message::Info, BufferInfo::StatusBuffer, "", message); + else + emit displayMsg(Message::Info, bufferInfo.bufferName(), message); + return; + } + network()->setBufferKey(parms[0], parms[1].toLocal8Bit()); + + if(network()->isChannelName(parms[0]) && network()->channels().contains(parms[0])) + network()->ircChannel(parms[0])->setEncrypted(true); + else if(network()->nicks().contains(parms[0])) + network()->ircUser(parms[0])->setEncrypted(true); + + QString message = tr("The key for %1 has been set.").arg(parms[0]); + if (bufferInfo.bufferName().isEmpty()) + emit displayMsg(Message::Info, BufferInfo::StatusBuffer, "", message); + else + emit displayMsg(Message::Info, bufferInfo.bufferName(), message); + #else + emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", 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.")); + #endif +} + void CoreUserInputHandler::handleTopic(const BufferInfo &bufferInfo, const QString &msg) { if(bufferInfo.bufferName().isEmpty()) return; QList params; diff --git a/src/core/coreuserinputhandler.h b/src/core/coreuserinputhandler.h index f98fb740..f2c3c6d8 100644 --- a/src/core/coreuserinputhandler.h +++ b/src/core/coreuserinputhandler.h @@ -38,6 +38,7 @@ public slots: void handleBan(const BufferInfo &bufferInfo, const QString &text); void handleUnban(const BufferInfo &bufferInfo, const QString &text); void handleCtcp(const BufferInfo &bufferInfo, const QString &text); + void handleDelkey(const BufferInfo &bufferInfo, const QString &text); void handleDeop(const BufferInfo &bufferInfo, const QString &text); void handleDevoice(const BufferInfo &bufferInfo, const QString &text); void handleInvite(const BufferInfo &bufferInfo, const QString &text); @@ -58,6 +59,7 @@ public slots: void handleQuit(const BufferInfo &bufferInfo, const QString &text); void handleQuote(const BufferInfo &bufferInfo, const QString &text); void handleSay(const BufferInfo &bufferInfo, const QString &text); + void handleSetkey(const BufferInfo &bufferInfo, const QString &text); void handleTopic(const BufferInfo &bufferInfo, const QString &text); void handleVoice(const BufferInfo &bufferInfo, const QString &text); void handleWait(const BufferInfo &bufferInfo, const QString &text);