This is an automated email from the git hooks/post-receive script.

x2go pushed a commit to branch master
in repository x2godesktopsharing.

commit 3657d1d62d097c98ffca3b47de1d8ecba7127d59
Author: Mike Gabriel <mike.gabr...@das-netzwerkteam.de>
Date:   Sun Nov 11 18:08:13 2018 +0100

    Add possibility to have a system-wide settings file in 
/etc/x2godesktopsharing/settings.
    
      The user preferences always supersede the system-wide settings, so
      system-wide settings can act as a default set of settings, but not as a
      limitation to the user.
---
 debian/changelog |  4 +++
 sharetray.cpp    | 93 ++++++++++++++++++++++++++++++++++++++++----------------
 sharetray.h      | 12 +++++---
 3 files changed, 79 insertions(+), 30 deletions(-)

diff --git a/debian/changelog b/debian/changelog
index b61b68c..2505da0 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -13,6 +13,10 @@ x2godesktopsharing (3.1.1.5-0x2go1) UNRELEASED; 
urgency=medium
     - simplelocalsocket.cpp: Stop using deprecated QString::toAscii() function
       (replace it by toLatin1()).
     - Drop build cruft (moc_listdialog.cpp).
+    - Add possibility to have a system-wide settings file in
+      /etc/x2godesktopsharing/settings. The user preferences always
+      supersede the system-wide settings, so system-wide settings can
+      act as a default set of settings, but not as a limitation to the user.
   * debian/*:
     + Convert to DH packaging style. Build against Qt5.
   * debian/control:
diff --git a/sharetray.cpp b/sharetray.cpp
index 0a9acfe..445eb7c 100644
--- a/sharetray.cpp
+++ b/sharetray.cpp
@@ -5,6 +5,7 @@
 //
 //
 // Author: Oleksandr Shneyder <oleksandr.shney...@obviously-nice.de>, (C) 
2009-2015
+//         Mike Gabriel <mike.gabr...@das-netzwerkteam.de>, (C) 2011-2018
 //
 // Copyright: See COPYING file that comes with this distribution
 //
@@ -34,6 +35,7 @@
 #include <QDateTime>
 #include <grp.h>
 #include <QProcess>
+#include <QFileInfo>
 #include <stdint.h>
 #define STAT_ACT_COUNT 10
 
@@ -45,6 +47,16 @@ int ShareTray::sigtermFd[2];
 int ShareTray::sigabortFd[2];
 int ShareTray::sighupFd[2];
 
+bool fileExists(QString path) {
+       QFileInfo check_file(path);
+       // check if file exists and if yes: Is it really a file and no 
directory?
+       if (check_file.exists() && check_file.isFile()) {
+               return true;
+       } else {
+               return false;
+       }
+}
+
 ShareTray::ShareTray()
         : QMainWindow()
 {
@@ -212,7 +224,8 @@ ShareTray::ShareTray()
                }
        }
 
-       loadSettings();
+       loadSystemSettings();
+       loadUserSettings();
        setTrayIcon();
        trayIcon->show();
 }
@@ -225,7 +238,7 @@ ShareTray::~ShareTray()
        if ( QFile::exists ( lockFname ) )
                QFile::remove ( lockFname );
                qDebug() <<"lock file removed";
-       saveSettings();
+       saveUserSettings();
        qDebug() <<"settings saved";
 }
 
@@ -457,21 +470,29 @@ void ShareTray::slotCloseConnection ( AccessAction* 
action )
 
 int ShareTray::getAccess ( QString remote_user, QString host )
 {
-       if ( whiteList.contains ( remote_user ) )
+
+       // user preferences always supercede system-wide preferences
+       if ( userWhiteList.contains ( remote_user ) )
                return QMessageBox::Yes;
-       if ( blackList.contains ( remote_user ) )
+       if ( userBlackList.contains ( remote_user ) )
                return QMessageBox::No;
 
+       // system-wide preferences act as defaults for all users, but can be 
overriden by the user...
+       if ( systemwideWhiteList.contains ( remote_user ) )
+               return QMessageBox::Yes;
+       if ( systemwideBlackList.contains ( remote_user ) )
+               return QMessageBox::Yes;
+
        MessageBox m ( remote_user, host, this );
        m.activateWindow();
        m.raise();
        int res=m.exec();
        if ( m.isChecked() &&res==QMessageBox::Yes )
-               whiteList<<remote_user;
+               userWhiteList<<remote_user;
        if ( m.isChecked() &&res==QMessageBox::No )
-               blackList<<remote_user;
-       actBlack->setEnabled ( blackList.size() >0 );
-       actWhite->setEnabled ( whiteList.size() >0 );
+               userBlackList<<remote_user;
+       actBlack->setEnabled ( userBlackList.size() >0 );
+       actWhite->setEnabled ( userWhiteList.size() >0 );
        return res;
 }
 
@@ -488,7 +509,7 @@ void ShareTray::closeEvent ( QCloseEvent*  ev )
        if ( QFile::exists ( lockFname ) )
                QFile::remove ( lockFname );
                qDebug() <<"lock file removed";
-       saveSettings();
+       saveUserSettings();
        qDebug() <<"settings saved";
 }
 
@@ -560,36 +581,56 @@ void ShareTray::showList()
 
        QStringList* lst;
        if ( current_list==BLACK )
-               lst=&blackList;
+               lst=&userBlackList;
        else
-               lst=&whiteList;
+               lst=&userWhiteList;
        lst->sort();
        ui.box->clear();
        ui.box->insertItems ( 0,*lst );
 }
 
-void ShareTray::loadSettings()
+void ShareTray::loadSystemSettings()
 {
-       QSettings st ( QDir::homePath() +"/.x2godesktopsharing/settings",
-                      QSettings::NativeFormat );
+       if (fileExists ("/etc/x2godesktopsharing/settings") ) {
+
+               QSettings st ( "/etc/x2godesktopsharing/settings",
+                              QSettings::NativeFormat );
+
+               systemwideBlackList= st.value ( "blacklist" ).toStringList();
+               systemwideWhiteList= st.value ( "whitelist" ).toStringList();
 
-       blackList= st.value ( "blacklist" ).toStringList();
-       whiteList= st.value ( "whitelist" ).toStringList();
+               actBlack->setEnabled ( systemwideBlackList.size() >0 );
+               actWhite->setEnabled ( systemwideWhiteList.size() >0 );
 
-       actBlack->setEnabled ( blackList.size() >0 );
-       actWhite->setEnabled ( whiteList.size() >0 );
+       }
 }
 
-void ShareTray::saveSettings()
+void ShareTray::loadUserSettings()
+{
+
+       if (fileExists (QDir::homePath() + +"/.x2godesktopsharing/settings") ) {
+
+               QSettings st ( QDir::homePath() 
+"/.x2godesktopsharing/settings",
+                              QSettings::NativeFormat );
+
+               userBlackList= st.value ( "blacklist" ).toStringList();
+               userWhiteList= st.value ( "whitelist" ).toStringList();
+
+               actBlack->setEnabled ( userBlackList.size() >0 );
+               actWhite->setEnabled ( userWhiteList.size() >0 );
+
+       }
+}
+
+void ShareTray::saveUserSettings()
 {
        QSettings st ( QDir::homePath() +"/.x2godesktopsharing/settings",
                       QSettings::NativeFormat );
 
-       st.setValue ( "blacklist",blackList );
-       st.setValue ( "whitelist",whiteList );
+       st.setValue ( "blacklist",userBlackList );
+       st.setValue ( "whitelist",userWhiteList );
 }
 
-
 void ShareTray::setTrayIcon()
 {
        if ( !acceptConnections() )
@@ -633,17 +674,17 @@ void ShareTray::slotMsgOkCancel ( QAbstractButton* button 
)
        {
                QStringList* lst;
                if ( current_list==BLACK )
-                       lst=&blackList;
+                       lst=&userBlackList;
                else
-                       lst=&whiteList;
+                       lst=&userWhiteList;
                lst->clear();
                for ( int i=ui.box->count()-1;i>=0;--i )
                {
                        *lst<<ui.box->item ( i )->text();
                }
        }
-       actBlack->setEnabled ( blackList.size() >0 );
-       actWhite->setEnabled ( whiteList.size() >0 );
+       actBlack->setEnabled ( userBlackList.size() >0 );
+       actWhite->setEnabled ( userWhiteList.size() >0 );
        hide();
 }
 
diff --git a/sharetray.h b/sharetray.h
index 2b54022..e96a2bb 100644
--- a/sharetray.h
+++ b/sharetray.h
@@ -5,6 +5,7 @@
 //
 //
 // Author: Oleksandr Shneyder <oleksandr.shney...@obviously-nice.de>, (C) 
2009-2015
+//         Mike Gabriel <mike.gabr...@das-netzwerkteam.de>, (C) 2011-2018
 //
 // Copyright: See COPYING file that comes with this distribution
 //
@@ -56,8 +57,10 @@ private:
        QString socketFname;
        QString lockFname;
        MessageBox* mbox;
-       QStringList whiteList;
-       QStringList blackList;
+       QStringList userWhiteList;
+       QStringList userBlackList;
+       QStringList systemwideWhiteList;
+       QStringList systemwideBlackList;
        Ui::mwnd ui;
        bool menuClose;
 protected:
@@ -88,8 +91,9 @@ private:
        int getAccess(QString user, QString host);
        void trayMessage(QString title, QString text);
        bool isProcessRunning(QString pid);
-       void loadSettings();
-       void saveSettings();
+       void loadSystemSettings();
+       void loadUserSettings();
+       void saveUserSettings();
        void setTrayIcon();
        void showList();
        // unix file sockets for signal handler communication (unix <-> Qt)

--
Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on 
/srv/git/code.x2go.org/x2godesktopsharing.git
_______________________________________________
x2go-commits mailing list
x2go-commits@lists.x2go.org
https://lists.x2go.org/listinfo/x2go-commits

Reply via email to