[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdenetwork/kget
From:       Lukas Appelhans <l.appelhans () gmx ! de>
Date:       2011-08-18 22:47:53
Message-ID: 20110818224753.C8BEBAC876 () svn ! kde ! org
[Download RAW message or body]

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 <KMessageBox>
+#include <kwallet.h>
+
+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 @@
+<?xml version="1.0" encoding="UTF-8"?>
 <ui version="4.0" >
  <class>DlgWebinterface</class>
  <widget class="QWidget" name="DlgWebinterface" >
@@ -61,7 +62,7 @@
        </widget>
       </item>
       <item row="2" column="1" >
-       <widget class="KLineEdit" name="kcfg_WebinterfacePassword" >
+       <widget class="KLineEdit" name="webinterfacePwd">
         <property name="showClearButton" stdset="0" >
          <bool>true</bool>
         </property>
--- trunk/KDE/kdenetwork/kget/conf/kget.kcfg #1247978:1247979
@@ -137,9 +137,6 @@
     <entry name="WebinterfaceUser" type="String">
       <default>admin</default>
     </entry>
-    <entry name="WebinterfacePassword" type="String">
-      <default>admin</default>
-    </entry>
   </group>
 
   <group name="Groups">
--- 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 <uwolfer @ kde.org>
    Copyright (C) 2010 Matthias Fuchs <mat69@gmx.net>
+   Copyright (C) 2011 Lukas Appelhans <l.appelhans@gmx.de>
 
    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 <KDebug>
 #include <KGlobalSettings>
-#include <KMessageBox>
 #include <KStandardDirs>
+#include <kwallet.h>
 
 #include <QTcpServer>
 #include <QTcpSocket>
@@ -29,22 +30,55 @@
 #include <QDateTime>
 
 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<QWidget*>(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<QWidget*>(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())


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic