mirror of
https://github.com/nextcloud/desktop.git
synced 2024-11-21 20:45:51 +03:00
Delete E2EE files/folders for accounts that have had E2EE disabled
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
This commit is contained in:
parent
cc6bdc9bd5
commit
b57b35e7a4
5 changed files with 76 additions and 0 deletions
|
@ -1614,6 +1614,11 @@ void AccountSettings::resetE2eEncryption()
|
|||
_ui->encryptionMessage->setIcon({});
|
||||
initializeE2eEncryption();
|
||||
checkClientSideEncryptionState();
|
||||
|
||||
const auto account = _accountState->account();
|
||||
if (account->e2e()->_mnemonic.isEmpty()) {
|
||||
FolderMan::instance()->removeE2eFiles(account);
|
||||
}
|
||||
}
|
||||
|
||||
void AccountSettings::removeActionFromEncryptionMessage(const QString &actionId)
|
||||
|
|
|
@ -1332,6 +1332,60 @@ void Folder::slotAboutToRemoveAllFiles(SyncFileItem::Direction dir, std::functio
|
|||
msgBox->open();
|
||||
}
|
||||
|
||||
void Folder::removeLocalE2eFiles()
|
||||
{
|
||||
qCDebug(lcFolder) << "Removing local E2EE files";
|
||||
QByteArrayList e2eFiles;
|
||||
const auto couldGetFiles = _journal.getFilesBelowPath("", [&e2eFiles](const SyncJournalFileRecord &rec) {
|
||||
if (rec._isE2eEncrypted) {
|
||||
e2eFiles.append(rec._path);
|
||||
}
|
||||
});
|
||||
|
||||
if (!couldGetFiles) {
|
||||
qCWarning(lcFolder) << "Could not fetch E2EE files to delete in this folder:" << path();
|
||||
return;
|
||||
} else if (e2eFiles.isEmpty()) {
|
||||
qCWarning(lcFolder) << "No E2EE files found at path" << path();
|
||||
return;
|
||||
}
|
||||
|
||||
const auto currentSyncPaused = syncPaused();
|
||||
setSyncPaused(true);
|
||||
|
||||
qCDebug(lcFolder) << "About to remove: " << e2eFiles;
|
||||
|
||||
for (const auto &e2eFilePath : qAsConst(e2eFiles)) {
|
||||
if (!_journal.deleteFileRecord(e2eFilePath, true)) {
|
||||
qCWarning(lcFolder) << "Failed to delete file record from local DB" << e2eFilePath
|
||||
<< "it might have already been deleted.";
|
||||
continue;
|
||||
}
|
||||
|
||||
qCDebug(lcFolder) << "Removing local copy of" << e2eFilePath;
|
||||
|
||||
const auto fullPath = QString(path() + e2eFilePath);
|
||||
const QFileInfo pathInfo(fullPath);
|
||||
|
||||
if (pathInfo.isDir() && pathInfo.exists()) {
|
||||
QDir dir(fullPath);
|
||||
if (!dir.removeRecursively()) {
|
||||
qCWarning(lcFolder) << "Unable to remove directory and contents at:" << fullPath;
|
||||
}
|
||||
} else if (pathInfo.exists()) {
|
||||
if (!QFile::remove(fullPath)) {
|
||||
qCWarning(lcFolder) << "Unable to delete file:" << fullPath;
|
||||
}
|
||||
} else {
|
||||
qCWarning(lcFolder) << "Unable to delete:" << fullPath << "as it does not exist!";
|
||||
}
|
||||
}
|
||||
|
||||
setSyncPaused(currentSyncPaused);
|
||||
_journal.forceRemoteDiscoveryNextSync();
|
||||
scheduleThisFolderSoon();
|
||||
}
|
||||
|
||||
QString Folder::fileFromLocalPath(const QString &localPath) const
|
||||
{
|
||||
return localPath.mid(cleanPath().length() + 1);
|
||||
|
|
|
@ -370,6 +370,11 @@ public slots:
|
|||
|
||||
void setSilenceErrorsUntilNextSync(bool silenceErrors);
|
||||
|
||||
/** Deletes local copies of E2EE files.
|
||||
* Intended for clean-up after disabling E2EE for an account.
|
||||
*/
|
||||
void removeLocalE2eFiles();
|
||||
|
||||
private slots:
|
||||
void slotSyncStarted();
|
||||
void slotSyncFinished(bool);
|
||||
|
|
|
@ -658,6 +658,16 @@ void FolderMan::forceSyncForFolder(Folder *folder)
|
|||
scheduleFolderNext(folder);
|
||||
}
|
||||
|
||||
void FolderMan::removeE2eFiles(const AccountPtr &account) const
|
||||
{
|
||||
Q_ASSERT(account->e2e()->_mnemonic.isEmpty());
|
||||
for (const auto folder : map()) {
|
||||
if(folder->accountState()->account()->id() == account->id()) {
|
||||
folder->removeLocalE2eFiles();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void FolderMan::slotScheduleAppRestart()
|
||||
{
|
||||
_appRestartRequired = true;
|
||||
|
|
|
@ -271,6 +271,8 @@ public slots:
|
|||
|
||||
void forceSyncForFolder(OCC::Folder *folder);
|
||||
|
||||
void removeE2eFiles(const AccountPtr &account) const;
|
||||
|
||||
private slots:
|
||||
void slotFolderSyncPaused(OCC::Folder *, bool paused);
|
||||
void slotFolderCanSyncChanged();
|
||||
|
|
Loading…
Reference in a new issue