Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion lib/php-extension/Environment.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,19 @@ unsigned int GetEnvNumber(const std::vector<EnvGetterFn>& envGetters, const std:
return default_value;
}

/* Uses AIKIDO_ENDPOINT if set, otherwise picks the guard endpoint for the region encoded in the token */
std::string GetGuardEndpoint(const std::vector<EnvGetterFn>& envGetters, const std::string& token) {
std::string configuredEndpoint = GetEnvVariable(envGetters, "AIKIDO_ENDPOINT");
if (!configuredEndpoint.empty()) {
return configuredEndpoint;
}
return GetGuardEndpointForRegion(ExtractRegionFromToken(token));
}

std::string GetGuardEndpointWithAllGetters(const std::string& token) {
return GetGuardEndpoint(completeEnvGetters, token);
}

void LoadEnvironmentFromGetters(const std::vector<EnvGetterFn>& envGetters) {
auto& logLevelStr = AIKIDO_GLOBAL(log_level_str);
auto& logLevel = AIKIDO_GLOBAL(log_level);
Expand All @@ -231,7 +244,7 @@ void LoadEnvironmentFromGetters(const std::vector<EnvGetterFn>& envGetters) {
AIKIDO_GLOBAL(disk_logs) = GetEnvBool(envGetters, "AIKIDO_DISK_LOGS", false);
AIKIDO_GLOBAL(sapi_name) = sapi_module.name;
AIKIDO_GLOBAL(token) = GetEnvString(envGetters, "AIKIDO_TOKEN", "");
AIKIDO_GLOBAL(endpoint) = GetEnvString(envGetters, "AIKIDO_ENDPOINT", "https://guard.aikido.dev/");
AIKIDO_GLOBAL(endpoint) = GetGuardEndpoint(envGetters, AIKIDO_GLOBAL(token));
AIKIDO_GLOBAL(config_endpoint) = GetEnvString(envGetters, "AIKIDO_REALTIME_ENDPOINT", "https://runtime.aikido.dev/");
AIKIDO_GLOBAL(report_stats_interval_to_agent) = GetEnvNumber(envGetters, "AIKIDO_REPORT_STATS_INTERVAL", 100);
}
Expand Down
3 changes: 3 additions & 0 deletions lib/php-extension/RequestProcessor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,9 @@ std::string RequestProcessor::GetInitData(const std::string& userProvidedToken)
if (!userProvidedToken.empty()) {
globalToken = userProvidedToken;
}
// Recompute using the final token, since \aikido\set_token() can override the token
// loaded above from the environment (see HandleSetToken.cpp).
AIKIDO_GLOBAL(endpoint) = GetGuardEndpointWithAllGetters(globalToken);
unordered_map<std::string, std::string> packages = GetPackages();
AIKIDO_GLOBAL(uses_symfony_http_foundation) = packages.find("symfony/http-foundation") != packages.end();
json initData = {
Expand Down
39 changes: 39 additions & 0 deletions lib/php-extension/Utils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,45 @@ std::string AnonymizeToken(const std::string& str) {
return str.length() > 4 ? "AIK_RUNTIME_***" + str.substr(str.length() - 4) : "AIK_RUNTIME_***";
}

std::string ExtractRegionFromToken(const std::string& token) {
const std::string prefix = "AIK_RUNTIME_";
if (token.empty() || !StartsWith(token, prefix)) {
return "EU";
}

std::string tokenWithoutPrefix = token.substr(prefix.length());

std::vector<std::string> parts;
size_t start = 0;
size_t sepPos;
while ((sepPos = tokenWithoutPrefix.find('_', start)) != std::string::npos) {
parts.push_back(tokenWithoutPrefix.substr(start, sepPos - start));
start = sepPos + 1;
}
parts.push_back(tokenWithoutPrefix.substr(start));

// New format: AIK_RUNTIME_{sys_group_id}_{service_id}_{region}_{random}
// Old format: AIK_RUNTIME_{sys_group_id}_{service_id}_{random}
if (parts.size() == 4) {
return parts[2];
}

return "EU";
}

std::string GetGuardEndpointForRegion(const std::string& region) {
if (region == "US") {
return "https://guard.us.aikido.dev/";
}
if (region == "ME") {
return "https://guard.me.aikido.dev/";
}
if (region == "AU") {
return "https://guard.au.aikido.dev/";
}
return "https://guard.aikido.dev/";
}

bool FileExists(const std::string& filePath) {
struct stat buffer;
if (stat(filePath.c_str(), &buffer) == 0) {
Expand Down
2 changes: 2 additions & 0 deletions lib/php-extension/include/Environment.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,5 @@ void LoadSystemEnvironment();
bool LoadLaravelEnvFile();

bool GetEnvBoolWithAllGetters(const std::string& env_key, bool default_value);

std::string GetGuardEndpointWithAllGetters(const std::string& token);
4 changes: 4 additions & 0 deletions lib/php-extension/include/Utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,10 @@ json CallPhpFunctionParseUrl(const std::string& url);

std::string AnonymizeToken(const std::string& str);

std::string ExtractRegionFromToken(const std::string& token);

std::string GetGuardEndpointForRegion(const std::string& region);

bool FileExists(const std::string& filePath);

bool RemoveFile(const std::string& filePath);
Expand Down
Loading