Persist Blowfish keys in the database
[quassel.git] / src / core / coreircuser.cpp
index c89e932..4dd946e 100644 (file)
  ***************************************************************************/
 
 #include "coreircuser.h"
+#include "corenetwork.h"
 
 CoreIrcUser::CoreIrcUser(const QString &hostmask, Network *network) : IrcUser(hostmask, network)
 {
 #ifdef HAVE_QCA2
     _cipher = 0;
+
+    // Get the cipher key from CoreNetwork if present
+    CoreNetwork *coreNetwork = qobject_cast<CoreNetwork *>(network);
+    if (coreNetwork) {
+        QByteArray key = coreNetwork->readChannelCipherKey(nick().toLower());
+        if (!key.isEmpty()) {
+            if (!_cipher) {
+                _cipher = new Cipher();
+            }
+            setEncrypted(_cipher->setKey(key));
+        }
+    }
 #endif
 }
 
@@ -31,6 +44,15 @@ CoreIrcUser::CoreIrcUser(const QString &hostmask, Network *network) : IrcUser(ho
 CoreIrcUser::~CoreIrcUser()
 {
 #ifdef HAVE_QCA2
+    // Store the cipher key in CoreNetwork, including empty keys if a cipher
+    // exists. There is no need to store the empty key if no cipher exists; no
+    // key was present when instantiating and no key was set during the
+    // channel's lifetime.
+    CoreNetwork *coreNetwork = qobject_cast<CoreNetwork *>(network());
+    if (coreNetwork && _cipher) {
+        coreNetwork->storeChannelCipherKey(nick().toLower(), _cipher->key());
+    }
+
     delete _cipher;
 #endif
 }