Adds support for manually specifying SSH config and default keyfile paths

This commit is contained in:
kas 2019-11-07 23:09:44 +01:00
parent 62a234bda1
commit a04ba04b0a
7 changed files with 157 additions and 4 deletions

BIN
rsrc/misc.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

91
rsrc/misc.svg Normal file
View File

@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
id="svg12"
height="64"
width="64"
version="1.1">
<metadata
id="metadata18">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs16" />
<rect
id="rect2"
fill="darkgray"
ry="6"
rx="6"
height="60"
width="60"
y="3"
x="3" />
<rect
style="fill:#623090;fill-opacity:1;stroke:#412060;stroke-opacity:1"
fill="slategray"
stroke="darkslategray"
stroke-width="1"
id="rect4"
ry="6"
rx="6"
height="60"
width="60"
y="1"
x="1" />
<g
style="stroke:#ffffff;stroke-opacity:1;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none"
transform="translate(5.3754521,-16.5)"
id="g4642">
<circle
style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="path4620"
cx="38.290356"
cy="33"
r="7" />
<path
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 14.041644,26 5.9587402,40 H 22.124548 Z"
id="path4635" />
<rect
style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="rect4616"
width="14"
height="14"
x="19.166"
y="47" />
</g>
<g
transform="translate(2.7350731,-0.213627)"
id="g4653">
<circle
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="path4644"
cx="18.264927"
cy="53.213627"
r="2" />
<circle
r="2"
cy="53.213627"
cx="38.264927"
id="circle4646"
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
<circle
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="circle4648"
cx="28.264927"
cy="53.213627"
r="2" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.2 KiB

BIN
rsrc/misc@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -60,5 +60,7 @@
<file>update@2x.png</file>
<file>window.png</file>
<file>window@2x.png</file>
<file>misc.png</file>
<file>misc@2x.png</file>
</qresource>
</RCC>

View File

@ -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.

View File

@ -24,7 +24,8 @@ public:
Editor,
Update,
Plugins,
Terminal
Terminal,
Misc
};
SettingsDialog(Index index, QWidget *parent = nullptr);

View File

@ -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;