mirror of
https://github.com/nextcloud/desktop.git
synced 2024-10-24 21:35:47 +03:00
Implemented KWallet password storage for Linux. On Linux they are no
longer saved to the database file.
This commit is contained in:
parent
ed4fc09592
commit
929b6afa1a
4 changed files with 92 additions and 9 deletions
|
@ -34,13 +34,18 @@
|
||||||
#include <QTableWidgetItem>
|
#include <QTableWidgetItem>
|
||||||
#include <QComboBox>
|
#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;
|
mBusy = false;
|
||||||
|
|
||||||
// Set the pointers so we can delete them without worrying :)
|
// Set the pointers so we can delete them without worrying :)
|
||||||
mSyncTimer = 0;
|
mSyncTimer = 0;
|
||||||
mFileWatcher = 0;
|
mFileWatcher = 0;
|
||||||
|
mWallet = 0;
|
||||||
|
|
||||||
mHardStop = false;
|
mHardStop = false;
|
||||||
mIsFirstRun = true;
|
mIsFirstRun = true;
|
||||||
|
@ -104,7 +109,11 @@ OwnCloudSync::OwnCloudSync(QString name) : mAccountName(name)
|
||||||
readConfigFromDB();
|
readConfigFromDB();
|
||||||
//ui->buttonSave->setDisabled(true);
|
//ui->buttonSave->setDisabled(true);
|
||||||
qDebug() << "Checking configuration!";
|
qDebug() << "Checking configuration!";
|
||||||
|
#ifdef Q_OS_LINUX
|
||||||
|
// Wait until the password is set
|
||||||
|
#else
|
||||||
initialize();
|
initialize();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
createDataBase(); // Create the database in memory
|
createDataBase(); // Create the database in memory
|
||||||
|
@ -114,6 +123,15 @@ OwnCloudSync::OwnCloudSync(QString name) : mAccountName(name)
|
||||||
connect(mSaveDBTimer, SIGNAL(timeout()), this, SLOT(saveDBToFile()));
|
connect(mSaveDBTimer, SIGNAL(timeout()), this, SLOT(saveDBToFile()));
|
||||||
mSaveDBTimer->start(370000);
|
mSaveDBTimer->start(370000);
|
||||||
updateStatus();
|
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)
|
void OwnCloudSync::setEnabled( bool enabled)
|
||||||
|
@ -925,6 +943,7 @@ void OwnCloudSync::readConfigFromDB()
|
||||||
if(query.next()) {
|
if(query.next()) {
|
||||||
mHost = query.value(0).toString();
|
mHost = query.value(0).toString();
|
||||||
mUsername = query.value(1).toString();
|
mUsername = query.value(1).toString();
|
||||||
|
mReadPassword = true;
|
||||||
mPassword = query.value(2).toString();
|
mPassword = query.value(2).toString();
|
||||||
mLocalDirectory = query.value(3).toString();
|
mLocalDirectory = query.value(3).toString();
|
||||||
mRemoteDirectory = query.value(6).toString();
|
mRemoteDirectory = query.value(6).toString();
|
||||||
|
@ -964,20 +983,24 @@ void OwnCloudSync::addFilter(QString filter)
|
||||||
|
|
||||||
void OwnCloudSync::saveConfigToDB()
|
void OwnCloudSync::saveConfigToDB()
|
||||||
{
|
{
|
||||||
|
bool savePw = true;
|
||||||
|
#ifdef Q_OS_LINUX
|
||||||
|
savePw = false;
|
||||||
|
#endif
|
||||||
QSqlQuery query(QSqlDatabase::database(mAccountName));
|
QSqlQuery query(QSqlDatabase::database(mAccountName));
|
||||||
query.exec("SELECT * from config;");
|
query.exec("SELECT * from config;");
|
||||||
if(query.next()) { // Update
|
if(query.next()) { // Update
|
||||||
QString update = QString("UPDATE config SET host='%1',username='%2',"
|
QString update = QString("UPDATE config SET host='%1',username='%2',"
|
||||||
"password='%3',localdir='%4',updatetime='%5',"
|
"password='%3',localdir='%4',updatetime='%5',"
|
||||||
"enabled='%6',remotedir='%7';").arg(mHost)
|
"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(mUpdateTime).arg(mIsEnabled?"yes":"no")
|
||||||
.arg(mRemoteDirectory);
|
.arg(mRemoteDirectory);
|
||||||
query.exec(update);
|
query.exec(update);
|
||||||
} else { // Insert
|
} else { // Insert
|
||||||
QString add = QString("INSERT INTO config values('%1','%2',"
|
QString add = QString("INSERT INTO config values('%1','%2',"
|
||||||
"'%3','%4','%5','%6','%7');").arg(mHost)
|
"'%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(mUpdateTime).arg(mIsEnabled?"yes":"no")
|
||||||
.arg(mRemoteDirectory);
|
.arg(mRemoteDirectory);
|
||||||
query.exec(add);
|
query.exec(add);
|
||||||
|
@ -1102,6 +1125,9 @@ void OwnCloudSync::saveDBToFile()
|
||||||
} else {
|
} else {
|
||||||
qDebug() << "Failed to save DB to file!";
|
qDebug() << "Failed to save DB to file!";
|
||||||
}
|
}
|
||||||
|
#ifdef Q_OS_LINUX
|
||||||
|
saveWalletPassword();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void OwnCloudSync::loadDBFromFile()
|
void OwnCloudSync::loadDBFromFile()
|
||||||
|
@ -1364,3 +1390,42 @@ bool OwnCloudSync::needsSync()
|
||||||
}
|
}
|
||||||
return mNeedsSync;
|
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
|
||||||
|
|
||||||
|
|
|
@ -30,13 +30,16 @@
|
||||||
|
|
||||||
class QTimer;
|
class QTimer;
|
||||||
class QFileSystemWatcher;
|
class QFileSystemWatcher;
|
||||||
|
#ifdef Q_OS_LINUX
|
||||||
|
#include <kde4/kwallet.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
class OwnCloudSync : public QObject
|
class OwnCloudSync : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit OwnCloudSync(QString name);
|
explicit OwnCloudSync(QString name, WId id);
|
||||||
~OwnCloudSync();
|
~OwnCloudSync();
|
||||||
void initialize(QString host, QString user, QString pass, QString remote,
|
void initialize(QString host, QString user, QString pass, QString remote,
|
||||||
QString local, qint64 time);
|
QString local, qint64 time);
|
||||||
|
@ -87,6 +90,7 @@ public:
|
||||||
void deleteAccount();
|
void deleteAccount();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
WId mWinId;
|
||||||
QWebDAV *mWebdav;
|
QWebDAV *mWebdav;
|
||||||
bool mIsEnabled;
|
bool mIsEnabled;
|
||||||
bool mAllowedToSync;
|
bool mAllowedToSync;
|
||||||
|
@ -136,6 +140,12 @@ private:
|
||||||
QString mAccountName;
|
QString mAccountName;
|
||||||
SyncPosition mLastSyncAborted;
|
SyncPosition mLastSyncAborted;
|
||||||
SyncPosition mSyncPosition;
|
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 updateDBLocalFile(QString name,qint64 size,qint64 last,QString type);
|
||||||
void scanLocalDirectory(QString dirPath);
|
void scanLocalDirectory(QString dirPath);
|
||||||
|
@ -191,6 +201,10 @@ public slots:
|
||||||
void saveDBToFile();
|
void saveDBToFile();
|
||||||
void loadDBFromFile();
|
void loadDBFromFile();
|
||||||
void requestTimedout();
|
void requestTimedout();
|
||||||
|
|
||||||
|
//#ifdef Q_OS_LINUX
|
||||||
|
void walletOpened(bool);
|
||||||
|
//#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // OWNCLOUDSYNC_H
|
#endif // OWNCLOUDSYNC_H
|
||||||
|
|
|
@ -201,7 +201,7 @@ void SyncWindow::systemTrayActivated(QSystemTrayIcon::ActivationReason reason)
|
||||||
|
|
||||||
OwnCloudSync* SyncWindow::addAccount(QString name)
|
OwnCloudSync* SyncWindow::addAccount(QString name)
|
||||||
{
|
{
|
||||||
OwnCloudSync *account = new OwnCloudSync(name);
|
OwnCloudSync *account = new OwnCloudSync(name,winId());
|
||||||
mAccounts.append(account);
|
mAccounts.append(account);
|
||||||
mAccountNames.append(name);
|
mAccountNames.append(name);
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,13 @@
|
||||||
|
|
||||||
QT += core gui network xml sql
|
QT += core gui network xml sql
|
||||||
|
|
||||||
|
unix:!macx:!symbian: {
|
||||||
|
QT += dbus
|
||||||
|
HEADERS +=
|
||||||
|
SOURCES +=
|
||||||
|
INCLUDEPATH += /usr/include/kde4
|
||||||
|
}
|
||||||
|
|
||||||
TARGET = owncloud_sync
|
TARGET = owncloud_sync
|
||||||
TEMPLATE = app
|
TEMPLATE = app
|
||||||
|
|
||||||
|
@ -59,7 +66,4 @@ OTHER_FILES += \
|
||||||
COPYING-README \
|
COPYING-README \
|
||||||
COPYING-GPL
|
COPYING-GPL
|
||||||
|
|
||||||
|
unix:!macx:!symbian: LIBS += -L/usr/lib64/kde4/devel -lkparts -lkdeui -lkdecore
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue