summaryrefslogtreecommitdiff
path: root/service/OneService.cpp
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2015-04-15 19:14:12 -0700
committerAdam Ierymenko <adam.ierymenko@gmail.com>2015-04-15 19:14:12 -0700
commit21a7e774bba4832848687dbd8d2e0a1df33650ce (patch)
treef7258ed063b0fca601e33f7f49417f42f95b9600 /service/OneService.cpp
parentc301d8e43859066155801b44b9953d38e3e36d03 (diff)
downloadinfinitytier-21a7e774bba4832848687dbd8d2e0a1df33650ce.tar.gz
infinitytier-21a7e774bba4832848687dbd8d2e0a1df33650ce.zip
Wire API auth token stuff.
Diffstat (limited to 'service/OneService.cpp')
-rw-r--r--service/OneService.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/service/OneService.cpp b/service/OneService.cpp
index f84af0ae..1ba7a8c5 100644
--- a/service/OneService.cpp
+++ b/service/OneService.cpp
@@ -173,6 +173,25 @@ public:
virtual ReasonForTermination run()
{
try {
+ std::string authToken;
+ {
+ std::string authTokenPath(_homePath + ZT_PATH_SEPARATOR_S + "authtoken.secret");
+ if (!OSUtils::readFile(authTokenPath.c_str(),authToken)) {
+ unsigned char foo[24];
+ Utils::getSecureRandom(foo,sizeof(foo));
+ authToken = "";
+ for(unsigned int i=0;i<sizeof(foo);++i)
+ authToken.push_back("abcdefghijklmnopqrstuvwxyz0123456789"[(unsigned long)foo[i] % 36]);
+ if (!OSUtils::writeFile(authTokenPath.c_str(),authToken)) {
+ Mutex::Lock _l(_termReason_m);
+ _termReason = ONE_UNRECOVERABLE_ERROR;
+ _fatalErrorMessage = "authtoken.secret could not be written";
+ return _termReason;
+ } else OSUtils::lockDownFile(authTokenPath.c_str(),false);
+ }
+ }
+ authToken = Utils::trim(authToken);
+
_node = new Node(
OSUtils::now(),
this,
@@ -188,6 +207,7 @@ public:
_node->setNetconfMaster((void *)_master);
_controlPlane = new ControlPlane(this,_node);
+ _controlPlane->addAuthToken(authToken.c_str());
{ // Remember networks from previous session
std::vector<std::string> networksDotD(OSUtils::listDirectory((_homePath + ZT_PATH_SEPARATOR_S + "networks.d").c_str()));