11cdd7e4fSSzymon Dompke #pragma once 21cdd7e4fSSzymon Dompke 3*62c08e9bSKrzysztof Grobelny #include "errors.hpp" 4*62c08e9bSKrzysztof Grobelny 51cdd7e4fSSzymon Dompke #include <sdbusplus/message.hpp> 61cdd7e4fSSzymon Dompke 71cdd7e4fSSzymon Dompke #include <algorithm> 81cdd7e4fSSzymon Dompke #include <ranges> 91cdd7e4fSSzymon Dompke #include <string_view> 101cdd7e4fSSzymon Dompke 111cdd7e4fSSzymon Dompke namespace utils 121cdd7e4fSSzymon Dompke { 131cdd7e4fSSzymon Dompke 141cdd7e4fSSzymon Dompke namespace constants 151cdd7e4fSSzymon Dompke { 161cdd7e4fSSzymon Dompke constexpr std::string_view triggerDirStr = 171cdd7e4fSSzymon Dompke "/xyz/openbmc_project/Telemetry/Triggers/"; 181cdd7e4fSSzymon Dompke constexpr std::string_view reportDirStr = 191cdd7e4fSSzymon Dompke "/xyz/openbmc_project/Telemetry/Reports/"; 201cdd7e4fSSzymon Dompke 211cdd7e4fSSzymon Dompke constexpr std::string_view allowedCharactersInPath = 221cdd7e4fSSzymon Dompke "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_/"; 231cdd7e4fSSzymon Dompke constexpr size_t maxPrefixesInId = 1; 2432305f14SSzymon Dompke constexpr size_t maxPrefixLength{TELEMETRY_MAX_PREFIX_LENGTH}; 2532305f14SSzymon Dompke constexpr size_t maxIdNameLength{TELEMETRY_MAX_ID_NAME_LENGTH}; 2632305f14SSzymon Dompke constexpr size_t maxDbusPathLength{TELEMETRY_MAX_DBUS_PATH_LENGTH}; 2732305f14SSzymon Dompke 2832305f14SSzymon Dompke constexpr size_t maxTriggeFullIdLength{maxDbusPathLength - 2932305f14SSzymon Dompke triggerDirStr.length()}; 3032305f14SSzymon Dompke constexpr size_t maxReportFullIdLength{maxDbusPathLength - 3132305f14SSzymon Dompke reportDirStr.length()}; 3232305f14SSzymon Dompke 3332305f14SSzymon Dompke static_assert(maxPrefixesInId * (maxPrefixLength + 1) + maxIdNameLength <= 3432305f14SSzymon Dompke maxTriggeFullIdLength, 3532305f14SSzymon Dompke "Misconfigured prefix/id/name lengths."); 3632305f14SSzymon Dompke static_assert(maxPrefixesInId * (maxPrefixLength + 1) + maxIdNameLength <= 3732305f14SSzymon Dompke maxReportFullIdLength, 3832305f14SSzymon Dompke "Misconfigured prefix/id/name lengths."); 391cdd7e4fSSzymon Dompke 401cdd7e4fSSzymon Dompke const sdbusplus::message::object_path triggerDirPath = 411cdd7e4fSSzymon Dompke sdbusplus::message::object_path(std::string(triggerDirStr)); 421cdd7e4fSSzymon Dompke const sdbusplus::message::object_path reportDirPath = 431cdd7e4fSSzymon Dompke sdbusplus::message::object_path(std::string(reportDirStr)); 441cdd7e4fSSzymon Dompke } // namespace constants 451cdd7e4fSSzymon Dompke isValidDbusPath(const std::string & path)461cdd7e4fSSzymon Dompkeinline bool isValidDbusPath(const std::string& path) 471cdd7e4fSSzymon Dompke { 481cdd7e4fSSzymon Dompke return (path.find_first_not_of(constants::allowedCharactersInPath) == 491cdd7e4fSSzymon Dompke std::string::npos) && 501cdd7e4fSSzymon Dompke !path.ends_with('/'); 511cdd7e4fSSzymon Dompke } 521cdd7e4fSSzymon Dompke verifyIdCharacters(std::string_view id)5332305f14SSzymon Dompkeinline void verifyIdCharacters(std::string_view id) 5432305f14SSzymon Dompke { 5532305f14SSzymon Dompke if (id.find_first_not_of(utils::constants::allowedCharactersInPath) != 5632305f14SSzymon Dompke std::string::npos) 5732305f14SSzymon Dompke { 58*62c08e9bSKrzysztof Grobelny throw errors::InvalidArgument("Id", "Invalid character."); 5932305f14SSzymon Dompke } 6032305f14SSzymon Dompke } 6132305f14SSzymon Dompke 621cdd7e4fSSzymon Dompke sdbusplus::message::object_path pathAppend(sdbusplus::message::object_path path, 631cdd7e4fSSzymon Dompke const std::string& appended); 641cdd7e4fSSzymon Dompke 651cdd7e4fSSzymon Dompke std::string reportPathToId(const sdbusplus::message::object_path& path); 661cdd7e4fSSzymon Dompke 6732305f14SSzymon Dompke void verifyIdPrefixes(std::string_view id); 6832305f14SSzymon Dompke 691cdd7e4fSSzymon Dompke } // namespace utils 70