/*
Copyright © 2015 Gluzskiy Alexandr (sss)
This file is part of Unknown Download Manager (UDM).
UDM 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 2 of the License, or
(at your option) any later version.
UDM 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.
You should have received a copy of the GNU General Public License
along with UDM. If not, see .
*/
#include "connect_widget.h"
#include
#include
#include
#include
#include
#include
#include
#include
connect_widget::connect_widget(QWidget *parent) : QWidget(parent)
{
edit_host = new QLineEdit(this), edit_port = new QLineEdit(this), edit_passwd = new QLineEdit(this);
edit_port->setInputMask("D0000");
edit_port->setText("1");
edit_passwd->setEchoMode(QLineEdit::Password);
lbl_host = new QLabel(tr("host") + ":", this);
lbl_port = new QLabel(tr("port") + ":", this);
lbl_passwd = new QLabel(tr("password") + ":", this);
chk_ssl = new QCheckBox(tr("Enable encryption"), this);
lbl_ssl_ca = new QLabel(tr("ca cert"), this);
lbl_ssl_ca->setEnabled(false);
edit_ssl_ca = new QLineEdit(this);
edit_ssl_ca->setEnabled(false);
btn_set_ssl_ca = new QPushButton(tr("Browse"), this);
btn_set_ssl_ca->setEnabled(false);
connect(btn_set_ssl_ca, SIGNAL(clicked(bool)), this, SLOT(select_ssl_ca()));
lbl_ssl_crt = new QLabel(tr("client cert"), this);
lbl_ssl_crt->setEnabled(false);
edit_ssl_crt = new QLineEdit(this);
edit_ssl_crt->setEnabled(false);
btn_set_ssl_crt = new QPushButton(tr("Browse"), this);
btn_set_ssl_crt->setEnabled(false);
connect(btn_set_ssl_crt, SIGNAL(clicked(bool)), this, SLOT(select_ssl_crt()));
lbl_ssl_key = new QLabel(tr("client key"), this);
lbl_ssl_key->setEnabled(false);
edit_ssl_key = new QLineEdit(this);
edit_ssl_key->setEnabled(false);
btn_set_ssl_key = new QPushButton(tr("Browse"), this);
btn_set_ssl_key->setEnabled(false);
connect(btn_set_ssl_key, SIGNAL(clicked(bool)), this, SLOT(select_ssl_key()));
btn_connect = new QPushButton(tr("Connect"), this);
btn_connect->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
btn_close = new QPushButton(tr("Close"), this);
btn_close->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
edit_host->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum);
edit_port->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum);
edit_passwd->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum);
elements_grid = new QGridLayout(this);
elements_grid->addWidget(lbl_host, 0, 0);
elements_grid->addWidget(edit_host, 0, 1);
elements_grid->addWidget(lbl_port, 0, 2);
elements_grid->addWidget(edit_port, 0, 3);
elements_grid->addWidget(lbl_passwd, 1, 0);
elements_grid->addWidget(edit_passwd, 1, 1, 1, 2);
elements_grid->addWidget(chk_ssl, 2, 0, 1, 4);
elements_grid->addWidget(lbl_ssl_ca, 3, 0);
elements_grid->addWidget(edit_ssl_ca, 3, 1, 1, 2);
elements_grid->addWidget(btn_set_ssl_ca, 3, 3);
elements_grid->addWidget(lbl_ssl_crt, 4, 0);
elements_grid->addWidget(edit_ssl_crt, 4, 1, 1, 2);
elements_grid->addWidget(btn_set_ssl_crt, 4, 3);
elements_grid->addWidget(lbl_ssl_key, 5, 0);
elements_grid->addWidget(edit_ssl_key, 5, 1, 1, 2);
elements_grid->addWidget(btn_set_ssl_key, 5, 3);
spacer_h = new QSpacerItem(1, 1, QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
elements_grid->addItem(spacer_h, 6, 0, 1, 4);
elements_grid->addWidget(btn_connect, 7, 0);
elements_grid->addWidget(btn_close, 7, 3);
elements_grid->setColumnStretch(1, 1);
connect(btn_connect, SIGNAL(clicked(bool)), this, SLOT(connect_clicked()));
connect(btn_close, SIGNAL(clicked(bool)), this, SLOT(close()));
connect(chk_ssl, SIGNAL(stateChanged(int)), this, SLOT(chk_ssl_state_changed(int)));
}
connect_widget::~connect_widget()
{
//TODO: delete all widgets
}
void connect_widget::connect_clicked()
{
//TODO: check entered values
if(edit_host->text().isEmpty())
{
QMessageBox msg;
msg.setText(tr("host must be entered"));
msg.exec();
return;
}
QString host = edit_host->text(), pass = edit_passwd->text();
if(chk_ssl->checkState())
{
QString ssl_ca = edit_ssl_ca->text(), ssl_crt = edit_ssl_crt->text(), ssl_key = edit_ssl_key->text();
//TODO: validate file path's (existense, access rights, e.t.c.)
emit client_connect_ssl(host, pass, edit_port->text().toInt(), ssl_ca, ssl_crt, ssl_key);
}
else
emit client_connect(host, pass, edit_port->text().toInt());
close();
}
void connect_widget::chk_ssl_state_changed(int state)
{
switch(state)
{
case 0: //unchecked
{
lbl_ssl_ca->setEnabled(false);
lbl_ssl_crt->setEnabled(false);
lbl_ssl_key->setEnabled(false);
edit_ssl_ca->setEnabled(false);
edit_ssl_crt->setEnabled(false);
edit_ssl_key->setEnabled(false);
btn_set_ssl_ca->setEnabled(false);
btn_set_ssl_key->setEnabled(false);
btn_set_ssl_crt->setEnabled(false);
}
break;
default: //checked
{
lbl_ssl_ca->setEnabled(true);
lbl_ssl_crt->setEnabled(true);
lbl_ssl_key->setEnabled(true);
edit_ssl_ca->setEnabled(true);
edit_ssl_crt->setEnabled(true);
edit_ssl_key->setEnabled(true);
btn_set_ssl_ca->setEnabled(true);
btn_set_ssl_key->setEnabled(true);
btn_set_ssl_crt->setEnabled(true);
}
break;
}
}
void connect_widget::select_ssl_ca()
{
QString tmp = QFileDialog::getOpenFileName(this, tr("select ca cert"));
edit_ssl_ca->setText(tmp);
}
void connect_widget::select_ssl_crt()
{
QString tmp = QFileDialog::getOpenFileName(this, tr("select client cert"));
edit_ssl_crt->setText(tmp);
}
void connect_widget::select_ssl_key()
{
QString tmp = QFileDialog::getOpenFileName(this, tr("select client key"));
edit_ssl_key->setText(tmp);
}