Browse Source

Added HTTPS support (backend)

adaptive-webui-19844
Ishan Arora 14 years ago
parent
commit
669d1a3a46
  1. 32
      src/preferences/preferences.h
  2. 36
      src/webui/httpserver.cpp
  3. 6
      src/webui/httpserver.h

32
src/preferences/preferences.h

@ -37,6 +37,8 @@
#include <QTime> #include <QTime>
#include <QList> #include <QList>
#include <QDebug> #include <QDebug>
#include <QSslCertificate>
#include <QSslKey>
#include <libtorrent/version.hpp> #include <libtorrent/version.hpp>
#ifndef DISABLE_GUI #ifndef DISABLE_GUI
@ -773,6 +775,36 @@ public:
return pass_ha1; return pass_ha1;
} }
bool isWebUiHttpsEnabled() const {
return value("Preferences/WebUI/HTTPS/Enabled", false).toBool();
}
void setWebUiHttpsEnabled(bool enabled) {
setValue("Preferences/WebUI/HTTPS/Enabled", enabled);
}
QSslCertificate getWebUiHttpsCertificate() const {
return QSslCertificate(value("Preferences/WebUI/HTTPS/Certificate").toByteArray());
}
void setWebUiHttpsCertificate(QString filename) {
QFile file(filename);
file.open(QIODevice::ReadOnly);
setValue("Preferences/WebUI/HTTPS/Certificate", file.readAll());
file.close();
}
QSslKey getWebUiHttpsKey() const {
return QSslKey(value("Preferences/WebUI/HTTPS/Key").toByteArray(), QSsl::Rsa);
}
void setWebUiHttpsKey(QString filename) {
QFile file(filename);
file.open(QIODevice::ReadOnly);
setValue("Preferences/WebUI/HTTPS/Key", file.readAll());
file.close();
}
bool isDynDNSEnabled() const { bool isDynDNSEnabled() const {
return value("Preferences/DynDNS/Enabled", false).toBool(); return value("Preferences/DynDNS/Enabled", false).toBool();
} }

36
src/webui/httpserver.cpp

@ -38,6 +38,7 @@
#include <QTime> #include <QTime>
#include <QRegExp> #include <QRegExp>
#include <QTimer> #include <QTimer>
#include <QSslSocket>
using namespace libtorrent; using namespace libtorrent;
@ -87,6 +88,11 @@ HttpServer::HttpServer(int msec, QObject* parent) : QTcpServer(parent) {
username = pref.getWebUiUsername().toLocal8Bit(); username = pref.getWebUiUsername().toLocal8Bit();
password_ha1 = pref.getWebUiPassword().toLocal8Bit(); password_ha1 = pref.getWebUiPassword().toLocal8Bit();
m_localAuth = pref.isWebUiLocalAuthEnabled(); m_localAuth = pref.isWebUiLocalAuthEnabled();
m_https = pref.isWebUiHttpsEnabled();
if (m_https) {
m_certificate = pref.getWebUiHttpsCertificate();
m_key = pref.getWebUiHttpsKey();
}
connect(this, SIGNAL(newConnection()), this, SLOT(newHttpConnection())); connect(this, SIGNAL(newConnection()), this, SLOT(newHttpConnection()));
manager = new EventManager(this); manager = new EventManager(this);
//add torrents //add torrents
@ -141,6 +147,36 @@ HttpServer::~HttpServer()
delete manager; delete manager;
} }
void HttpServer::incomingConnection(int socketDescriptor)
{
QTcpSocket *serverSocket;
QSslSocket *serverSslSocket;
if (m_https)
{
serverSslSocket = new QSslSocket;
serverSocket = serverSslSocket;
}
else
{
serverSocket = new QTcpSocket;
}
if (serverSocket->setSocketDescriptor(socketDescriptor))
{
if (m_https)
{
serverSslSocket->setProtocol(QSsl::AnyProtocol);
serverSslSocket->setPrivateKey(m_key);
serverSslSocket->setLocalCertificate(m_certificate);
serverSslSocket->startServerEncryption();
}
addPendingConnection(serverSocket);
}
else
{
delete serverSocket;
}
}
void HttpServer::newHttpConnection() void HttpServer::newHttpConnection()
{ {
QTcpSocket *socket; QTcpSocket *socket;

6
src/webui/httpserver.h

@ -63,6 +63,9 @@ public:
void increaseNbFailedAttemptsForIp(QString ip); void increaseNbFailedAttemptsForIp(QString ip);
void resetNbFailedAttemptsForIp(QString ip); void resetNbFailedAttemptsForIp(QString ip);
private:
void incomingConnection(int socketDescriptor);
private slots: private slots:
void newHttpConnection(); void newHttpConnection();
void onTimer(); void onTimer();
@ -75,6 +78,9 @@ private:
QTimer *timer; QTimer *timer;
QHash<QString, int> client_failed_attempts; QHash<QString, int> client_failed_attempts;
bool m_localAuth; bool m_localAuth;
bool m_https;
QSslCertificate m_certificate;
QSslKey m_key;
}; };
#endif #endif

Loading…
Cancel
Save