Browse Source

More install/deploy work for mac...

Adam Ierymenko 11 years ago
parent
commit
59b1623477

+ 7 - 7
ZeroTierUI/ZeroTierUI.pro

@@ -37,9 +37,9 @@ 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
 
 HEADERS  += mainwindow.h \
 		aboutwindow.h \
@@ -86,13 +86,13 @@ 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
 
 FORMS    += mainwindow.ui \
 		aboutwindow.ui \
-    networkwidget.ui
+		networkwidget.ui
 
 RESOURCES += \
 		resources.qrc

+ 1 - 1
ZeroTierUI/helpers/mac/ZeroTier One (Authenticate).app/Contents/Info.plist

@@ -44,7 +44,7 @@
 		<key>positionOfDivider</key>
 		<real>333</real>
 		<key>savedFrame</key>
-		<string>36 164 602 597 0 0 1280 778 </string>
+		<string>239 124 602 597 0 0 1280 778 </string>
 		<key>selectedTabView</key>
 		<string>event log</string>
 	</dict>

BIN
ZeroTierUI/helpers/mac/ZeroTier One (Authenticate).app/Contents/Resources/Scripts/main.scpt


+ 1 - 1
ZeroTierUI/helpers/mac/ZeroTier One (Install).app/Contents/Info.plist

@@ -42,7 +42,7 @@
 		<key>positionOfDivider</key>
 		<real>333</real>
 		<key>savedFrame</key>
-		<string>265 106 602 597 0 0 1280 778 </string>
+		<string>68 169 602 597 0 0 1280 778 </string>
 		<key>selectedTabView</key>
 		<string>event log</string>
 	</dict>

BIN
ZeroTierUI/helpers/mac/ZeroTier One (Install).app/Contents/Resources/Scripts/main.scpt


+ 36 - 17
ZeroTierUI/mainwindow.cpp

@@ -23,6 +23,8 @@
 #include <QScrollBar>
 #include <QEventLoop>
 
+QNetworkAccessManager *nam;
+
 // Globally visible
 ZeroTier::Node::LocalClient *zeroTierClient = (ZeroTier::Node::LocalClient *)0;
 
@@ -51,7 +53,8 @@ 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),
+	nam(new QNetworkAccessManager(this))
 {
 	ui->setupUi(this);
 	this->startTimer(1000); // poll service every second
@@ -59,6 +62,8 @@ MainWindow::MainWindow(QWidget *parent) :
 	mainWindow = this;
 	this->cyclesSinceResponseFromService = 0;
 
+	QObject::connect(nam,SIGNAL(finished(QNetworkReply*)),this,SLOT(on_networkReply(QNetworkReply*)));
+
 	if (ui->networkListWidget->verticalScrollBar())
 		ui->networkListWidget->verticalScrollBar()->setSingleStep(8);
 
@@ -79,30 +84,40 @@ void MainWindow::timerEvent(QTimerEvent *event)
 {
 	event->accept();
 
-#ifdef __APPLE__
-#else
-#endif
-
 	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")) {
+				// 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)) {
-					QMessageBox::critical(this,"Unable to Locate Helper","Unable to locate authorization helper, cannot obtain authentication token.",QMessageBox::Ok,QMessageBox::NoButton);
+					// 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(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 {
+				// Download the latest version and install it
+				this->setEnabled(false);
+
+				// Run the little AppleScript hack that asks for admin credentials and
+				// then installs the auth token file in the current user's home.
+				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;
 				}
+				QProcess::execute(installHelperPath,QStringList());
 			}
-			QProcess::execute(authHelperPath,QStringList());
 #endif
 
 			if (!ZeroTier::Utils::readFile(dotAuthFile.c_str(),authToken)) {
@@ -291,3 +306,7 @@ void MainWindow::on_addressButton_clicked()
 {
 	QApplication::clipboard()->setText(this->myAddress);
 }
+
+void MainWindow::on_networkReply(QNetworkReply *reply)
+{
+}

+ 6 - 0
ZeroTierUI/mainwindow.h

@@ -4,6 +4,10 @@
 #include <QMainWindow>
 #include <QEvent>
 #include <QString>
+#include <QNetworkAccessManager>
+#include <QUrl>
+#include <QNetworkRequest>
+#include <QNetworkReply>
 
 #include <map>
 #include <vector>
@@ -51,10 +55,12 @@ private slots:
 	void on_actionAbout_triggered();
 	void on_networkIdLineEdit_textChanged(const QString &text);
 	void on_addressButton_clicked();
+	void on_networkReply(QNetworkReply *reply);
 
 private:
 	Ui::MainWindow *ui;
 
+	QNetworkAccessManager *nam;
 	QString myAddress;
 	QString myStatus;
 	QString myVersion;

+ 31 - 1
ext/installfiles/mac/install.tmpl.sh

@@ -15,10 +15,19 @@ fi
 if [ $dryRun -gt 0 ]; then
 	alias ln="echo '>> dry run: ln'"
 	alias rm="echo '>> dry run: rm'"
+	alias mv="echo '>> dry run: mv'"
+	alias chown="echo '>> dry run: chown'"
+	alias chgrp="echo '>> dry run: chgrp'"
 	alias launchctl="echo '>> dry run: launchctl'"
 	alias zerotier-cli="echo '>> dry run: zerotier-cli'"
 fi
 
+zthome="/Library/Application Support/ZeroTier/One"
+ztapp=`mdfind kMDItemCFBundleIdentifier == 'com.zerotier.ZeroTierOne'`
+if [ ! -d "$ztapp" ]; then
+	ztapp="/Applications/ZeroTier One.app"
+fi
+
 scriptPath="`dirname "$0"`/`basename "$0"`"
 if [ ! -r "$scriptPath" ]; then
 	scriptPath="$0"
@@ -46,11 +55,32 @@ else
 	tail -c +$blobStart "$scriptPath" | bunzip2 -c | tar -xvop -C / -f -
 fi
 
-if [ $dryRun -eq 0 -a ! -f "/Library/LaunchDaemons/com.zerotier.one.plist" ]; then
+if [ $dryRun -eq 0 -a ! -d "/Applications/ZeroTierOne_app.LATEST" ]; then
 	echo 'Archive extraction failed, cannot find zerotier-one binary.'
 	exit 2
 fi
 
+echo 'Installing/updating ZeroTier One.app...'
+
+if [ -d "$ztapp" ]; then
+	# Preserve ownership of existing .app and install new version in the
+	# same location.
+	currentAppOwner=`stat -f '%u' "$ztapp"`
+	currentAppGroup=`stat -f '%g' "$ztapp"`
+	if [ ! -z "$currentAppOwner" -a ! -z "$currentAppGroup" ]; then
+		rm -rf "$ztapp"
+		mv -f "/Application/ZeroTierOne_app.LATEST" "$ztapp"
+		chown -R $currentAppOwner "$ztapp"
+		chgrp -R $currentAppGroup "$ztapp"
+	else
+		rm -rf "$ztapp"
+		mv -f "/Application/ZeroTierOne_app.LATEST" "$ztapp"
+	fi
+else
+	# If there is no existing app, just drop the shipped one into place
+	mv -f "/Applications/ZeroTierOne_app.LATEST" "/Applications/ZeroTierOne.app"
+fi
+
 echo 'Installing zerotier-cli command line utility...'
 
 ln -sf "/Library/Application Support/ZeroTier/One/zerotier-one" /usr/bin/zerotier-cli