mirror of
https://github.com/keepassxreboot/keepassxc.git
synced 2024-10-01 01:26:01 -04:00
Add action item for removing a passkey from entry (#10777)
This commit is contained in:
parent
9aa040604a
commit
5de669eb7b
@ -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>
|
||||
@ -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>
|
||||
@ -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>
|
||||
|
@ -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">
|
||||
|
@ -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
|
||||
@ -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()) {
|
||||
|
@ -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
|
||||
@ -120,8 +120,10 @@ public:
|
||||
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;
|
||||
|
@ -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
|
||||
@ -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;
|
||||
|
@ -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
|
||||
@ -34,6 +34,7 @@ public:
|
||||
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;
|
||||
|
@ -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
|
||||
@ -563,6 +563,11 @@ void DatabaseTabWidget::importPasskeyToEntry()
|
||||
{
|
||||
currentDatabaseWidget()->showImportPasskeyDialog(true);
|
||||
}
|
||||
|
||||
void DatabaseTabWidget::removePasskeyFromEntry()
|
||||
{
|
||||
currentDatabaseWidget()->removePasskeyFromEntry();
|
||||
}
|
||||
#endif
|
||||
|
||||
bool DatabaseTabWidget::isModified(int index) const
|
||||
|
@ -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
|
||||
@ -87,6 +87,7 @@ public slots:
|
||||
void showPasskeys();
|
||||
void importPasskey();
|
||||
void importPasskeyToEntry();
|
||||
void removePasskeyFromEntry();
|
||||
#endif
|
||||
void performGlobalAutoType(const QString& search);
|
||||
void performBrowserUnlock();
|
||||
|
@ -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)
|
||||
@ -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();
|
||||
|
@ -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
|
||||
@ -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);
|
||||
|
@ -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
|
||||
@ -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);
|
||||
@ -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(
|
||||
@ -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()));
|
||||
@ -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 =
|
||||
@ -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);
|
||||
|
@ -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"/>
|
||||
@ -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>
|
||||
|
@ -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>
|
||||
|
Loading…
Reference in New Issue
Block a user