1 /***************************************************************************
2 * Copyright (C) 2005-2019 by the Quassel Project *
3 * devel@quassel-irc.org *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) version 3. *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
15 * You should have received a copy of the GNU General Public License *
16 * along with this program; if not, write to the *
17 * Free Software Foundation, Inc., *
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
19 ***************************************************************************/
23 #include "authhandler.h"
24 #include "compressor.h"
25 #include "coreaccount.h"
31 class ClientAuthHandler : public AuthHandler
43 ClientAuthHandler(CoreAccount account, QObject* parent = nullptr);
50 void login(const QString& previousError = QString());
51 void login(const QString& user, const QString& password, bool remember);
52 void setupCore(const Protocol::SetupData& setupData);
55 void statusMessage(const QString& message);
56 void errorMessage(const QString& message);
57 void errorPopup(const QString& message);
58 void transferProgress(int current, int max);
60 void requestDisconnect(const QString& errorString = QString(), bool wantReconnect = false);
62 void connectionReady();
63 void loginSuccessful(const CoreAccount& account);
64 void handshakeComplete(RemotePeer* peer, const Protocol::SessionState& sessionState);
66 // These signals MUST be handled synchronously!
67 void userAuthenticationRequired(CoreAccount* account, bool* valid, const QString& errorMessage = QString());
68 void handleNoSslInClient(bool* accepted);
69 void handleNoSslInCore(bool* accepted);
71 void handleSslErrors(const QSslSocket* socket, bool* accepted, bool* permanently);
74 void encrypted(bool isEncrypted = true);
75 void startCoreSetup(const QVariantList& backendInfo, const QVariantList& authenticatorInfo);
76 void coreSetupSuccessful();
77 void coreSetupFailed(const QString& error);
80 using AuthHandler::handle;
82 void handle(const Protocol::ClientDenied& msg) override;
83 void handle(const Protocol::ClientRegistered& msg) override;
84 void handle(const Protocol::SetupFailed& msg) override;
85 void handle(const Protocol::SetupDone& msg) override;
86 void handle(const Protocol::LoginFailed& msg) override;
87 void handle(const Protocol::LoginSuccess& msg) override;
88 void handle(const Protocol::SessionState& msg) override;
90 void setPeer(RemotePeer* peer);
91 void checkAndEnableSsl(bool coreSupportsSsl);
92 void startRegistration();
95 void onSocketConnected();
96 void onSocketStateChanged(QAbstractSocket::SocketState state);
97 void onSocketError(QAbstractSocket::SocketError) override;
98 void onSocketDisconnected() override;
102 void onSslSocketEncrypted();
106 void onProtocolVersionMismatch(int actual, int expected);
108 void onConnectionReady();
112 bool _coreConfigured;
113 QVariantList _backendInfo;
114 QVariantList _authenticatorInfo;
115 CoreAccount _account;
118 quint8 _connectionFeatures;