summaryrefslogtreecommitdiff
path: root/client/mainwindow.cpp
diff options
context:
space:
mode:
authorGluzskiy Alexandr <sss@sss.chaoslab.ru>2012-09-04 12:01:53 +0300
committerGluzskiy Alexandr <sss@sss.chaoslab.ru>2012-09-04 12:01:53 +0300
commit614b78470c5ed3c701abdd32bc65412f363a6fc2 (patch)
tree288d7967378bb980544c2ca74fd6bf04e4efd590 /client/mainwindow.cpp
parent3ab3d03b8b603f210d878d352b56442eec14f6af (diff)
added restarter project (code wcreated to restart critical services on server without root access)
Diffstat (limited to 'client/mainwindow.cpp')
-rw-r--r--client/mainwindow.cpp204
1 files changed, 204 insertions, 0 deletions
diff --git a/client/mainwindow.cpp b/client/mainwindow.cpp
new file mode 100644
index 0000000..c6aa5cc
--- /dev/null
+++ b/client/mainwindow.cpp
@@ -0,0 +1,204 @@
+#include "mainwindow.h"
+#include "ui_mainwindow.h"
+
+MainWindow::MainWindow(QWidget *parent) :
+ QMainWindow(parent),
+ ui(new Ui::MainWindow)
+{
+ ui->setupUi(this);
+#ifdef MINIMAL
+ ui->halt->hide();
+ ui->reboot->hide();
+ ui->reboot->hide();
+ ui->restart_cups->hide();
+ ui->restart_ppp->hide();
+ ui->state_lbl->hide();
+ this->setFixedSize(ui->restart_vbox_btn->geometry().width() +17, ui->restart_vbox_btn->geometry().height() +17);
+#else
+ this->setFixedSize(this->size());
+#endif
+ ui->state_lbl->setText(" ");
+}
+
+QSslSocket *MainWindow::get_socket()
+{
+ QSslSocket *s = new QSslSocket;
+ QFile in(":/res/ca.crt");
+ in.open(QIODevice::ReadOnly);
+ QByteArray buf = in.readAll();
+ in.close();
+ QList<QSslCertificate> ca_list;
+ ca_list.push_back(QSslCertificate(buf));
+ s->setCaCertificates(ca_list);
+ in.setFileName(":/res/client.crt");
+ in.open(QIODevice::ReadOnly);
+ buf = in.readAll();
+ in.close();
+ QSslCertificate c(buf);
+ s->setLocalCertificate(c);
+ in.setFileName(":/res/client.key");
+ in.open(QIODevice::ReadOnly);
+ buf = in.readAll();
+ QSslKey key(buf, QSsl::Rsa);
+ s->setPrivateKey(key);
+ s->setPeerVerifyMode(QSslSocket::VerifyPeer);
+ s->setProtocol(QSsl::SslV3);
+ connect(s, SIGNAL(peerVerifyError(QSslError)), this, SLOT(ssl_verify_error_handler(QSslError)));
+
+ return s;
+}
+
+void MainWindow::ssl_verify_error_handler(const QSslError error)
+{
+ switch(error.error())
+ {
+ case QSslError::InvalidCaCertificate: case QSslError::NoPeerCertificate: case QSslError::UnspecifiedError:
+ case QSslError::AuthorityIssuerSerialNumberMismatch:
+ ui->state_lbl->setText(QString::fromUtf8("Ошибка соединения !"));
+ sock->abort();
+ return;
+ default:
+ break;
+ }
+ sock->ignoreSslErrors();
+}
+
+MainWindow::~MainWindow()
+{
+ delete ui;
+}
+
+void MainWindow::enable_buttons(bool enable)
+{
+ ui->restart_vbox_btn->setEnabled(enable);
+ ui->reboot->setEnabled(enable);
+ ui->halt->setEnabled(enable);
+ ui->restart_cups->setEnabled(enable);
+ ui->restart_ppp->setEnabled(enable);
+ ui->restart_vbox_btn->setEnabled(enable);
+}
+
+
+void MainWindow::on_restart_vbox_btn_clicked()
+{
+ ui->state_lbl->setText(QString::fromUtf8("Подготовка.."));
+ sock = get_socket();
+ ui->state_lbl->setText(QString::fromUtf8("Соединение.."));
+ sock->connectToHostEncrypted(host, 1313);
+ connect(sock, SIGNAL(encrypted()), SLOT(restart_vbox_sock_connected()));
+ connect(sock, SIGNAL(disconnected()), SLOT(disconnected()));
+}
+
+void MainWindow::restart_vbox_sock_connected()
+{
+ ui->state_lbl->setText(QString::fromUtf8("Выполнение.."));
+ enable_buttons(false);
+ sock->write("restart vbox\0");
+}
+void MainWindow::reboot()
+{
+ ui->state_lbl->setText(QString::fromUtf8("Выполнение.."));
+ enable_buttons(false);
+ sock->write("reboot now\0");
+}
+
+void MainWindow::halt()
+{
+ ui->state_lbl->setText(QString::fromUtf8("Выполнение.."));
+ enable_buttons(false);
+ sock->write("halt now\0");
+}
+
+void MainWindow::restart_cups()
+{
+ ui->state_lbl->setText(QString::fromUtf8("Выполнение.."));
+ enable_buttons(false);
+ sock->write("restart cups\0");
+}
+
+void MainWindow::restart_ppp()
+{
+ ui->state_lbl->setText(QString::fromUtf8("Выполнение.."));
+ enable_buttons(false);
+ sock->write("restart ppp\0");
+}
+
+
+void MainWindow::disconnected()
+{
+ enable_buttons(true);
+ ui->state_lbl->setText(QString::fromUtf8(" "));
+ sock->deleteLater();
+}
+
+void MainWindow::on_reboot_clicked()
+{
+#ifndef MINIMAL
+ QMessageBox msg;
+ msg.setText(QString::fromUtf8("Вы видели куда ткнули ?"));
+ msg.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
+ if(msg.exec() == QMessageBox::Yes)
+ {
+ QMessageBox msg;
+ msg.setText(QString::fromUtf8("Уверены что хотите перезагрузить сервер ?"));
+ msg.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
+ if(msg.exec() == QMessageBox::Yes)
+ {
+ ui->state_lbl->setText(QString::fromUtf8("Подготовка.."));
+ sock = get_socket();
+ ui->state_lbl->setText(QString::fromUtf8("Соединение.."));
+ sock->connectToHostEncrypted(host, 1313);
+ connect(sock, SIGNAL(encrypted()), SLOT(reboot()));
+ connect(sock, SIGNAL(disconnected()), SLOT(disconnected()));
+ }
+ }
+#endif
+}
+
+void MainWindow::on_halt_clicked()
+{
+#ifndef MINIMAL
+ QMessageBox msg;
+ msg.setText(QString::fromUtf8("Вы видели куда ткнули ?"));
+ msg.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
+ if(msg.exec() == QMessageBox::Yes)
+ {
+ QMessageBox msg;
+ msg.setText(QString::fromUtf8("Уверены что хотите выключить сервер ?"));
+ msg.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
+ if(msg.exec() == QMessageBox::Yes)
+ {
+ ui->state_lbl->setText(QString::fromUtf8("Подготовка.."));
+ sock = get_socket();
+ ui->state_lbl->setText(QString::fromUtf8("Соединение.."));
+ sock->connectToHostEncrypted(host, 1313);
+ connect(sock, SIGNAL(encrypted()), SLOT(halt()));
+ connect(sock, SIGNAL(disconnected()), SLOT(disconnected()));
+ }
+ }
+#endif
+}
+
+void MainWindow::on_restart_cups_clicked()
+{
+#ifndef MINIMAL
+ ui->state_lbl->setText(QString::fromUtf8("Подготовка.."));
+ sock = get_socket();
+ ui->state_lbl->setText(QString::fromUtf8("Соединение.."));
+ sock->connectToHostEncrypted(host, 1313);
+ connect(sock, SIGNAL(encrypted()), SLOT(restart_cups()));
+ connect(sock, SIGNAL(disconnected()), SLOT(disconnected()));
+#endif
+}
+
+void MainWindow::on_restart_ppp_clicked()
+{
+#ifndef MINIMAL
+ ui->state_lbl->setText(QString::fromUtf8("Подготовка.."));
+ sock = get_socket();
+ ui->state_lbl->setText(QString::fromUtf8("Соединение.."));
+ sock->connectToHostEncrypted(host, 1313);
+ connect(sock, SIGNAL(encrypted()), SLOT(restart_ppp()));
+ connect(sock, SIGNAL(disconnected()), SLOT(disconnected()));
+#endif
+}