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.

This commit is contained in:
Adam Ierymenko 2014-01-03 14:03:29 -08:00
parent baea75f2df
commit 22b52858e0
5 changed files with 47 additions and 20 deletions

View File

@ -1,4 +1,4 @@
QT += core gui widgets QT += core gui widgets network
TARGET = "ZeroTier One" TARGET = "ZeroTier One"
TEMPLATE = app TEMPLATE = app

View File

@ -79,6 +79,10 @@ void MainWindow::timerEvent(QTimerEvent *event)
{ {
event->accept(); event->accept();
#ifdef __APPLE__
#else
#endif
if (!zeroTierClient) { if (!zeroTierClient) {
std::string dotAuthFile((QDir::homePath() + QDir::separator() + ".zeroTierOneAuthToken").toStdString()); std::string dotAuthFile((QDir::homePath() + QDir::separator() + ".zeroTierOneAuthToken").toStdString());
std::string authToken; std::string authToken;

View File

@ -161,6 +161,9 @@ static int main(int argc,char **argv)
return -2; return -2;
} }
break; break;
case 'h':
printHelp(stdout,argv[0]);
return 0;
default: default:
return -1; return -1;
} }
@ -178,26 +181,10 @@ static int main(int argc,char **argv)
} }
if (!authToken.length()) { if (!authToken.length()) {
const char *home = getenv("HOME"); if (!Utils::readFile(Node::LocalClient::authTokenDefaultUserPath().c_str(),authToken)) {
if (home) { if (!Utils::readFile(Node::LocalClient::authTokenDefaultSystemPath().c_str(),authToken)) {
std::string dotZeroTierAuthToken(home); 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());
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());
return -2; return -2;
#endif // __WINDOWS__
} }
} }
} }

View File

@ -188,6 +188,32 @@ std::vector<std::string> Node::LocalClient::splitLine(const char *line)
return Utils::split(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 struct _NodeImpl
{ {
RuntimeEnvironment renv; RuntimeEnvironment renv;

View File

@ -84,6 +84,16 @@ public:
static std::vector<std::string> splitLine(const char *line); static std::vector<std::string> splitLine(const char *line);
static inline std::vector<std::string> splitLine(const std::string &line) { return splitLine(line.c_str()); } static inline std::vector<std::string> 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: private:
// LocalClient is not copyable // LocalClient is not copyable
LocalClient(const LocalClient&); LocalClient(const LocalClient&);