Implemented KWallet password storage for Linux. On Linux they are no

longer saved to the database file.
This commit is contained in:
Juan Carlos Cornejo 2011-11-11 14:48:52 -05:00 committed by Klaas Freitag
parent ed4fc09592
commit 929b6afa1a
4 changed files with 92 additions and 9 deletions

View file

@ -34,13 +34,18 @@
#include <QTableWidgetItem>
#include <QComboBox>
OwnCloudSync::OwnCloudSync(QString name) : mAccountName(name)
#ifdef Q_OS_LINUX
#include <kwallet.h>
#endif
OwnCloudSync::OwnCloudSync(QString name, WId id) : mAccountName(name),mWinId(id)
{
mBusy = false;
// Set the pointers so we can delete them without worrying :)
mSyncTimer = 0;
mFileWatcher = 0;
mWallet = 0;
mHardStop = false;
mIsFirstRun = true;
@ -104,7 +109,11 @@ OwnCloudSync::OwnCloudSync(QString name) : mAccountName(name)
readConfigFromDB();
//ui->buttonSave->setDisabled(true);
qDebug() << "Checking configuration!";
#ifdef Q_OS_LINUX
// Wait until the password is set
#else
initialize();
#endif
}
} else {
createDataBase(); // Create the database in memory
@ -114,6 +123,15 @@ OwnCloudSync::OwnCloudSync(QString name) : mAccountName(name)
connect(mSaveDBTimer, SIGNAL(timeout()), this, SLOT(saveDBToFile()));
mSaveDBTimer->start(370000);
updateStatus();
// Now the password management
#ifdef Q_OS_LINUX
mWallet= KWallet::Wallet::openWallet(
KWallet::Wallet::NetworkWallet(),
mWinId,KWallet::Wallet::Asynchronous);
connect(mWallet, SIGNAL(walletOpened(bool)), SLOT(walletOpened(bool)));
#else
#endif
}
void OwnCloudSync::setEnabled( bool enabled)
@ -925,6 +943,7 @@ void OwnCloudSync::readConfigFromDB()
if(query.next()) {
mHost = query.value(0).toString();
mUsername = query.value(1).toString();
mReadPassword = true;
mPassword = query.value(2).toString();
mLocalDirectory = query.value(3).toString();
mRemoteDirectory = query.value(6).toString();
@ -964,20 +983,24 @@ void OwnCloudSync::addFilter(QString filter)
void OwnCloudSync::saveConfigToDB()
{
bool savePw = true;
#ifdef Q_OS_LINUX
savePw = false;
#endif
QSqlQuery query(QSqlDatabase::database(mAccountName));
query.exec("SELECT * from config;");
if(query.next()) { // Update
QString update = QString("UPDATE config SET host='%1',username='%2',"
"password='%3',localdir='%4',updatetime='%5',"
"enabled='%6',remotedir='%7';").arg(mHost)
.arg(mUsername).arg(mPassword).arg(mLocalDirectory)
.arg(mUsername).arg(savePw?mPassword:"").arg(mLocalDirectory)
.arg(mUpdateTime).arg(mIsEnabled?"yes":"no")
.arg(mRemoteDirectory);
query.exec(update);
} else { // Insert
QString add = QString("INSERT INTO config values('%1','%2',"
"'%3','%4','%5','%6','%7');").arg(mHost)
.arg(mUsername).arg(mPassword).arg(mLocalDirectory)
.arg(mUsername).arg(savePw?mPassword:"").arg(mLocalDirectory)
.arg(mUpdateTime).arg(mIsEnabled?"yes":"no")
.arg(mRemoteDirectory);
query.exec(add);
@ -1102,6 +1125,9 @@ void OwnCloudSync::saveDBToFile()
} else {
qDebug() << "Failed to save DB to file!";
}
#ifdef Q_OS_LINUX
saveWalletPassword();
#endif
}
void OwnCloudSync::loadDBFromFile()
@ -1364,3 +1390,42 @@ bool OwnCloudSync::needsSync()
}
return mNeedsSync;
}
#ifdef Q_OS_LINUX
void OwnCloudSync::requestPassword()
{
QMap<QString,QString> map;
mWallet->readMap(mAccountName,map);
if(map.size()) {
mPassword = map[mAccountName];
initialize();
}
}
void OwnCloudSync::walletOpened(bool ok)
{
if( (ok && (mWallet->hasFolder("owncloud_sync"))
|| mWallet->createFolder("owncloud_sync"))
&& mWallet->setFolder("owncloud_sync")) {
emit toLog("Wallet opened!");
qDebug() << "Wallet opened!" <<
KWallet::Wallet::FormDataFolder() ;
if (mReadPassword ) {
requestPassword();
}
} else {
qDebug() << "Error opening wallet";
}
}
void OwnCloudSync::saveWalletPassword()
{
QMap<QString,QString> map;
map[mAccountName] = mPassword;
if( mWallet )
mWallet->writeMap(mAccountName,map);
}
#endif

View file

@ -30,13 +30,16 @@
class QTimer;
class QFileSystemWatcher;
#ifdef Q_OS_LINUX
#include <kde4/kwallet.h>
#endif
class OwnCloudSync : public QObject
{
Q_OBJECT
public:
explicit OwnCloudSync(QString name);
explicit OwnCloudSync(QString name, WId id);
~OwnCloudSync();
void initialize(QString host, QString user, QString pass, QString remote,
QString local, qint64 time);
@ -87,6 +90,7 @@ public:
void deleteAccount();
private:
WId mWinId;
QWebDAV *mWebdav;
bool mIsEnabled;
bool mAllowedToSync;
@ -136,6 +140,12 @@ private:
QString mAccountName;
SyncPosition mLastSyncAborted;
SyncPosition mSyncPosition;
#ifdef Q_OS_LINUX
KWallet::Wallet *mWallet;
void saveWalletPassword();
void requestPassword();
#endif
bool mReadPassword;
void updateDBLocalFile(QString name,qint64 size,qint64 last,QString type);
void scanLocalDirectory(QString dirPath);
@ -191,6 +201,10 @@ public slots:
void saveDBToFile();
void loadDBFromFile();
void requestTimedout();
//#ifdef Q_OS_LINUX
void walletOpened(bool);
//#endif
};
#endif // OWNCLOUDSYNC_H

View file

@ -201,7 +201,7 @@ void SyncWindow::systemTrayActivated(QSystemTrayIcon::ActivationReason reason)
OwnCloudSync* SyncWindow::addAccount(QString name)
{
OwnCloudSync *account = new OwnCloudSync(name);
OwnCloudSync *account = new OwnCloudSync(name,winId());
mAccounts.append(account);
mAccountNames.append(name);

View file

@ -6,6 +6,13 @@
QT += core gui network xml sql
unix:!macx:!symbian: {
QT += dbus
HEADERS +=
SOURCES +=
INCLUDEPATH += /usr/include/kde4
}
TARGET = owncloud_sync
TEMPLATE = app
@ -59,7 +66,4 @@ OTHER_FILES += \
COPYING-README \
COPYING-GPL
unix:!macx:!symbian: LIBS += -L/usr/lib64/kde4/devel -lkparts -lkdeui -lkdecore