1 /* Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ */ 2 3 #ifndef CONFIGMODULEUTILITY_H 4 #define CONFIGMODULEUTILITY_H 5 6 #include "remote/i2-remote.hpp" 7 #include "base/application.hpp" 8 #include "base/dictionary.hpp" 9 #include "base/process.hpp" 10 #include "base/string.hpp" 11 #include <vector> 12 13 namespace icinga 14 { 15 16 /** 17 * Helper functions. 18 * 19 * @ingroup remote 20 */ 21 class ConfigPackageUtility 22 { 23 24 public: 25 static String GetPackageDir(); 26 27 static void CreatePackage(const String& name); 28 static void DeletePackage(const String& name); 29 static std::vector<String> GetPackages(); 30 static bool PackageExists(const String& name); 31 32 static String CreateStage(const String& packageName, const Dictionary::Ptr& files = nullptr); 33 static void DeleteStage(const String& packageName, const String& stageName); 34 static std::vector<String> GetStages(const String& packageName); 35 static String GetActiveStageFromFile(const String& packageName); 36 static String GetActiveStage(const String& packageName); 37 static void SetActiveStage(const String& packageName, const String& stageName); 38 static void SetActiveStageToFile(const String& packageName, const String& stageName); 39 static void ActivateStage(const String& packageName, const String& stageName); 40 static void AsyncTryActivateStage(const String& packageName, const String& stageName, bool activate, bool reload); 41 42 static std::vector<std::pair<String, bool> > GetFiles(const String& packageName, const String& stageName); 43 44 static bool ContainsDotDot(const String& path); 45 static bool ValidatePackageName(const String& packageName); 46 47 static inline ValidateStageName(const String & stageName)48 bool ValidateStageName(const String& stageName) 49 { 50 return ValidateFreshName(stageName); 51 } 52 53 static std::mutex& GetStaticPackageMutex(); 54 static std::mutex& GetStaticActiveStageMutex(); 55 56 private: 57 static void CollectPaths(const String& path, std::vector<std::pair<String, bool> >& paths); 58 59 static void WritePackageConfig(const String& packageName); 60 static void WriteStageConfig(const String& packageName, const String& stageName); 61 62 static void TryActivateStageCallback(const ProcessResult& pr, const String& packageName, const String& stageName, bool activate, bool reload); 63 64 static bool ValidateFreshName(const String& name); 65 }; 66 67 } 68 69 #endif /* CONFIGMODULEUTILITY_H */ 70