Skip to content

Commit

Permalink
Add action item for removing a passkey from entry (keepassxreboot#10777)
Browse files Browse the repository at this point in the history
  • Loading branch information
varjolintu authored and pull[bot] committed May 28, 2024
1 parent 4ee7559 commit ba4d44f
Show file tree
Hide file tree
Showing 13 changed files with 94 additions and 11 deletions.
16 changes: 16 additions & 0 deletions share/translations/keepassxc_en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2505,6 +2505,14 @@ Disable safe saves and try again?</source>
<comment>Database tab name modifier</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Remove passkey from entry</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Do you want to remove the passkey from this entry?</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>EditEntryWidget</name>
Expand Down Expand Up @@ -3547,6 +3555,10 @@ This may cause the affected plugins to malfunction.</source>
<source>%1 - Clone</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Passkey</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>EntryAttachments</name>
Expand Down Expand Up @@ -5867,6 +5879,10 @@ We recommend you use the AppImage available on our downloads page.</source>
<source>Toggle Allow Screen Capture</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Remove Passkey From Entry</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ManageDatabase</name>
Expand Down
2 changes: 1 addition & 1 deletion src/browser/BrowserSettingsWidget.ui
Original file line number Diff line number Diff line change
Expand Up @@ -497,7 +497,7 @@
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QLabel" name="customBrowserLabel_2">
<property name="sizePolicy">
Expand Down
8 changes: 7 additions & 1 deletion src/core/Entry.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2023 KeePassXC Team <team@keepassxc.org>
* Copyright (C) 2024 KeePassXC Team <team@keepassxc.org>
* Copyright (C) 2010 Felix Geyer <debfx@fobos.de>
*
* This program is free software: you can redistribute it and/or modify
Expand Down Expand Up @@ -551,6 +551,12 @@ bool Entry::hasPasskey() const
return m_attributes->hasPasskey();
}

void Entry::removePasskey()
{
m_attributes->removePasskeyAttributes();
removeTag(tr("Passkey"));
}

QString Entry::totp() const
{
if (hasTotp()) {
Expand Down
6 changes: 4 additions & 2 deletions src/core/Entry.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2023 KeePassXC Team <team@keepassxc.org>
* Copyright (C) 2024 KeePassXC Team <team@keepassxc.org>
* Copyright (C) 2010 Felix Geyer <debfx@fobos.de>
*
* This program is free software: you can redistribute it and/or modify
Expand Down Expand Up @@ -120,8 +120,10 @@ class Entry : public ModifiableObject
bool excludeFromReports() const;
void setExcludeFromReports(bool state);

bool hasTotp() const;
bool hasPasskey() const;
void removePasskey();

bool hasTotp() const;
bool isExpired() const;
bool willExpireInDays(int days) const;
bool isRecycled() const;
Expand Down
12 changes: 11 additions & 1 deletion src/core/EntryAttributes.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2023 KeePassXC Team <team@keepassxc.org>
* Copyright (C) 2024 KeePassXC Team <team@keepassxc.org>
* Copyright (C) 2012 Felix Geyer <debfx@fobos.de>
*
* This program is free software: you can redistribute it and/or modify
Expand Down Expand Up @@ -65,6 +65,16 @@ bool EntryAttributes::hasPasskey() const
return false;
}

void EntryAttributes::removePasskeyAttributes()
{
const auto keyList = keys();
for (const auto& key : keyList) {
if (isPasskeyAttribute(key)) {
remove(key);
}
}
}

QList<QString> EntryAttributes::customKeys() const
{
QList<QString> customKeys;
Expand Down
3 changes: 2 additions & 1 deletion src/core/EntryAttributes.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2023 KeePassXC Team <team@keepassxc.org>
* Copyright (C) 2024 KeePassXC Team <team@keepassxc.org>
* Copyright (C) 2012 Felix Geyer <debfx@fobos.de>
*
* This program is free software: you can redistribute it and/or modify
Expand Down Expand Up @@ -34,6 +34,7 @@ class EntryAttributes : public ModifiableObject
QList<QString> keys() const;
bool hasKey(const QString& key) const;
bool hasPasskey() const;
void removePasskeyAttributes();
QList<QString> customKeys() const;
QString value(const QString& key) const;
QList<QString> values(const QList<QString>& keys) const;
Expand Down
7 changes: 6 additions & 1 deletion src/gui/DatabaseTabWidget.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2023 KeePassXC Team <team@keepassxc.org>
* Copyright (C) 2024 KeePassXC Team <team@keepassxc.org>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Expand Down Expand Up @@ -563,6 +563,11 @@ void DatabaseTabWidget::importPasskeyToEntry()
{
currentDatabaseWidget()->showImportPasskeyDialog(true);
}

void DatabaseTabWidget::removePasskeyFromEntry()
{
currentDatabaseWidget()->removePasskeyFromEntry();
}
#endif

bool DatabaseTabWidget::isModified(int index) const
Expand Down
3 changes: 2 additions & 1 deletion src/gui/DatabaseTabWidget.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2023 KeePassXC Team <team@keepassxc.org>
* Copyright (C) 2024 KeePassXC Team <team@keepassxc.org>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Expand Down Expand Up @@ -87,6 +87,7 @@ public slots:
void showPasskeys();
void importPasskey();
void importPasskeyToEntry();
void removePasskeyFromEntry();
#endif
void performGlobalAutoType(const QString& search);
void performBrowserUnlock();
Expand Down
24 changes: 24 additions & 0 deletions src/gui/DatabaseWidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1428,6 +1428,22 @@ void DatabaseWidget::showImportPasskeyDialog(bool isEntry)
passkeyImporter.importPasskey(m_db);
}
}

