From 366420013fa42843451eb375f1bec38dc1166088 Mon Sep 17 00:00:00 2001 From: emeric Date: Tue, 9 Apr 2019 13:23:38 +0200 Subject: [PATCH] Subsonic API: added request parameters in debug (but censored clear text passwords) --- TODO | 3 --- src/api/subsonic/SubsonicResource.cpp | 39 ++++++++++++++++++++++++--- 2 files changed, 36 insertions(+), 6 deletions(-) diff --git a/TODO b/TODO index 1935aaf5..5def175b 100644 --- a/TODO +++ b/TODO @@ -32,8 +32,5 @@ [Settings] - Add multi root directories support -[REST API] -- Make a dedicated REST API. Maybe use the SubSonic API or Ampache API? - [Logs] - Capture transcoder log output to get more information on errors? diff --git a/src/api/subsonic/SubsonicResource.cpp b/src/api/subsonic/SubsonicResource.cpp index e9e6af8e..b5dcb0e7 100644 --- a/src/api/subsonic/SubsonicResource.cpp +++ b/src/api/subsonic/SubsonicResource.cpp @@ -94,7 +94,7 @@ static Response handleSearch2Request(const Wt::Http::ParameterMap& request, Data static Response handleSearch3Request(const Wt::Http::ParameterMap& request, Database::Handler& db); // MediaRetrievals -using MediaRetrivalHandlerFunc = std::function; +using MediaRetrievalHandlerFunc = std::function; void handleStream(const Wt::Http::Request& request, Database::Handler& db, Wt::Http::Response& response); void handleGetCoverArt(const Wt::Http::Request& request, Database::Handler& db, Wt::Http::Response& response); @@ -122,7 +122,7 @@ static std::map requestHandlers {SEARCH3_URL, handleSearch3Request}, }; -static std::map mediaRetrievalHandlers +static std::map mediaRetrievalHandlers { {STREAM_URL, handleStream}, {GET_COVER_ART_URL, handleGetCoverArt}, @@ -257,10 +257,43 @@ SubsonicResource::getPaths() return paths; } +static +std::string parameterMapToDebugString(const Wt::Http::ParameterMap& parameterMap) +{ + auto censorValue = [](const std::string& type, const std::string& value) + { + if (type == "p") + return std::string {"CENSORED"}; + else + return value; + }; + + std::string res; + + for (const auto& params : parameterMap) + { + res += "{" + params.first + "="; + if (params.second.size() == 1) + { + res += censorValue(params.first, params.second.front()); + } + else + { + res += "{"; + for (const std::string& param : params.second) + res += censorValue(params.first, param) + ","; + res += "}"; + } + res += "}, "; + } + + return res; +} + void SubsonicResource::handleRequest(const Wt::Http::Request &request, Wt::Http::Response &response) { - LMS_LOG(API_SUBSONIC, DEBUG) << "REQUEST " << request.path(); + LMS_LOG(API_SUBSONIC, DEBUG) << "Handling request '" << request.path() << "', params = " << parameterMapToDebugString(request.getParameterMap()); const Wt::Http::ParameterMap& parameters {request.getParameterMap()};