Compare commits

...
37 Commits
Author SHA1 Message Date
Adam Ierymenko bacb8f56c3 VERSION 0.6.8: changes in preparation for binary release
This version contains no significant changes to the engine itself, just to
the installer, the GUI, and packaging and such. It's all stuff for prep for
the big release, which is fast approaching!
2014-01-10 21:46:36 -08:00
Adam Ierymenko d553555880 Add "you have not joined any networks" placeholder if networks list is empty. 2014-01-10 21:40:38 -08:00
Adam Ierymenko 9e508779c2 Installer AppleScript finally reinvokes the app correctly. 2014-01-10 21:26:50 -08:00
Adam Ierymenko 14d144ea22 UI stuff, re-launch app from AppleScript after install (still needs a bit of work) 2014-01-10 17:31:10 -08:00
Adam Ierymenko 305ed0b3c5 Cleanup in installer code in app. 2014-01-10 16:41:44 -08:00
Adam Ierymenko 9208c6b4e6 QMessageBox cleanup. 2014-01-10 16:05:54 -08:00
Adam Ierymenko def893fe40 Add GPL notice to UI code. 2014-01-10 15:27:44 -08:00
Adam Ierymenko 2a3c9e73e5 More mac installer fixes. 2014-01-10 14:09:08 -08:00
Adam Ierymenko 15854a1b14 Mac installer work... 2014-01-09 22:58:31 -08:00
Adam Ierymenko 12a0a9dedd Update cert IDs for official build. 2014-01-09 21:15:00 -08:00
Adam Ierymenko 5c90afa296 Work on mac launch script, sign binary mac tap driver kext (and there was much rejoicing!) 2014-01-09 11:00:36 -08:00
Adam Ierymenko 68ddba60a3 Another fix to mdfind line in Mac scripts. 2014-01-08 23:35:26 -08:00
Adam Ierymenko 3482d836ae Mac install fixes, more internal use scripts. 2014-01-08 23:12:03 -08:00
Adam Ierymenko 60731e6d02 Update URLs for auto-update, check supernode version in one more place, delete pid before executing updater. 2014-01-07 16:37:36 -08:00
Adam Ierymenko c1256fff5b Remove some legacy code from the core loop. 2014-01-07 15:06:02 -08:00
Adam Ierymenko ddb77b1454 Make rules for internal use. 2014-01-07 14:48:56 -08:00
Adam Ierymenko afec5b0f2e Official release maker... again only of academic interest to others. 2014-01-07 14:12:57 -08:00
Adam Ierymenko eb1598831a Include tap.kext in mac installer. 2014-01-07 13:35:20 -08:00
Adam Ierymenko ea73e736c8 Official release stuff... of only academic interest to open source third party users. 2014-01-07 13:06:34 -08:00
Adam Ierymenko f2976178c9 Installer bugfix on Linux. 2014-01-06 13:25:07 -05:00
Adam Ierymenko 76638aae76 Linux installer builds... 2014-01-06 13:11:32 -05:00
Adam Ierymenko 2edaf0588a Linux installer work... 2014-01-06 12:56:00 -05:00
Adam Ierymenko e525e3a571 Ready to test app-driven service install on Mac. 2014-01-05 20:59:41 -08:00
Adam Ierymenko a19c19c58c Refactor SoftwareUpdate to make .nfo parse and signature check code easily reusable so it can be used from the Qt GUI code. 2014-01-05 16:24:12 -08:00
Adam Ierymenko 67a71868cb Install dialog in UI. 2014-01-03 22:14:30 -08:00
Adam Ierymenko 029f64495c Linux buildinstaller fix. 2014-01-03 16:53:55 -08:00
Adam Ierymenko 63d6052159 Mac installer work. 2014-01-03 16:53:00 -08:00
Adam Ierymenko 50043f9cd6 Remove previous installer code. 2014-01-03 16:16:21 -08:00
Adam Ierymenko 59b1623477 More install/deploy work for mac... 2014-01-03 15:39:09 -08:00
Adam Ierymenko 22b52858e0 Fix -h in zerotier-cli and move code to find auth token into LocalClient, also move auth token for mac into Mac-standard Library/Application Support location. 2014-01-03 14:03:29 -08:00
Adam Ierymenko baea75f2df Installer app helper... 2014-01-03 12:15:47 -08:00
Adam Ierymenko 69c993357d Update mac launcher and uninstaller to use mdfind to locate app. 2014-01-03 10:26:40 -08:00
Adam Ierymenko fb685bcb1d New Unix installer is script-based with a payload... no fracking idea what I will do for Windows. 2014-01-03 09:00:59 -08:00
Adam Ierymenko 14e4e9e479 Phasing out existing installer, delete some stuff... 2014-01-01 17:02:28 -08:00
Adam Ierymenko b99940f8a1 Forget mac .pkg, we will integrate the installer into the app and have it launch it on first run. This is much more user-friendly. 2014-01-01 16:13:35 -08:00
Adam Ierymenko 3d76d6649f Add step to build in helpers to mac app and codesign. 2013-12-31 16:26:14 -08:00
Adam Ierymenko 7519d8ca2c Sign the AppleScript helper app that the UI calls to install the token file. 2013-12-31 16:20:28 -08:00
49 changed files with 1443 additions and 874 deletions