void DatabaseWidget::removePasskeyFromEntry()
{
auto currentEntry = currentSelectedEntry();
if (!currentEntry) {
return;
}

auto result = MessageBox::question(this,
tr("Remove passkey from entry"),
tr("Do you want to remove the passkey from this entry?"),
MessageBox::Remove | MessageBox::Cancel);
if (result == MessageBox::Remove) {
currentEntry->removePasskey();
}
}
#endif

void DatabaseWidget::performUnlockDatabase(const QString& password, const QString& keyfile)
Expand Down Expand Up @@ -2020,6 +2036,14 @@ bool DatabaseWidget::currentEntryHasSshKey()
}
#endif

#ifdef WITH_XC_BROWSER_PASSKEYS
bool DatabaseWidget::currentEntryHasPasskey()
{
auto currentEntry = m_entryView->currentEntry();
return currentEntry && currentEntry->hasPasskey();
}
#endif

bool DatabaseWidget::currentEntryHasNotes()
{
auto currentEntry = currentSelectedEntry();
Expand Down
4 changes: 3 additions & 1 deletion src/gui/DatabaseWidget.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2023 KeePassXC Team <team@keepassxc.org>
* Copyright (C) 2024 KeePassXC Team <team@keepassxc.org>
* Copyright (C) 2010 Felix Geyer <debfx@fobos.de>
*
* This program is free software: you can redistribute it and/or modify
Expand Down Expand Up @@ -212,6 +212,8 @@ public slots:
#ifdef WITH_XC_BROWSER_PASSKEYS
void switchToPasskeys();
void showImportPasskeyDialog(bool isEntry = false);
void removePasskeyFromEntry();
bool currentEntryHasPasskey();
#endif
void switchToOpenDatabase();
void switchToOpenDatabase(const QString& filePath);
Expand Down
9 changes: 8 additions & 1 deletion src/gui/MainWindow.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2023 KeePassXC Team <team@keepassxc.org>
* Copyright (C) 2024 KeePassXC Team <team@keepassxc.org>
* Copyright (C) 2010 Felix Geyer <debfx@fobos.de>
*
* This program is free software: you can redistribute it and/or modify
Expand Down Expand Up @@ -139,6 +139,7 @@ MainWindow::MainWindow()
m_entryContextMenu->addSeparator();
#ifdef WITH_XC_BROWSER_PASSKEYS
m_entryContextMenu->addAction(m_ui->actionEntryImportPasskey);
m_entryContextMenu->addAction(m_ui->actionEntryRemovePasskey);
m_entryContextMenu->addSeparator();
#endif
m_entryContextMenu->addAction(m_ui->actionEntryEdit);
Expand Down Expand Up @@ -412,6 +413,7 @@ MainWindow::MainWindow()
m_ui->actionPasskeys->setIcon(icons()->icon("passkey"));
m_ui->actionImportPasskey->setIcon(icons()->icon("document-import"));
m_ui->actionEntryImportPasskey->setIcon(icons()->icon("document-import"));
m_ui->actionEntryRemovePasskey->setIcon(icons()->icon("document-close"));
#endif

m_actionMultiplexer.connect(
Expand Down Expand Up @@ -463,6 +465,7 @@ MainWindow::MainWindow()
connect(m_ui->actionPasskeys, SIGNAL(triggered()), m_ui->tabWidget, SLOT(showPasskeys()));
connect(m_ui->actionImportPasskey, SIGNAL(triggered()), m_ui->tabWidget, SLOT(importPasskey()));
connect(m_ui->actionEntryImportPasskey, SIGNAL(triggered()), m_ui->tabWidget, SLOT(importPasskeyToEntry()));
connect(m_ui->actionEntryRemovePasskey, SIGNAL(triggered()), m_ui->tabWidget, SLOT(removePasskeyFromEntry()));
#endif
connect(m_ui->actionImport, SIGNAL(triggered()), m_ui->tabWidget, SLOT(importFile()));
connect(m_ui->actionExportCsv, SIGNAL(triggered()), m_ui->tabWidget, SLOT(exportToCsv()));
Expand Down Expand Up @@ -956,9 +959,11 @@ void MainWindow::setMenuActionState(DatabaseWidget::Mode mode)
m_ui->actionExportXML->setEnabled(true);
m_ui->actionDatabaseMerge->setEnabled(m_ui->tabWidget->currentIndex() != -1);
#ifdef WITH_XC_BROWSER_PASSKEYS
bool singleEntryHasPasskey = singleEntrySelected && dbWidget->currentEntryHasPasskey();
m_ui->actionPasskeys->setEnabled(true);
m_ui->actionImportPasskey->setEnabled(true);
m_ui->actionEntryImportPasskey->setEnabled(singleEntrySelected);
m_ui->actionEntryRemovePasskey->setEnabled(singleEntryHasPasskey);
#endif
#ifdef WITH_XC_SSHAGENT
bool singleEntryHasSshKey =
Expand Down Expand Up @@ -1030,10 +1035,12 @@ void MainWindow::setMenuActionState(DatabaseWidget::Mode mode)
m_ui->actionPasskeys->setEnabled(false);
m_ui->actionImportPasskey->setEnabled(false);
m_ui->actionEntryImportPasskey->setEnabled(false);
m_ui->actionEntryRemovePasskey->setEnabled(false);
#else
m_ui->actionPasskeys->setVisible(false);
m_ui->actionImportPasskey->setVisible(false);
m_ui->actionEntryImportPasskey->setVisible(false);
m_ui->actionEntryRemovePasskey->setVisible(false);
#endif

m_searchWidgetAction->setEnabled(false);
Expand Down
9 changes: 9 additions & 0 deletions src/gui/MainWindow.ui
Original file line number Diff line number Diff line change
Expand Up @@ -335,6 +335,7 @@
<addaction name="actionEntryAutoType"/>
<addaction name="separator"/>
<addaction name="actionEntryImportPasskey"/>
<addaction name="actionEntryRemovePasskey"/>
<addaction name="separator"/>
<addaction name="actionEntryOpenUrl"/>
<addaction name="actionEntryDownloadIcon"/>
Expand Down Expand Up @@ -775,6 +776,14 @@
<string>Import Passkey</string>
</property>
</action>
<action name="actionEntryRemovePasskey">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Remove Passkey From Entry</string>
</property>
</action>
<action name="actionEntryAutoTypeUsername">
<property name="enabled">
<bool>false</bool>
Expand Down
2 changes: 1 addition & 1 deletion src/gui/SearchHelpWidget.ui
Original file line number Diff line number Diff line change
Expand Up @@ -388,7 +388,7 @@
</widget>
</item>
<item>
<widget class="QLabel" name="label_17">
<widget class="QLabel" name="label_26">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
Expand Down

0 comments on commit ba4d44f

Please sign in to comment.