Implement authenticator class used for logging in users
[quassel.git] / src / client / clientauthhandler.h
index 35c741c..d6e54cd 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2005-2013 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  *
@@ -21,6 +21,7 @@
 #ifndef CLIENTAUTHHANDLER_H
 #define CLIENTAUTHHANDLER_H
 
+#include "compressor.h"
 #include "authhandler.h"
 #include "coreaccount.h"
 
@@ -35,6 +36,12 @@ class ClientAuthHandler : public AuthHandler
 public:
     ClientAuthHandler(CoreAccount account, QObject *parent = 0);
 
+    enum DigestVersion {
+        Md5,
+        Sha2_512,
+        Latest=Sha2_512
+    };
+
 public slots:
     void connectToCore();
 
@@ -63,7 +70,7 @@ signals:
 #endif
 
     void encrypted(bool isEncrypted = true);
-    void startCoreSetup(const QVariantList &backendInfo);
+    void startCoreSetup(const QVariantList &backendInfo, const QVariantList &authBackendInfo);
     void coreSetupSuccessful();
     void coreSetupFailed(const QString &error);
 
@@ -78,10 +85,21 @@ private:
     void handle(const Protocol::LoginSuccess &msg);
     void handle(const Protocol::SessionState &msg);
 
+    void setPeer(RemotePeer *peer);
+    void checkAndEnableSsl(bool coreSupportsSsl);
+    void startRegistration();
+
+#if QT_VERSION < 0x050000
+    QByteArray sha2_512(const QByteArray &input);
+#endif
+
 private slots:
     void onSocketConnected();
-    //void onSocketStateChanged(QAbstractSocket::SocketState state);
-    //void onSocketError(QAbstractSocket::SocketError);
+    void onSocketStateChanged(QAbstractSocket::SocketState state);
+    void onSocketError(QAbstractSocket::SocketError);
+    void onSocketDisconnected();
+    void onReadyRead();
+
 #ifdef HAVE_SSL
     void onSslSocketEncrypted();
     void onSslErrors();
@@ -95,8 +113,11 @@ private:
     RemotePeer *_peer;
     bool _coreConfigured;
     QVariantList _backendInfo;
+    QVariantList _authBackendInfo;
     CoreAccount _account;
-
+    bool _probing;
+    bool _legacy;
+    quint8 _connectionFeatures;
 };
 
 #endif