summaryrefslogtreecommitdiff
path: root/ZeroTierUI
diff options
context:
space:
mode:
Diffstat (limited to 'ZeroTierUI')
-rw-r--r--ZeroTierUI/installdialog.cpp37
-rw-r--r--ZeroTierUI/installdialog.h11
2 files changed, 43 insertions, 5 deletions
diff --git a/ZeroTierUI/installdialog.cpp b/ZeroTierUI/installdialog.cpp
index ad575770..83820e88 100644
--- a/ZeroTierUI/installdialog.cpp
+++ b/ZeroTierUI/installdialog.cpp
@@ -3,6 +3,7 @@
#include "ui_installdialog.h"
#include "../node/Defaults.hpp"
+#include "../node/SoftwareUpdater.hpp"
#include <QMainWindow>
#include <QMessageBox>
@@ -12,7 +13,8 @@
InstallDialog::InstallDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::InstallDialog),
- nam(new QNetworkAccessManager(this))
+ nam(new QNetworkAccessManager(this)),
+ phase(FETCHING_NFO)
{
ui->setupUi(this);
QObject::connect(nam,SIGNAL(finished(QNetworkReply*)),this,SLOT(on_networkReply(QNetworkReply*)));
@@ -40,16 +42,41 @@ void InstallDialog::on_networkReply(QNetworkReply *reply)
if (reply->error() != QNetworkReply::NoError) {
QMessageBox::critical(this,"Download Failed",QString("Download failed: ") + reply->errorString(),QMessageBox::Ok,QMessageBox::NoButton);
QApplication::exit(1);
- return;
} else {
if (reply->attribute(QNetworkRequest::HttpStatusCodeAttribute) == 200) {
QByteArray installerData(reply->readAll());
- installerData.append((char)0);
- printf("%s\n",installerData.data());
+
+ switch(phase) {
+ case FETCHING_NFO: {
+ unsigned int vMajor = 0,vMinor = 0,vRevision = 0;
+ installerData.append((char)0);
+ const char *err = ZeroTier::SoftwareUpdater::parseNfo(installerData.data(),vMajor,vMinor,vRevision,signedBy,signature,url);
+
+ if (err) {
+ QMessageBox::critical(this,"Download Failed","Download failed: there is a problem with the software update web site.\nTry agian later. (invalid .nfo file)",QMessageBox::Ok,QMessageBox::NoButton);
+ QApplication::exit(1);
+ return;
+ }
+
+ phase = FETCHING_INSTALLER;
+ reply = nam->get(QNetworkRequest(QUrl(url.c_str())));
+ QObject::connect(reply,SIGNAL(downloadProgress(qint64,qint64)),this,SLOT(on_downloadProgress(qint64,qint64)));
+ } break;
+ case FETCHING_INSTALLER: {
+ if (!ZeroTier::SoftwareUpdater::validateUpdate(installerData.data(),installerData.length(),signedBy,signature)) {
+ QMessageBox::critical(this,"Download Failed","Download failed: there is a problem with the software update web site.\nTry agian later. (failed signature check)",QMessageBox::Ok,QMessageBox::NoButton);
+ QApplication::exit(1);
+ return;
+ }
+ } break;
+ }
+
+ ui->progressBar->setMinimum(0);
+ ui->progressBar->setMaximum(100);
+ ui->progressBar->setValue(0);
} else {
QMessageBox::critical(this,"Download Failed",QString("Download failed: HTTP status code ") + reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toString(),QMessageBox::Ok,QMessageBox::NoButton);
QApplication::exit(1);
- return;
}
}
}
diff --git a/ZeroTierUI/installdialog.h b/ZeroTierUI/installdialog.h
index 19c7a89a..f2f5ed90 100644
--- a/ZeroTierUI/installdialog.h
+++ b/ZeroTierUI/installdialog.h
@@ -7,6 +7,10 @@
#include <QNetworkRequest>
#include <QNetworkReply>
+#include <string>
+
+#include "../node/Address.hpp"
+
namespace Ui {
class InstallDialog;
}
@@ -28,6 +32,13 @@ private slots:
private:
Ui::InstallDialog *ui;
QNetworkAccessManager *nam;
+ enum {
+ FETCHING_NFO,
+ FETCHING_INSTALLER
+ } phase;
+
+ ZeroTier::Address signedBy;
+ std::string url,signature;
};
#endif // INSTALLDIALOG_H