diff --git a/ZeroTierUI/ZeroTierUI.pro b/ZeroTierUI/ZeroTierUI.pro index 245982d37..082477ca3 100644 --- a/ZeroTierUI/ZeroTierUI.pro +++ b/ZeroTierUI/ZeroTierUI.pro @@ -1,4 +1,4 @@ -QT += core gui widgets +QT += core gui widgets network TARGET = "ZeroTier One" TEMPLATE = app diff --git a/ZeroTierUI/mainwindow.cpp b/ZeroTierUI/mainwindow.cpp index d935d0456..4028b7893 100644 --- a/ZeroTierUI/mainwindow.cpp +++ b/ZeroTierUI/mainwindow.cpp @@ -79,6 +79,10 @@ 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; diff --git a/main.cpp b/main.cpp index 0ba758142..dfb00fc5b 100644 --- a/main.cpp +++ b/main.cpp @@ -161,6 +161,9 @@ static int main(int argc,char **argv) return -2; } break; + case 'h': + printHelp(stdout,argv[0]); + return 0; default: return -1; } @@ -178,26 +181,10 @@ static int main(int argc,char **argv) } if (!authToken.length()) { - const char *home = getenv("HOME"); - if (home) { - std::string dotZeroTierAuthToken(home); - dotZeroTierAuthToken.push_back(ZT_PATH_SEPARATOR); - dotZeroTierAuthToken.append(".zerotierOneAuthToken"); - if (!Utils::readFile(dotZeroTierAuthToken.c_str(),authToken)) { -#ifndef __WINDOWS__ -#ifdef __APPLE__ - const char *systemAuthTokenPath = "/Library/Application Support/ZeroTier/One/authtoken.secret"; -#else - const char *systemAuthTokenPath = "/var/lib/zerotier-one/authtoken.secret"; -#endif - if (!Utils::readFile(systemAuthTokenPath,authToken)) { - fprintf(stdout,"FATAL ERROR: no token specified on command line and could not read '%s' or '%s'"ZT_EOL_S,dotZeroTierAuthToken.c_str(),systemAuthTokenPath); - return -2; - } -#else // __WINDOWS__ - fprintf(stdout,"FATAL ERROR: no token specified on command line and could not read '%s'"ZT_EOL_S,dotZeroTierAuthToken.c_str()); + if (!Utils::readFile(Node::LocalClient::authTokenDefaultUserPath().c_str(),authToken)) { + if (!Utils::readFile(Node::LocalClient::authTokenDefaultSystemPath().c_str(),authToken)) { + fprintf(stdout,"FATAL ERROR: no token specified on command line and could not read '%s' or '%s'"ZT_EOL_S,Node::LocalClient::authTokenDefaultSystemPath().c_str(),Node::LocalClient::authTokenDefaultUserPath().c_str()); return -2; -#endif // __WINDOWS__ } } } diff --git a/node/Node.cpp b/node/Node.cpp index cd8cfb5e2..cbea5694d 100644 --- a/node/Node.cpp +++ b/node/Node.cpp @@ -188,6 +188,32 @@ std::vector Node::LocalClient::splitLine(const char *line) return Utils::split(line," ","\\","\""); } +std::string Node::LocalClient::authTokenDefaultUserPath() +{ + const char *home = getenv("HOME"); + if (home) { +#ifdef __APPLE__ + return (std::string(home) + "/Library/Application Support/ZeroTier/One/authtoken.secret"); +#else + return (std::string(home) + "/.zeroTierOneAuthToken"); +#endif + } + return std::string(); +} + +std::string Node::LocalClient::authTokenDefaultSystemPath() +{ +#ifdef __WINDOWS__ + // TODO +#else +#ifdef __APPLE__ + return "/Library/Application Support/ZeroTier/One/authtoken.secret"; +#else + return "/var/lib/zerotier-one/authtoken.secret"; +#endif +#endif +} + struct _NodeImpl { RuntimeEnvironment renv; diff --git a/node/Node.hpp b/node/Node.hpp index 2736713fe..a6410992d 100644 --- a/node/Node.hpp +++ b/node/Node.hpp @@ -84,6 +84,16 @@ public: static std::vector splitLine(const char *line); static inline std::vector splitLine(const std::string &line) { return splitLine(line.c_str()); } + /** + * @return Default path for user-local authorization token for the current user or empty string if cannot be determined + */ + static std::string authTokenDefaultUserPath(); + + /** + * @return Default system path for auth token on this platform + */ + static std::string authTokenDefaultSystemPath(); + private: // LocalClient is not copyable LocalClient(const LocalClient&);