aboutsummaryrefslogtreecommitdiffstats
path: root/src/ui/KeyMgmt.cpp
diff options
context:
space:
mode:
authorSaturneric <[email protected]>2021-12-13 10:16:54 +0000
committerSaturneric <[email protected]>2021-12-13 10:16:54 +0000
commitda0e403a6c6ff5ab201c239ea0b6d3ce45fc7c4d (patch)
tree8e7029d8dc13b54f16cefe50ac070fe32941a924 /src/ui/KeyMgmt.cpp
parentFixed & Modified & Added. (diff)
downloadGpgFrontend-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-xsrc/ui/KeyMgmt.cpp52
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