diff options
| author | Felix Ernst <[email protected]> | 2024-07-13 15:37:31 +0000 |
|---|---|---|
| committer | Felix Ernst <[email protected]> | 2024-07-13 15:37:31 +0000 |
| commit | 19fdc5b67990bb75009a1fc511619bd449d559d7 (patch) | |
| tree | 846b3d1392fc94ed1e9530458bad046c706be1ad /src/admin/workerintegration.cpp | |
| parent | 8271df42bda9284012ebc05f7edbd0689c07f6a1 (diff) | |
Stop acting as admin when the authorization expires
Previously, the authorization just silently expired without any
visible change. The surprise only came when the user tried to do
any action, which immediately would show a password prompt. We
don't want users to randomly type passwords into password
prompts unexpectedly showing up. This commit avoids that.
With this change, the view container visibly de-escalates
privileges and shows a message explaining what happened.
A method was implemented in kio-admin to make this possible. See:
https://commits.kde.org/kio-admin/a2da29289d12ef845e2c1da17ed04c59f1c47762
This commit also improves some logic around the responsibility
of hiding bars and activating view containers.
This is also part of my project funded by the European Commission.
Diffstat (limited to 'src/admin/workerintegration.cpp')
| -rw-r--r-- | src/admin/workerintegration.cpp | 57 |
1 files changed, 30 insertions, 27 deletions
diff --git a/src/admin/workerintegration.cpp b/src/admin/workerintegration.cpp index 038c52094..0b95ec782 100644 --- a/src/admin/workerintegration.cpp +++ b/src/admin/workerintegration.cpp @@ -134,43 +134,41 @@ void WorkerIntegration::createActAsAdminAction(KActionCollection *actionCollecti } } -void WorkerIntegration::exitAdminMode() -{ - if (instance->m_actAsAdminAction->isChecked()) { - instance->m_actAsAdminAction->trigger(); - } -} - void WorkerIntegration::toggleActAsAdmin() { auto dolphinMainWindow = static_cast<DolphinMainWindow *>(parent()); QUrl url = dolphinMainWindow->activeViewContainer()->urlNavigator()->locationUrl(); - if (url.scheme() == QStringLiteral("file")) { - bool risksAccepted = !KMessageBox::shouldBeShownContinue(warningDontShowAgainName); - if (!risksAccepted) { - KMessageDialog warningDialog{KMessageDialog::QuestionTwoActions, warningMessage(), dolphinMainWindow}; - warningDialog.setCaption(i18nc("@title:window", "Risks of Acting as an Administrator")); - warningDialog.setIcon(QIcon::fromTheme(QStringLiteral("security-low"))); - warningDialog.setButtons(KGuiItem{i18nc("@action:button", "I Understand and Accept These Risks"), QStringLiteral("data-warning")}, - KStandardGuiItem::cancel()); - warningDialog.setDontAskAgainText(i18nc("@option:check", "Do not warn me about these risks again")); + if (url.scheme() == QStringLiteral("admin")) { + url.setScheme(QStringLiteral("file")); + dolphinMainWindow->changeUrl(url); + return; + } else if (url.scheme() != QStringLiteral("file")) { + return; + } - risksAccepted = warningDialog.exec() != 4 /* Cancel */; - if (warningDialog.isDontAskAgainChecked()) { - KMessageBox::saveDontShowAgainContinue(warningDontShowAgainName); - } + bool risksAccepted = !KMessageBox::shouldBeShownContinue(warningDontShowAgainName); - if (!risksAccepted) { - updateActAsAdminAction(); // Uncheck the action - return; - } + if (!risksAccepted) { + KMessageDialog warningDialog{KMessageDialog::QuestionTwoActions, warningMessage(), dolphinMainWindow}; + warningDialog.setCaption(i18nc("@title:window", "Risks of Acting as an Administrator")); + warningDialog.setIcon(QIcon::fromTheme(QStringLiteral("security-low"))); + warningDialog.setButtons(KGuiItem{i18nc("@action:button", "I Understand and Accept These Risks"), QStringLiteral("data-warning")}, + KStandardGuiItem::cancel()); + warningDialog.setDontAskAgainText(i18nc("@option:check", "Do not warn me about these risks again")); + + risksAccepted = warningDialog.exec() != 4 /* Cancel */; + if (warningDialog.isDontAskAgainChecked()) { + KMessageBox::saveDontShowAgainContinue(warningDontShowAgainName); } - url.setScheme(QStringLiteral("admin")); - } else if (url.scheme() == QStringLiteral("admin")) { - url.setScheme(QStringLiteral("file")); + if (!risksAccepted) { + updateActAsAdminAction(); // Uncheck the action + return; + } } + + url.setScheme(QStringLiteral("admin")); dolphinMainWindow->changeUrl(url); } @@ -189,3 +187,8 @@ void WorkerIntegration::updateActAsAdminAction() } } } + +QAction *WorkerIntegration::actAsAdminAction() +{ + return instance->m_actAsAdminAction; +} |
