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