modernize: Use auto where the type is clear from context
[quassel.git] / src / core / coreauthhandler.cpp
index a05fa95..369a134 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2005-2016 by the Quassel Project                        *
+ *   Copyright (C) 2005-2018 by the Quassel Project                        *
  *   devel@quassel-irc.org                                                 *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
 #endif
 
 #include "core.h"
-#include "logger.h"
+#include "logmessage.h"
 
 using namespace Protocol;
 
 CoreAuthHandler::CoreAuthHandler(QTcpSocket *socket, QObject *parent)
     : AuthHandler(parent),
-    _peer(0),
+    _peer(nullptr),
     _magicReceived(false),
     _legacy(false),
     _clientRegistered(false),
@@ -86,8 +86,8 @@ void CoreAuthHandler::onReadyRead()
         socket()->read((char*)&data, 4);
         data = qFromBigEndian<quint32>(data);
 
-        Protocol::Type type = static_cast<Protocol::Type>(data & 0xff);
-        quint16 protoFeatures = static_cast<quint16>(data>>8 & 0xffff);
+        auto type = static_cast<Protocol::Type>(data & 0xff);
+        auto protoFeatures = static_cast<quint16>(data>>8 & 0xffff);
         _supportedProtos.append(PeerFactory::ProtoDescriptor(type, protoFeatures));
 
         if (data >= 0x80000000) { // last protocol
@@ -221,6 +221,12 @@ void CoreAuthHandler::handle(const Login &msg)
     if (!checkClientRegistered())
         return;
 
+    if (!Core::isConfigured()) {
+        qWarning() << qPrintable(tr("Client")) << qPrintable(socket()->peerAddress().toString()) << qPrintable(tr("attempted to login before the core was configured, rejecting."));
+        _peer->dispatch(ClientDenied(tr("<b>Attempted to login before core was configured!</b><br>The core must be configured before attempting to login.")));
+        return;
+    }
+
     // First attempt local auth using the real username and password.
     // If that fails, move onto the auth provider.
     UserId uid = Core::validateUser(msg.user, msg.password);
@@ -240,15 +246,19 @@ void CoreAuthHandler::handle(const Login &msg)
     const auto &clientFeatures = _peer->features();
     auto unsupported = clientFeatures.toStringList(false);
     if (!unsupported.isEmpty()) {
-        quInfo() << qPrintable(tr("Client does not support the following features: %1").arg(unsupported.join(", ")));
+        if (unsupported.contains("NoFeatures"))
+            quInfo() << qPrintable(tr("Client does not support extended features."));
+        else
+            quInfo() << qPrintable(tr("Client does not support the following features: %1").arg(unsupported.join(", ")));
     }
+
     if (!clientFeatures.unknownFeatures().isEmpty()) {
         quInfo() << qPrintable(tr("Client supports unknown features: %1").arg(clientFeatures.unknownFeatures().join(", ")));
     }
 
-    disconnect(socket(), 0, this, 0);
-    disconnect(_peer, 0, this, 0);
-    _peer->setParent(0); // Core needs to take care of this one now!
+    disconnect(socket(), nullptr, this, nullptr);
+    disconnect(_peer, nullptr, this, nullptr);
+    _peer->setParent(nullptr); // Core needs to take care of this one now!
 
     socket()->flush(); // Make sure all data is sent before handing over the peer (and socket) to the session thread (bug 682)
     emit handshakeComplete(_peer, uid);
@@ -260,7 +270,7 @@ void CoreAuthHandler::handle(const Login &msg)
 void CoreAuthHandler::startSsl()
 {
     #ifdef HAVE_SSL
-    QSslSocket *sslSocket = qobject_cast<QSslSocket *>(socket());
+    auto *sslSocket = qobject_cast<QSslSocket *>(socket());
     Q_ASSERT(sslSocket);
 
     qDebug() << qPrintable(tr("Starting encryption for Client:"))  << _peer->description();
@@ -274,7 +284,7 @@ void CoreAuthHandler::startSsl()
 #ifdef HAVE_SSL
 void CoreAuthHandler::onSslErrors()
 {
-    QSslSocket *sslSocket = qobject_cast<QSslSocket *>(socket());
+    auto *sslSocket = qobject_cast<QSslSocket *>(socket());
     Q_ASSERT(sslSocket);
     sslSocket->ignoreSslErrors();
 }