1 /* Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ */ 2 3 #ifndef FILTERUTILITY_H 4 #define FILTERUTILITY_H 5 6 #include "remote/i2-remote.hpp" 7 #include "remote/apiuser.hpp" 8 #include "config/expression.hpp" 9 #include "base/dictionary.hpp" 10 #include "base/configobject.hpp" 11 #include <set> 12 13 namespace icinga 14 { 15 16 class TargetProvider : public Object 17 { 18 public: 19 DECLARE_PTR_TYPEDEFS(TargetProvider); 20 21 virtual void FindTargets(const String& type, const std::function<void (const Value&)>& addTarget) const = 0; 22 virtual Value GetTargetByName(const String& type, const String& name) const = 0; 23 virtual bool IsValidType(const String& type) const = 0; 24 virtual String GetPluralName(const String& type) const = 0; 25 }; 26 27 class ConfigObjectTargetProvider final : public TargetProvider 28 { 29 public: 30 DECLARE_PTR_TYPEDEFS(ConfigObjectTargetProvider); 31 32 void FindTargets(const String& type, const std::function<void (const Value&)>& addTarget) const override; 33 Value GetTargetByName(const String& type, const String& name) const override; 34 bool IsValidType(const String& type) const override; 35 String GetPluralName(const String& type) const override; 36 }; 37 38 struct QueryDescription 39 { 40 std::set<String> Types; 41 TargetProvider::Ptr Provider; 42 String Permission; 43 }; 44 45 /** 46 * Filter utilities. 47 * 48 * @ingroup remote 49 */ 50 class FilterUtility 51 { 52 public: 53 static Type::Ptr TypeFromPluralName(const String& pluralName); 54 static void CheckPermission(const ApiUser::Ptr& user, const String& permission, Expression **filter = nullptr); 55 static std::vector<Value> GetFilterTargets(const QueryDescription& qd, const Dictionary::Ptr& query, 56 const ApiUser::Ptr& user, const String& variableName = String()); 57 static bool EvaluateFilter(ScriptFrame& frame, Expression *filter, 58 const Object::Ptr& target, const String& variableName = String()); 59 }; 60 61 } 62 63 #endif /* FILTERUTILITY_H */ 64