No files matched your search

+4 -8
View File
@@ -1,16 +1,13 @@
/ext/llvm-g++-Xcode4.6.2
/ext/llvm-g++-Xcode4.6.2.tar.bz2
/zerotier-*
/build-ZeroTierUI-*
/ZeroTierUI/*.user
*.o
.DS_Store
.Apple*
*.dSYM
netconf-service/netconf-test
netconf-service/netconf.service
mac-tap/tuntap/src/tap/tap
mac-tap/tuntap/tap.kext
/netconf-service/netconf-test
/netconf-service/netconf.service
/ipch
/ZeroTierOne.sdf
/ZeroTierOne.v11.suo
@@ -31,8 +28,7 @@ mac-tap/tuntap/tap.kext
*.cache
*.obj
*.tlog
/installer-build
/zt1-*-install
/file2lz4c
/build-*
/ZeroTierOneInstaller-*
.qmake.stash
*.autosave
+11 -8
View File
@@ -1,4 +1,4 @@
QT += core gui widgets
QT += core gui widgets network
TARGET = "ZeroTier One"
TEMPLATE = app
@@ -37,9 +37,10 @@ SOURCES += main.cpp\
../node/Topology.cpp \
../node/UdpSocket.cpp \
../node/Utils.cpp \
../ext/lz4/lz4.c \
../ext/lz4/lz4hc.c \
networkwidget.cpp
../ext/lz4/lz4.c \
../ext/lz4/lz4hc.c \
networkwidget.cpp \
installdialog.cpp
HEADERS += mainwindow.h \
aboutwindow.h \
@@ -86,13 +87,15 @@ HEADERS += mainwindow.h \
../node/Thread.hpp \
../node/Topology.hpp \
../node/UdpSocket.hpp \
../ext/lz4/lz4.h \
../ext/lz4/lz4hc.h \
networkwidget.h
../ext/lz4/lz4.h \
../ext/lz4/lz4hc.h \
networkwidget.h \
installdialog.h
FORMS += mainwindow.ui \
aboutwindow.ui \
networkwidget.ui
networkwidget.ui \
installdialog.ui
RESOURCES += \
resources.qrc
+31 -1
View File
@@ -1,14 +1,44 @@
/*
* ZeroTier One - Global Peer to Peer Ethernet
* Copyright (C) 2012-2013 ZeroTier Networks LLC
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* --
*
* ZeroTier may be used and distributed under the terms of the GPLv3, which
* are available at: http://www.gnu.org/licenses/gpl-3.0.html
*
* If you would like to embed ZeroTier into a commercial application or
* redistribute it in a modified binary form, please contact ZeroTier Networks
* LLC. Start here: http://www.zerotier.com/
*/
#include "aboutwindow.h"
#include "ui_aboutwindow.h"
#include <QMessageBox>
#include "../node/Defaults.hpp"
#include "../node/Node.hpp"
AboutWindow::AboutWindow(QWidget *parent) :
QDialog(parent),
ui(new Ui::AboutWindow)
{
ui->setupUi(this);
ui->aboutTextLabel->setText(QString("ZeroTier One\nVersion ")+ZeroTier::Node::versionString()+"\nQt Graphical User Interface\n\n(c)2011-2014 ZeroTier Networks LLC\n\nReleased under the terms of the GNU\nGeneral Public License v3.0, see: http://gplv3.fsf.org for terms.\n\nAuthor(s): Adam Ierymenko");
}
AboutWindow::~AboutWindow()
+27
View File
@@ -1,3 +1,30 @@
/*
* ZeroTier One - Global Peer to Peer Ethernet
* Copyright (C) 2012-2013 ZeroTier Networks LLC
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* --
*
* ZeroTier may be used and distributed under the terms of the GPLv3, which
* are available at: http://www.gnu.org/licenses/gpl-3.0.html
*
* If you would like to embed ZeroTier into a commercial application or
* redistribute it in a modified binary form, please contact ZeroTier Networks
* LLC. Start here: http://www.zerotier.com/
*/
#ifndef AboutWindow_H
#define AboutWindow_H
-7
View File
@@ -151,13 +151,6 @@
<bold>false</bold>
</font>
</property>
<property name="text">
<string>ZeroTier One GUI
(c)2012-2013 ZeroTier Networks LLC
Author(s): Adam Ierymenko
Version: 1.0</string>
</property>
<property name="textFormat">
<enum>Qt::PlainText</enum>
</property>
@@ -22,6 +22,8 @@
<string>1.0</string>
<key>CFBundleSignature</key>
<string>aplt</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>LSMinimumSystemVersionByArchitecture</key>
<dict>
<key>x86_64</key>
@@ -30,7 +32,7 @@
<key>LSRequiresCarbon</key>
<true/>
<key>NSHumanReadableCopyright</key>
<string>(c) 2013 ZeroTier Networks LLC</string>
<string>(c) 2013-2014 ZeroTier Networks LLC</string>
<key>WindowState</key>
<dict>
<key>dividerCollapsed</key>
@@ -42,9 +44,9 @@
<key>positionOfDivider</key>
<real>333</real>
<key>savedFrame</key>
<string>7 181 602 597 0 0 1280 778 </string>
<string>239 124 602 597 0 0 1280 778 </string>
<key>selectedTabView</key>
<string>result</string>
<string>event log</string>
</dict>
</dict>
</plist>
@@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleAllowMixedLocalizations</key>
<true/>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>applet</string>
<key>CFBundleIconFile</key>
<string>applet</string>
<key>CFBundleIdentifier</key>
<string>com.zerotier.one.ZeroTierOneMacInstallScript</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>ZeroTier One (Authenticate)</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>aplt</string>
<key>LSMinimumSystemVersionByArchitecture</key>
<dict>
<key>x86_64</key>
<string>10.6</string>
</dict>
<key>LSRequiresCarbon</key>
<true/>
<key>NSHumanReadableCopyright</key>
<string>(c) 2013 ZeroTier Networks LLC</string>
<key>WindowState</key>
<dict>
<key>dividerCollapsed</key>
<false/>
<key>eventLogLevel</key>
<integer>-1</integer>
<key>name</key>
<string>ScriptWindowState</string>
<key>positionOfDivider</key>
<real>333</real>
<key>savedFrame</key>
<string>350 166 602 597 0 0 1920 1058 </string>
<key>selectedTabView</key>
<string>event log</string>
</dict>
</dict>
</plist>
@@ -0,0 +1 @@
APPLaplt
Binary file not shown.

