From kde-commits Thu Aug 18 22:47:53 2011 From: Lukas Appelhans Date: Thu, 18 Aug 2011 22:47:53 +0000 To: kde-commits Subject: KDE/kdenetwork/kget Message-Id: <20110818224753.C8BEBAC876 () svn ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=131370769407088 SVN commit 1247979 by lappelhans: Store the webinterface password in KWallet M +38 -2 conf/dlgwebinterface.cpp M +13 -1 conf/dlgwebinterface.h M +2 -1 conf/dlgwebinterface.ui M +0 -3 conf/kget.kcfg M +2 -0 conf/preferencesdialog.cpp U core/kget.h M +42 -8 extensions/webinterface/httpserver.cpp M +11 -1 extensions/webinterface/httpserver.h M +2 -0 mainwindow.cpp --- trunk/KDE/kdenetwork/kget/conf/dlgwebinterface.cpp #1247978:1247979 @@ -12,24 +12,60 @@ #include "settings.h" -DlgWebinterface::DlgWebinterface(QWidget *parent) - : QWidget(parent) +#include +#include + +DlgWebinterface::DlgWebinterface(KDialog *parent) + : QWidget(parent), + m_wallet(0) { setupUi(this); readConfig(); + + connect(parent, SIGNAL(accepted()), SLOT(saveSettings())); + connect(webinterfacePwd, SIGNAL(textChanged(QString)), SIGNAL(changed())); } DlgWebinterface::~DlgWebinterface() { + delete m_wallet; } void DlgWebinterface::readConfig() { + if (Settings::webinterfaceEnabled()) { + m_wallet = KWallet::Wallet::openWallet(KWallet::Wallet::LocalWallet(), + winId(),///Use MainWindow? + KWallet::Wallet::Asynchronous); + if (m_wallet) { + connect(m_wallet, SIGNAL(walletOpened(bool)), SLOT(walletOpened(bool))); + } else { + KMessageBox::error(0, i18n("Could not open KWallet")); } + } +} +void DlgWebinterface::walletOpened(bool opened) +{ + if (opened && + (m_wallet->hasFolder("KGet") || + m_wallet->createFolder("KGet")) && + m_wallet->setFolder("KGet")) { + QString pwd; + m_wallet->readPassword("Webinterface", pwd); + webinterfacePwd->setText(pwd); + } else { + KMessageBox::error(0, i18n("Could not open KWallet")); + } +} + void DlgWebinterface::saveSettings() { + if (m_wallet) { + m_wallet->writePassword("Webinterface", webinterfacePwd->text()); } + emit saved(); +} #include "dlgwebinterface.moc" --- trunk/KDE/kdenetwork/kget/conf/dlgwebinterface.h #1247978:1247979 @@ -15,17 +15,29 @@ #include "ui_dlgwebinterface.h" +namespace KWallet { + class Wallet; +} + class DlgWebinterface : public QWidget, public Ui::DlgWebinterface { Q_OBJECT public: - DlgWebinterface(QWidget *parent = 0); + DlgWebinterface(KDialog *parent = 0); ~DlgWebinterface(); +signals: + void changed(); + void saved(); + private Q_SLOTS: void readConfig(); void saveSettings(); + void walletOpened(bool); + +private: + KWallet::Wallet *m_wallet; }; #endif --- trunk/KDE/kdenetwork/kget/conf/dlgwebinterface.ui #1247978:1247979 @@ -1,3 +1,4 @@ + DlgWebinterface @@ -61,7 +62,7 @@ - + true --- trunk/KDE/kdenetwork/kget/conf/kget.kcfg #1247978:1247979 @@ -137,9 +137,6 @@ admin - - admin - --- trunk/KDE/kdenetwork/kget/conf/preferencesdialog.cpp #1247978:1247979 @@ -29,6 +29,8 @@ QWidget *appearance = new QWidget(this); TransfersGroupWidget *groups = new TransfersGroupWidget(this); DlgWebinterface *webinterface = new DlgWebinterface(this); + connect(webinterface, SIGNAL(changed()), SLOT(enableApplyButton())); + connect(webinterface, SIGNAL(saved()), SLOT(settingsChangedSlot())); QWidget *network = new QWidget(this); QWidget *advanced = new QWidget(this); IntegrationPreferences *integration = new IntegrationPreferences(this); --- trunk/KDE/kdenetwork/kget/extensions/webinterface/httpserver.cpp #1247978:1247979 @@ -2,6 +2,7 @@ Copyright (C) 2008 - 2009 Urs Wolfer Copyright (C) 2010 Matthias Fuchs + Copyright (C) 2011 Lukas Appelhans This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -18,8 +19,8 @@ #include #include -#include #include +#include #include #include @@ -29,22 +30,55 @@ #include HttpServer::HttpServer(QWidget *parent) - : QObject(parent) + : QObject(parent), + m_wallet(0) { - tcpServer = new QTcpServer(this); - if (!tcpServer->listen(QHostAddress::Any, Settings::webinterfacePort())) { - KMessageBox::error(0, i18nc("@info", "Unable to start the server: %1.", tcpServer->errorString())); + m_wallet = KWallet::Wallet::openWallet(KWallet::Wallet::LocalWallet(), + parent->winId(),///Use MainWindow? + KWallet::Wallet::Asynchronous); + if (m_wallet) { + connect(m_wallet, SIGNAL(walletOpened(bool)), SLOT(init(bool))); + } else { + KGet::showNotification(parent, "error", i18n("Unable to start WebInterface: Could not open KWallet")); + } +} + +HttpServer::~HttpServer() +{ + delete m_wallet; +} + +void HttpServer::init(bool opened) +{ + if (opened && + m_wallet->hasFolder("KGet") && + m_wallet->setFolder("KGet")) { + m_wallet->readPassword("Webinterface", m_pwd); + } else { + KGet::showNotification(static_cast(parent()), "error", i18n("Unable to start WebInterface: Could not open KWallet")); return; } + m_tcpServer = new QTcpServer(this); + if (!m_tcpServer->listen(QHostAddress::Any, Settings::webinterfacePort())) { + KGet::showNotification(static_cast(parent()), "error", i18nc("@info", "Unable to start WebInterface: %1", m_tcpServer->errorString())); + return; + } - connect(tcpServer, SIGNAL(newConnection()), this, SLOT(handleRequest())); + connect(m_tcpServer, SIGNAL(newConnection()), this, SLOT(handleRequest())); } +void HttpServer::settingsChanged() +{ + if (m_wallet) { + m_wallet->readPassword("Webinterface", m_pwd); + } +} + void HttpServer::handleRequest() { int responseCode = 200; QString responseText = "OK"; - QTcpSocket *clientConnection = tcpServer->nextPendingConnection(); + QTcpSocket *clientConnection = m_tcpServer->nextPendingConnection(); connect(clientConnection, SIGNAL(disconnected()), clientConnection, SLOT(deleteLater())); @@ -61,7 +95,7 @@ // for HTTP authorization information see: http://www.governmentsecurity.org/articles/OverviewofHTTPAuthentication.php QString auth = header.value("Authorization"); if (auth.length() < 6 || QByteArray::fromBase64(auth.right(auth.length() - 6).toUtf8()) != - QString(Settings::webinterfaceUser() + ':' + Settings::webinterfacePassword())) { + QString(Settings::webinterfaceUser() + ':' + m_pwd)) { responseCode = 401; responseText = "Authorization Required"; // DO NOT TRANSLATE THE FOLLOWING MESSAGE! webserver messages are never translated. --- trunk/KDE/kdenetwork/kget/extensions/webinterface/httpserver.h #1247978:1247979 @@ -15,18 +15,28 @@ class QTcpServer; +namespace KWallet { + class Wallet; +} + class HttpServer : public QObject { Q_OBJECT public: HttpServer(QWidget *parent = 0); + ~HttpServer(); + void settingsChanged(); + private slots: + void init(bool); void handleRequest(); private: - QTcpServer *tcpServer; + KWallet::Wallet *m_wallet; + QTcpServer *m_tcpServer; + QString m_pwd; }; #endif --- trunk/KDE/kdenetwork/kget/mainwindow.cpp #1247978:1247979 @@ -939,6 +939,8 @@ } else if (m_webinterface && !Settings::webinterfaceEnabled()) { delete m_webinterface; m_webinterface = 0; + } else if (m_webinterface) { + m_webinterface->settingsChanged(); } if (Settings::speedLimit())