blob: 6193b5a033622578bb7bcc312c40726afff89a40 [file] [log] [blame] [raw]
/* Secure Shout Host Oriented Unified Talk
* Copyright 2015-2018 Rivoreo
*
* 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 the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*/
#include "common.h"
#include "settingsdialog.h"
#include "ui_settingsdialog.h"
#include <QtCore/QSettings>
#include <QtWidgets/QFileDialog>
#include <QtWidgets/QMessageBox>
SettingsDialog::SettingsDialog(QWidget *parent, QSettings *config) :
QDialog(parent),
ui(new Ui::SettingsDialog)
{
ui->setupUi(this);
#ifdef HAVE_OPENSSH_LIBRARY
bool use_internal_ssh_library = config->value("UseInternalSSHLibrary", false).toBool()
ui->checkBox_use_internal_ssh_library->setChecked(use_internet_ssh_library);
use_internet_ssh_library_checked(use_internal_ssh_library);
#else
bool use_internal_ssh_library = false;
ui->checkBox_use_internal_ssh_library->setEnabled(false);
ui->checkBox_use_internal_ssh_library->setChecked(false);
#endif
if(!use_internal_ssh_library) {
bool use_separate_known_hosts = config->value("UseSeparateKnownHosts", false).toBool();
ui->checkBox_use_separete_known_hosts->setChecked(use_separate_known_hosts);
if(!use_separate_known_hosts) ui->textEdit_known_hosts->setEnabled(false);
}
ui->textEdit_known_hosts->setPlainText(config->value("KnownHosts").toString());
ui->lineEdit_ssh_program->setText(config->value("SSHProgramPath", DEFAULT_SSH_PROGRAM_PATH).toString());
ui->lineEdit_ssh_args->setText(config->value("SSHArgs").toString());
config->beginGroup("SSHEnvironment");
QStringList key_list = config->allKeys();
foreach(const QString &key, key_list) {
add_environment_variable(key, config->value(key).toString());
}
config->endGroup();
this->config = config;
}
SettingsDialog::~SettingsDialog()
{
delete ui;
}
void SettingsDialog::use_internal_ssh_library_checked(bool t) {
ui->lineEdit_ssh_program->setEnabled(!t);
ui->lineEdit_ssh_args->setEnabled(!t);
ui->environment_list->setEnabled(!t);
ui->button_add_env_item->setEnabled(!t);
ui->button_remove_env_item->setEnabled(!t);
ui->checkBox_use_separete_known_hosts->setEnabled(!t);
ui->checkBox_use_separete_known_hosts->setChecked(t ? : config->value("UseSeparateKnownHosts", false).toBool());
}
void SettingsDialog::add_environment_variable(const QString &name, const QString &value) {
QTreeWidgetItem *item = new QTreeWidgetItem;
item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsEnabled);
item->setText(0, name);
item->setText(1, value);
ui->environment_list->addTopLevelItem(item);
}
void SettingsDialog::add_environment_variable() {
add_environment_variable(QString(), QString());
}
void SettingsDialog::remove_environment_variable() {
QTreeWidgetItem *current = ui->environment_list->currentItem();
if(!current) return;
delete current;
}
void SettingsDialog::browse_ssh_program() {
QFileDialog d(this, tr("Choose SSH client program to use"));
d.setAcceptMode(QFileDialog::AcceptOpen);
d.setFileMode(QFileDialog::ExistingFile);
d.setOption(QFileDialog::DontUseNativeDialog);
if(d.exec()) {
QString path = d.selectedFiles()[0];
if(!QFileInfo(path).isExecutable()) {
QMessageBox::warning(this, tr("Warning"), tr("File %1 is not executable").arg(path));
}
ui->lineEdit_ssh_program->setText(path);
}
}
void SettingsDialog::save_settings() {
#ifdef HAVE_OPENSSH_LIBRARY
bool use_internal_ssh_library = ui->checkBox_use_internal_ssh_library->isChecked();
config->setValue("UseInternalSSHLibrary", use_internal_ssh_library);
#else
bool use_internal_ssh_library = false;
#endif
if(!use_internal_ssh_library) config->setValue("UseSeparateKnownHosts", ui->checkBox_use_separete_known_hosts->isChecked());
config->setValue("KnownHosts", ui->textEdit_known_hosts->toPlainText());
config->setValue("SSHProgramPath", ui->lineEdit_ssh_program->text());
config->setValue("SSHArgs", ui->lineEdit_ssh_args->text());
config->beginGroup("SSHEnvironment");
config->remove("");
int i, m = ui->environment_list->topLevelItemCount();
for(i=0; i<m; i++) {
const QString &name = ui->environment_list->topLevelItem(i)->text(0);
const QString &value = ui->environment_list->topLevelItem(i)->text(1);
if(!name.isEmpty()) config->setValue(name, value);
}
config->endGroup();
}