After

Width:  |  Height:  |  Size: 362 B

@@ -0,0 +1,4 @@
{\rtf1\ansi\ansicpg1252\cocoartf1265
{\fonttbl}
{\colortbl;\red255\green255\blue255;}
}
+183
View File
@@ -0,0 +1,183 @@
/*
* ZeroTier One - Global Peer to Peer Ethernet
* Copyright (C) 2012-2013 ZeroTier Networks LLC
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* --
*
* ZeroTier may be used and distributed under the terms of the GPLv3, which
* are available at: http://www.gnu.org/licenses/gpl-3.0.html
*
* If you would like to embed ZeroTier into a commercial application or
* redistribute it in a modified binary form, please contact ZeroTier Networks
* LLC. Start here: http://www.zerotier.com/
*/
#include "installdialog.h"
#include "mainwindow.h"
#include "ui_installdialog.h"
#include "../node/Constants.hpp"
#include "../node/Defaults.hpp"
#include "../node/SoftwareUpdater.hpp"
#ifdef __UNIX_LIKE__
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#endif
#include <QMainWindow>
#include <QMessageBox>
#include <QByteArray>
#include <QSslSocket>
#include <QFile>
#include <QDir>
#include <QProcess>
InstallDialog::InstallDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::InstallDialog),
nam(new QNetworkAccessManager(this)),
phase(FETCHING_NFO)
{
ui->setupUi(this);
QObject::connect(nam,SIGNAL(finished(QNetworkReply*)),this,SLOT(on_networkReply(QNetworkReply*)));
const char *nfoUrl = ZeroTier::ZT_DEFAULTS.updateLatestNfoURL.c_str();
if (!*nfoUrl) {
QMessageBox::critical(this,"Download Failed","Download failed: internal error: no update URL configured in build!",QMessageBox::Ok,QMessageBox::NoButton);
QApplication::exit(1);
return;
}
QNetworkReply *reply = nam->get(QNetworkRequest(QUrl(nfoUrl)));
QObject::connect(reply,SIGNAL(downloadProgress(qint64,qint64)),this,SLOT(on_downloadProgress(qint64,qint64)));
}
InstallDialog::~InstallDialog()
{
delete ui;
}
void InstallDialog::on_networkReply(QNetworkReply *reply)
{
reply->deleteLater();
if (reply->error() != QNetworkReply::NoError) {
QMessageBox::critical(this,"Download Failed",QString("Download failed: ") + reply->errorString() + "\n\nAre you connected to the Internet?",QMessageBox::Ok,QMessageBox::NoButton);
QApplication::exit(1);
} else {
if (reply->attribute(QNetworkRequest::HttpStatusCodeAttribute) == 200) {
QByteArray installerData(reply->readAll());
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;
}
#ifdef __APPLE__
QString zt1Caches(QDir::homePath() + "/Library/Caches/ZeroTier/One");
QDir::root().mkpath(zt1Caches);
QString instPath(zt1Caches+"/ZeroTierOneInstaller");
int outfd = ::open(instPath.toStdString().c_str(),O_CREAT|O_TRUNC|O_WRONLY,0755);
if (outfd <= 0) {
QMessageBox::critical(this,"Download Failed",QString("Installation failed: unable to write to ")+instPath,QMessageBox::Ok,QMessageBox::NoButton);
QApplication::exit(1);
return;
}
if (::write(outfd,installerData.data(),installerData.length()) != installerData.length()) {
QMessageBox::critical(this,"Installation Failed",QString("Installation failed: unable to write to ")+instPath,QMessageBox::Ok,QMessageBox::NoButton);
QApplication::exit(1);
return;
}
::close(outfd);
::chmod(instPath.toStdString().c_str(),0755);
QString installHelperPath(QCoreApplication::applicationDirPath() + "/../Resources/helpers/mac/ZeroTier One (Install).app/Contents/MacOS/applet");
if (!QFile::exists(installHelperPath)) {
QMessageBox::critical(this,"Unable to Locate Helper","Unable to locate install helper, cannot install service.",QMessageBox::Ok,QMessageBox::NoButton);
QApplication::exit(1);
return;
}
// Terminate the GUI and execute the install helper instead
::execl(installHelperPath.toStdString().c_str(),installHelperPath.toStdString().c_str(),(const char *)0);
// We only make it here if execl() failed
QMessageBox::critical(this,"Unable to Locate Helper","Unable to locate install helper, cannot install service.",QMessageBox::Ok,QMessageBox::NoButton);
QApplication::exit(1);
return;
#endif
} 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);
}
}
}
void InstallDialog::on_InstallDialog_rejected()
{
QApplication::exit();
}
void InstallDialog::on_cancelButton_clicked()
{
QApplication::exit();
}
void InstallDialog::on_downloadProgress(qint64 bytesReceived,qint64 bytesTotal)
{
if (bytesTotal <= 0) {
ui->progressBar->setValue(0);
ui->progressBar->setMinimum(0);
ui->progressBar->setMaximum(0);
} else {
double pct = ((double)bytesReceived / (double)bytesTotal) * 100.0;
if (pct > 100.0)
pct = 100.0;
ui->progressBar->setMinimum(0);
ui->progressBar->setMaximum(100);
ui->progressBar->setValue((int)pct);
}
}
+71
View File
@@ -0,0 +1,71 @@
/*
* ZeroTier One - Global Peer to Peer Ethernet
* Copyright (C) 2012-2013 ZeroTier Networks LLC
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* --
*
* ZeroTier may be used and distributed under the terms of the GPLv3, which
* are available at: http://www.gnu.org/licenses/gpl-3.0.html
*
* If you would like to embed ZeroTier into a commercial application or
* redistribute it in a modified binary form, please contact ZeroTier Networks
* LLC. Start here: http://www.zerotier.com/
*/
#ifndef INSTALLDIALOG_H
#define INSTALLDIALOG_H
#include <QDialog>
#include <QNetworkAccessManager>
#include <QUrl>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <string>
#include "../node/Address.hpp"
namespace Ui {
class InstallDialog;
}
class InstallDialog : public QDialog
{
Q_OBJECT
public:
explicit InstallDialog(QWidget *parent = 0);
~InstallDialog();
private slots:
void on_networkReply(QNetworkReply *reply);
void on_InstallDialog_rejected();
void on_cancelButton_clicked();
void on_downloadProgress(qint64 bytesReceived,qint64 bytesTotal);
private:
Ui::InstallDialog *ui;
QNetworkAccessManager *nam;
enum {
FETCHING_NFO,
FETCHING_INSTALLER
} phase;
ZeroTier::Address signedBy;
std::string url,signature;
};
#endif // INSTALLDIALOG_H
+131
View File
@@ -0,0 +1,131 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>InstallDialog</class>
<widget class="QDialog" name="InstallDialog">
<property name="windowModality">
<enum>Qt::ApplicationModal</enum>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>547</width>
<height>231</height>
</rect>
</property>
<property name="windowTitle">
<string>Install ZeroTier One Service</string>
</property>
<property name="windowIcon">
<iconset resource="resources.qrc">
<normaloff>:/img/zt1icon.png</normaloff>:/img/zt1icon.png</iconset>
</property>
<property name="sizeGripEnabled">
<bool>true</bool>
</property>
<property name="modal">
<bool>true</bool>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="leftMargin">
<number>6</number>
</property>
<property name="topMargin">
<number>6</number>
</property>
<property name="rightMargin">
<number>6</number>
</property>
<property name="bottomMargin">
<number>6</number>
</property>
<item>
<widget class="QLabel" name="label">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<pointsize>14</pointsize>
</font>
</property>
<property name="text">
<string>Since this is your first time running ZeroTier One on this computer, the virtual Ethernet service must be downloaded and installed.
Please wait while the service downloads, then you will be prompted to enter an administrator password to install it.</string>
</property>
<property name="textFormat">
<enum>Qt::PlainText</enum>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
<property name="margin">
<number>10</number>
</property>
<property name="textInteractionFlags">
<set>Qt::NoTextInteraction</set>
</property>
</widget>
</item>
<item>
<widget class="QProgressBar" name="progressBar">
<property name="maximum">
<number>0</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item>
<widget class="QWidget" name="widget" native="true">
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="cancelButton">
<property name="text">
<string>Cancel and Exit</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<resources>
<include location="resources.qrc"/>
</resources>
<connections/>
</ui>
+27
View File
@@ -1,3 +1,30 @@
/*
* ZeroTier One - Global Peer to Peer Ethernet
* Copyright (C) 2012-2013 ZeroTier Networks LLC
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* --
*
* ZeroTier may be used and distributed under the terms of the GPLv3, which
* are available at: http://www.gnu.org/licenses/gpl-3.0.html
*
* If you would like to embed ZeroTier into a commercial application or
* redistribute it in a modified binary form, please contact ZeroTier Networks
* LLC. Start here: http://www.zerotier.com/
*/
#include "mainwindow.h"
#include <QApplication>
+80 -22
View File
@@ -1,7 +1,35 @@
/*
* ZeroTier One - Global Peer to Peer Ethernet
* Copyright (C) 2012-2013 ZeroTier Networks LLC
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* --
*
* ZeroTier may be used and distributed under the terms of the GPLv3, which
* are available at: http://www.gnu.org/licenses/gpl-3.0.html
*
* If you would like to embed ZeroTier into a commercial application or
* redistribute it in a modified binary form, please contact ZeroTier Networks
* LLC. Start here: http://www.zerotier.com/
*/
#include "mainwindow.h"
#include "aboutwindow.h"
#include "networkwidget.h"
#include "ui_mainwindow.h"
#include "installdialog.h"
#include <string>
#include <map>
@@ -23,6 +51,8 @@
#include <QScrollBar>
#include <QEventLoop>
QNetworkAccessManager *nam;
// Globally visible
ZeroTier::Node::LocalClient *zeroTierClient = (ZeroTier::Node::LocalClient *)0;
@@ -51,20 +81,21 @@ static void handleZTMessage(void *arg,unsigned long id,const char *line)
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
ui(new Ui::MainWindow),
pollServiceTimerId(-1)
{
ui->setupUi(this);
this->startTimer(1000); // poll service every second
this->setEnabled(false); // gets enabled when updates are received
mainWindow = this;
this->cyclesSinceResponseFromService = 0;
if (ui->networkListWidget->verticalScrollBar())
ui->networkListWidget->verticalScrollBar()->setSingleStep(8);
QWidgetList widgets = this->findChildren<QWidget*>();
foreach(QWidget* widget, widgets)
foreach(QWidget *widget, widgets)
widget->setAttribute(Qt::WA_MacShowFocusRect,false);
mainWindow = this;
this->pollServiceTimerId = this->startTimer(1000);
this->setEnabled(false); // gets enabled when updates are received
this->cyclesSinceResponseFromService = 0;
}
MainWindow::~MainWindow()
@@ -79,30 +110,32 @@ void MainWindow::timerEvent(QTimerEvent *event)
{
event->accept();
if (this->isHidden())
return;
if (pollServiceTimerId < 0)
return;
if (!zeroTierClient) {
std::string dotAuthFile((QDir::homePath() + QDir::separator() + ".zeroTierOneAuthToken").toStdString());
std::string authToken;
if (!ZeroTier::Utils::readFile(dotAuthFile.c_str(),authToken)) {
if (!ZeroTier::Utils::readFile(ZeroTier::Node::LocalClient::authTokenDefaultUserPath().c_str(),authToken)) {
#ifdef __APPLE__
// Run the little AppleScript hack that asks for admin credentials and
// then installs the auth token file in the current user's home.
QString authHelperPath(QCoreApplication::applicationDirPath() + "/../Resources/helpers/mac/ZeroTier One (Authenticate).app/Contents/MacOS/applet");
if (!QFile::exists(authHelperPath)) {
// Allow this to also work from the source tree if it's run from there.
// This is for debugging purposes and shouldn't harm the live release
// in any way.
authHelperPath = QCoreApplication::applicationDirPath() + "/../../../../ZeroTierUI/helpers/mac/ZeroTier One (Authenticate).app/Contents/MacOS/applet";
if (QFile::exists("/Library/Application Support/ZeroTier/One/zerotier-one")) {
QMessageBox::information(this,"Authorization Required","You must authenticate to authorize this user to administrate ZeroTier One on this computer.\n\n(This only needs to be done once.)",QMessageBox::Ok,QMessageBox::NoButton);
QString authHelperPath(QCoreApplication::applicationDirPath() + "/../Resources/helpers/mac/ZeroTier One (Authenticate).app/Contents/MacOS/applet");
if (!QFile::exists(authHelperPath)) {
QMessageBox::critical(this,"Unable to Locate Helper","Unable to locate authorization helper, cannot obtain authentication token.",QMessageBox::Ok,QMessageBox::NoButton);
QApplication::exit(1);
return;
}
QProcess::execute(authHelperPath,QStringList());
} else {
doInstallDialog();
return;
}
QProcess::execute(authHelperPath,QStringList());
#endif
if (!ZeroTier::Utils::readFile(dotAuthFile.c_str(),authToken)) {
QMessageBox::critical(this,"Cannot Authorize","Unable to authorize this user to administrate ZeroTier One.\n\nTo do so manually, copy 'authtoken.secret' from the ZeroTier One home directory to '.zeroTierOneAuthToken' in your home directory and set file modes on this file to only be readable by you (e.g. 0600 on Mac or Linux systems).",QMessageBox::Ok,QMessageBox::NoButton);
if (!ZeroTier::Utils::readFile(ZeroTier::Node::LocalClient::authTokenDefaultUserPath().c_str(),authToken)) {
QMessageBox::critical(this,"Cannot Authorize","Unable to authorize this user to administrate ZeroTier One. (Did you enter your password correctly?)",QMessageBox::Ok,QMessageBox::NoButton);
QApplication::exit(1);
return;
}
@@ -113,7 +146,7 @@ void MainWindow::timerEvent(QTimerEvent *event)
// TODO: do something more user-friendly here... or maybe try to restart
// the service?
if (++this->cyclesSinceResponseFromService == 3)
if (++this->cyclesSinceResponseFromService == 4)
QMessageBox::critical(this,"No Response from Service","The ZeroTier One service does not appear to be running.",QMessageBox::Ok,QMessageBox::NoButton);
zeroTierClient->send("info");
@@ -205,6 +238,8 @@ void MainWindow::customEvent(QEvent *event)
}
}
ui->noNetworksLabel->setVisible(ui->networkListWidget->count() == 0);
if (this->myAddress.size())
ui->addressButton->setText(this->myAddress);
else ui->addressButton->setText(" ");
@@ -226,6 +261,14 @@ void MainWindow::customEvent(QEvent *event)
}
}
void MainWindow::showEvent(QShowEvent *event)
{
#ifdef __APPLE__
if (!QFile::exists("/Library/Application Support/ZeroTier/One/zerotier-one"))
doInstallDialog();
#endif
}
void MainWindow::on_joinNetworkButton_clicked()
{
QString toJoin(ui->networkIdLineEdit->text());
@@ -287,3 +330,18 @@ void MainWindow::on_addressButton_clicked()
{
QApplication::clipboard()->setText(this->myAddress);
}
void MainWindow::doInstallDialog()
{
#ifdef __APPLE__
this->setEnabled(false);
if (pollServiceTimerId >= 0) {
this->killTimer(pollServiceTimerId);
pollServiceTimerId = -1;
}
InstallDialog *id = new InstallDialog(this);
id->setModal(true);
id->show();
#endif
}
Loaded 20 of 49 files, more files were not shown because too many files have changed in this diff. Show more