diff options
author | Saturneric <[email protected]> | 2021-12-13 10:16:54 +0000 |
---|---|---|
committer | Saturneric <[email protected]> | 2021-12-13 10:16:54 +0000 |
commit | da0e403a6c6ff5ab201c239ea0b6d3ce45fc7c4d (patch) | |
tree | 8e7029d8dc13b54f16cefe50ac070fe32941a924 /src/ui/KeyMgmt.cpp | |
parent | Fixed & Modified & Added. (diff) | |
download | GpgFrontend-da0e403a6c6ff5ab201c239ea0b6d3ce45fc7c4d.tar.gz GpgFrontend-da0e403a6c6ff5ab201c239ea0b6d3ce45fc7c4d.zip |
Update Translate & Added.
1. Added Export OpenSSH Format
2. Added Export Short Secret Key
3. Improve UI
Diffstat (limited to 'src/ui/KeyMgmt.cpp')
-rwxr-xr-x | src/ui/KeyMgmt.cpp | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/ui/KeyMgmt.cpp b/src/ui/KeyMgmt.cpp index aa6df120..f28e6587 100755 --- a/src/ui/KeyMgmt.cpp +++ b/src/ui/KeyMgmt.cpp @@ -207,6 +207,13 @@ void KeyMgmt::createActions() { connect(exportKeyToFileAct, SIGNAL(triggered()), this, SLOT(slotExportKeyToFile())); + exportKeyAsOpenSSHFormat = new QAction(_("Export As OpenSSH"), this); + exportKeyAsOpenSSHFormat->setIcon(QIcon(":ssh-key.png")); + exportKeyAsOpenSSHFormat->setToolTip( + _("Export Selected Key(s) As OpenSSH Format to File")); + connect(exportKeyAsOpenSSHFormat, SIGNAL(triggered()), this, + SLOT(slotExportAsOpenSSHFormat())); + deleteSelectedKeysAct = new QAction(_("Delete Selected Key(s)"), this); deleteSelectedKeysAct->setToolTip(_("Delete the Selected keys")); connect(deleteSelectedKeysAct, SIGNAL(triggered()), this, @@ -240,6 +247,7 @@ void KeyMgmt::createMenus() { importKeyMenu->addAction(importKeyFromKeyServerAct); keyMenu->addAction(exportKeyToFileAct); keyMenu->addAction(exportKeyToClipboardAct); + keyMenu->addAction(exportKeyAsOpenSSHFormat); keyMenu->addSeparator(); keyMenu->addAction(deleteCheckedKeysAct); } @@ -273,6 +281,7 @@ void KeyMgmt::createToolBars() { keyToolBar->addSeparator(); keyToolBar->addAction(exportKeyToFileAct); keyToolBar->addAction(exportKeyToClipboardAct); + keyToolBar->addAction(exportKeyAsOpenSSHFormat); } void KeyMgmt::slotDeleteSelectedKeys() { @@ -446,4 +455,47 @@ void KeyMgmt::slotSaveWindowState() { GlobalSettingStation::GetInstance().Sync(); } +void KeyMgmt::slotExportAsOpenSSHFormat() { + ByteArrayPtr key_export_data = nullptr; + auto keys_checked = mKeyList->getChecked(); + + if (keys_checked->empty()) { + QMessageBox::critical(nullptr, _("Error"), _("No Key Checked.")); + return; + } + + auto key = GpgKeyGetter::GetInstance().GetKey(keys_checked->front()); + if (!GpgKeyImportExportor::GetInstance().ExportKeyOpenSSH(key, + key_export_data)) { + QMessageBox::critical(nullptr, _("Error"), + _("An error occur in exporting.")); + return; + } + + if (key_export_data->empty()) { + QMessageBox::critical( + nullptr, _("Error"), + _("This key may not be able to export as OpenSSH format. Please check " + "the key-size of the subkey(s) used to sign.")); + return; + } + + key = GpgKeyGetter::GetInstance().GetKey(keys_checked->front()); + if (!key.good()) { + QMessageBox::critical(nullptr, _("Error"), _("Key Not Found.")); + return; + } + QString fileString = QString::fromStdString(key.name() + " " + key.email() + + "(" + key.id() + ").pub"); + + QString file_name = QFileDialog::getSaveFileName( + this, _("Export OpenSSH Key To File"), fileString, + QString(_("OpenSSH Public Key Files")) + " (*.pub);;All Files (*)"); + + if (!file_name.isEmpty()) { + write_buffer_to_file(file_name.toStdString(), *key_export_data); + emit signalStatusBarChanged(QString(_("key(s) exported"))); + } +} + } // namespace GpgFrontend::UI |