bool ApiSetupUtility::SetupMasterEnableApi()
{
+ /*
+ * Ensure the api-users.conf file is included, when conf.d inclusion is disabled.
+ */
+ if (!NodeUtility::GetConfigurationIncludeState("\"conf.d\"", true))
+ NodeUtility::UpdateConfiguration("\"conf.d/api-users.conf\"", true, false);
+
+ /*
+ * Enable the API feature
+ */
Log(LogInformation, "cli", "Enabling the 'api' feature.");
FeatureUtility::EnableFeatures({ "api" });
fp << "}\n\n";
}
+/*
+* Returns true if the include is found, otherwise false
+*/
+bool NodeUtility::GetConfigurationIncludeState(const String& value, bool recursive) {
+ String configurationFile = Application::GetConst("ConfigDir") + "/icinga2.conf";
+
+ Log(LogInformation, "cli")
+ << "Reading '" << configurationFile << "'.";
+
+ std::ifstream ifp(configurationFile.CStr());
+
+ String affectedInclude = value;
+
+ if (recursive)
+ affectedInclude = "include_recursive " + affectedInclude;
+ else
+ affectedInclude = "include " + affectedInclude;
+
+ bool isIncluded = false;
+
+ std::string line;
+
+ while(std::getline(ifp, line)) {
+ /*
+ * Trying to find if the inclusion is enabled.
+ * First hit breaks out of the loop.
+ */
+
+ if (!line.compare(affectedInclude)) {
+ isIncluded = true;
+
+ /*
+ * We can safely break out here, since an enabled include always win.
+ */
+ break;
+ }
+ }
+
+ ifp.close();
+
+ return isIncluded;
+}
+
/*
* include = false, will comment out the include statement
* include = true, will add an include statement or uncomment a statement if one is existing
static bool WriteNodeConfigObjects(const String& filename, const Array::Ptr& objects);
+ static bool GetConfigurationIncludeState(const String& value, bool recursive);
static bool UpdateConfiguration(const String& value, bool include, bool recursive);
static void UpdateConstant(const String& name, const String& value);