From a04ba04b0a17430095c0f70cbe20625cc13ece0b Mon Sep 17 00:00:00 2001 From: kas Date: Thu, 7 Nov 2019 23:09:44 +0100 Subject: [PATCH] Adds support for manually specifying SSH config and default keyfile paths --- rsrc/misc.png | Bin 0 -> 1107 bytes rsrc/misc.svg | 91 +++++++++++++++++++++++++++++++++ rsrc/misc@2x.png | Bin 0 -> 2184 bytes rsrc/resources.qrc | 2 + src/dialogs/SettingsDialog.cpp | 32 ++++++++++++ src/dialogs/SettingsDialog.h | 3 +- src/git/Remote.cpp | 33 ++++++++++-- 7 files changed, 157 insertions(+), 4 deletions(-) create mode 100644 rsrc/misc.png create mode 100644 rsrc/misc.svg create mode 100644 rsrc/misc@2x.png diff --git a/rsrc/misc.png b/rsrc/misc.png new file mode 100644 index 0000000000000000000000000000000000000000..05c8a388a533bb22dd3666f260f7ea2b7762ce9e GIT binary patch literal 1107 zcmV-Z1g!gsP)X{(lPnXNx^{ZqDVt;Sli@-j14F{3e)VMjHYQ6wV#A&A5e#{q{2 z+&$m^Xs8!_kNY~%e|rDHD~h7BNRmiT(?URIsQUGY}RcNbudj@0yRaM*dJW(RSr zVsL+do{Q(MkXO2fH@>W7+1*RE(w2k-u-RiN+MY@4scy_x6AwR=H>b~RF;V$yF`cb_ zyuRZIwQrx|+#;sA)4#j$t*}h2%P{q53VL7cNJf~e+I9|$2T9knHcr)=!-?OyfdHJ zGvu8$<{6q`Y19&o5r*&qj3xu+&lk|wHB8gje*!QuI?0K{Zqhd8U{Y09ziWRm3;TfuX7d$nAL(tlYy-}*8{NkaG7ReUTJzzTYh@r zM|QpGplV++Rr`to@J|Ie_Fgl;oV*Y|z)aHec&lboARuXXUkZwidwjgRyN;Bs1d=l1 zxi&t@g|n9#zA~mc&zt}NjYrRgObVs$wtl+X`os2zJO%%&?$$Lt@?5^=xT=D?z9VSkE+~Ma{Ck=_wc!u}e{hk~CpS`7ou_%=XwIq6zVP}V z;En_6+JrOO@?-wODTYCk!{XAOQK>GH~uKqTr!)-Ld&(1l2#EskyElRjNT3O}H^F&Afw* ze(CR#NJ2eMydED7wXL@ln@bXjCCUgesYpg&9+~dxmFR1qTa`pIWgZ}>BpD&ZZvvoj z_0AP(cAHzMN(!pZ>r9V?iaE+aPDwImi>cP>bXEpcbGclbRaMOeEQ?2hR|w&*sHkWF Z_y@LWUdpfKEqMR{002ovPDHLkV1j1U4haAN literal 0 HcmV?d00001 diff --git a/rsrc/misc.svg b/rsrc/misc.svg new file mode 100644 index 00000000..8fe52efc --- /dev/null +++ b/rsrc/misc.svg @@ -0,0 +1,91 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + diff --git a/rsrc/misc@2x.png b/rsrc/misc@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f15cf1907f280fbfaf4f5f4e12a39a329f853384 GIT binary patch literal 2184 zcmV;32zU31P)sc>-8B_8*MV8m`&XUZwntuk6vexY8tG$IXO9c013oUz1Cpx zwsGBsR`I2_sy^CcvAhl-2?e7@XnSOJY)59Q!^v&7qy= zyF{l(D={&3C<(L7L=6waKiEK>#me2%YAzkW!HKiPa{qcBMQKM- z`xL;0ObGuYiw%c)i%cuaIE*vAS6LR(1T3=epN#U(vRb^1Jag`CwPEA z;P{tvwx4TLZuiFHG&R}*FpnO{gxN!%sJpaP@-%8{lvDP^#)qqcxU#H<`WmZK^;&Sr z0l@?ONm-nrmiPSeE9#r)-=mb@s^;jf0<}E;ul37%D1V*72(X)iRgSCxzqPo%Q<=AYKQXsx1FW>$65e_!c3$t8QY=!wR0uh zxKaivM;*Q9fuxg1qa86Gd9Wb9zjuH*Zap% z|u;c1OjjR9HxYg==Q0flLTk^OyN9H>T5TNnbUUt-n9i zuFQ=qWo%!U%kp<;qxI2X3iKs?6vU2WlAys#4dG!y;ghd9mD`%~UhjY|4T7T+qj~x5S)jnqtUNA%RopFd?$D(p;N`Wm2nsb36lQW5-c54u z(Ceo_mpWi)RvwjQHQc*%pPgBG-6rP_Vn*bW)%^^i8-jf!dc`*bm5rqgn;F9M)1t}D z%oLK4C~UCRxwpyQgRl!L{X!p{JCc0rHq{g1IFV`rkPer9 zR0~R0c};PxLMP9e^Z*nTDs3fuvf1A;g@FjEquf z=Tp&~oE*KyVtHK%@e5!i%^w)`U}}KNLWoa*tr-~^Pk+RBmj3}XR;RPvxf+T90000< KMNUMnLSTZ97C^!P literal 0 HcmV?d00001 diff --git a/rsrc/resources.qrc b/rsrc/resources.qrc index 8930fa0a..c0dbc702 100644 --- a/rsrc/resources.qrc +++ b/rsrc/resources.qrc @@ -60,5 +60,7 @@ update@2x.png window.png window@2x.png + misc.png + misc@2x.png diff --git a/src/dialogs/SettingsDialog.cpp b/src/dialogs/SettingsDialog.cpp index 9bec649c..20507d78 100644 --- a/src/dialogs/SettingsDialog.cpp +++ b/src/dialogs/SettingsDialog.cpp @@ -601,6 +601,30 @@ public: } }; +class MiscPanel : public QWidget +{ +public: + MiscPanel(QWidget *parent = nullptr) + : QWidget(parent) + { + Settings *settings = Settings::instance(); + + QLineEdit *sshConfigPathBox = new QLineEdit(settings->value("ssh/configFilePath").toString(), this); + connect(sshConfigPathBox, &QLineEdit::textChanged, [](const QString &text) { + Settings::instance()->setValue("ssh/configFilePath", text); + }); + + QLineEdit *sshKeyPathBox = new QLineEdit(settings->value("ssh/keyFilePath").toString(), this); + connect(sshKeyPathBox, &QLineEdit::textChanged, [](const QString &text) { + Settings::instance()->setValue("ssh/keyFilePath", text); + }); + + QFormLayout *layout = new QFormLayout(this); + layout->addRow(tr("Path to SSH config file:"), sshConfigPathBox); + layout->addRow(tr("Path to default / fallback SSH key file:"), sshKeyPathBox); + } +}; + #ifdef Q_OS_UNIX class TerminalPanel : public QWidget { @@ -800,6 +824,14 @@ SettingsDialog::SettingsDialog(Index index, QWidget *parent) stack->addWidget(new TerminalPanel(this)); #endif + // Add misc panel. + QAction *misc = toolbar->addAction(QIcon(":/misc.png"), tr("Misc")); + misc->setData(Misc); + misc->setActionGroup(actions); + misc->setCheckable(true); + + stack->addWidget(new MiscPanel(this)); + // Hook up edit button. connect(edit, &QPushButton::clicked, stack, [stack] { // Update on save. diff --git a/src/dialogs/SettingsDialog.h b/src/dialogs/SettingsDialog.h index a9ee77f9..c4372116 100644 --- a/src/dialogs/SettingsDialog.h +++ b/src/dialogs/SettingsDialog.h @@ -24,7 +24,8 @@ public: Editor, Update, Plugins, - Terminal + Terminal, + Misc }; SettingsDialog(Index index, QWidget *parent = nullptr); diff --git a/src/git/Remote.cpp b/src/git/Remote.cpp index d18b7b0f..66025d6c 100644 --- a/src/git/Remote.cpp +++ b/src/git/Remote.cpp @@ -38,6 +38,22 @@ const QStringList kKeyKinds = {"ed25519", "rsa", "dsa"}; bool keyFile(QString &key) { QDir dir = QDir::home(); + + QString filePath = Settings::instance()->value("ssh/keyFilePath").toString(); + if (!filePath.isEmpty()) { + QFileInfo file(filePath); + + if (!file.isAbsolute()) + file.setFile(dir.absolutePath() + '/' + file.filePath()); + + if (file.exists()) { + key = file.absoluteFilePath(); + return true; + } else { + return false; + } + } + if (!dir.cd(".ssh")) return false; @@ -136,11 +152,22 @@ public: ConfigFile() { + QString filePath = Settings::instance()->value("ssh/configFilePath").toString(); QDir dir = QDir::home(); - if (!dir.cd(".ssh")) - return; - mFile.reset(new QFile(dir.filePath("config"))); + if (filePath.isEmpty()) { + if (!dir.cd(".ssh")) + return; + + filePath = dir.absoluteFilePath("config"); + } + + QFileInfo file(filePath); + + if (!file.isAbsolute()) + file.setFile(dir.absolutePath() + '/' + file.filePath()); + + mFile.reset(new QFile(file.absoluteFilePath())); if (!mFile->open(QFile::ReadOnly)) return;