|
|
|
|
@ -28,6 +28,9 @@
|
|
|
|
|
#include <map> |
|
|
|
|
#include <thread> |
|
|
|
|
#include <memory> |
|
|
|
|
#include <iomanip> |
|
|
|
|
#include <sstream> |
|
|
|
|
#include <cctype> |
|
|
|
|
|
|
|
|
|
#include "../include/ZeroTierOne.h" |
|
|
|
|
#include "../version.h" |
|
|
|
|
@ -60,6 +63,29 @@ namespace ZeroTier {
|
|
|
|
|
|
|
|
|
|
namespace { |
|
|
|
|
|
|
|
|
|
std::string url_encode(const std::string &value) { |
|
|
|
|
std::ostringstream escaped; |
|
|
|
|
escaped.fill('0'); |
|
|
|
|
escaped << std::hex; |
|
|
|
|
|
|
|
|
|
for (std::string::const_iterator i = value.begin(), n = value.end(); i != n; ++i) { |
|
|
|
|
std::string::value_type c = (*i); |
|
|
|
|
|
|
|
|
|
// Keep alphanumeric and other accepted characters intact
|
|
|
|
|
if (isalnum(c) || c == '-' || c == '_' || c == '.' || c == '~') { |
|
|
|
|
escaped << c; |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Any other characters are percent-encoded
|
|
|
|
|
escaped << std::uppercase; |
|
|
|
|
escaped << '%' << std::setw(2) << int((unsigned char) c); |
|
|
|
|
escaped << std::nouppercase; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return escaped.str(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static json _renderRule(ZT_VirtualNetworkRule &rule) |
|
|
|
|
{ |
|
|
|
|
char tmp[128]; |
|
|
|
|
@ -476,6 +502,10 @@ EmbeddedNetworkController::~EmbeddedNetworkController()
|
|
|
|
|
t->join(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void EmbeddedNetworkController::setSSORedirectURL(const std::string &url) { |
|
|
|
|
_ssoRedirectURL = url_encode(url); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void EmbeddedNetworkController::init(const Identity &signingId,Sender *sender) |
|
|
|
|
{ |
|
|
|
|
char tmp[64]; |
|
|
|
|
@ -1338,7 +1368,7 @@ void EmbeddedNetworkController::_request(
|
|
|
|
|
int64_t authenticationExpiryTime = (int64_t)OSUtils::jsonInt(member["authenticationExpiryTime"], 0); |
|
|
|
|
fprintf(stderr, "authExpiryTime: %lld\n", authenticationExpiryTime); |
|
|
|
|
if ((authenticationExpiryTime == 0) || (authenticationExpiryTime < now)) { |
|
|
|
|
std::string authenticationURL = _db.getSSOAuthURL(member); |
|
|
|
|
std::string authenticationURL = _db.getSSOAuthURL(member, _ssoRedirectURL); |
|
|
|
|
if (!authenticationURL.empty()) { |
|
|
|
|
Dictionary<3072> authInfo; |
|
|
|
|
authInfo.add("aU", authenticationURL.c_str()); |
|
|
|
|
|