From b681a20b5ac8d568ad0d55b0033ebd42b4a7e4df Mon Sep 17 00:00:00 2001 From: emeric Date: Sat, 7 Jan 2023 14:50:30 +0100 Subject: [PATCH] Subsonic API: report error 41 for auth token attempts --- src/libs/subsonic/impl/ParameterParsing.hpp | 7 +++++++ src/libs/subsonic/impl/SubsonicResource.cpp | 3 +++ src/libs/subsonic/impl/SubsonicResponse.hpp | 9 +++++++++ 3 files changed, 19 insertions(+) diff --git a/src/libs/subsonic/impl/ParameterParsing.hpp b/src/libs/subsonic/impl/ParameterParsing.hpp index 2773a08e..98635c68 100644 --- a/src/libs/subsonic/impl/ParameterParsing.hpp +++ b/src/libs/subsonic/impl/ParameterParsing.hpp @@ -80,5 +80,12 @@ namespace API::Subsonic return *res; } + + inline + bool + hasParameter(const Wt::Http::ParameterMap& parameterMap, const std::string& param) + { + return parameterMap.find(param) != std::cend(parameterMap); + } } diff --git a/src/libs/subsonic/impl/SubsonicResource.cpp b/src/libs/subsonic/impl/SubsonicResource.cpp index f28d8fcb..c8ffad2d 100644 --- a/src/libs/subsonic/impl/SubsonicResource.cpp +++ b/src/libs/subsonic/impl/SubsonicResource.cpp @@ -2114,6 +2114,9 @@ SubsonicResource::getClientInfo(const Wt::Http::ParameterMap& parameters) { ClientInfo res; + if (hasParameter(parameters, "t")) + throw TokenAuthenticationNotSupportedForLDAPUsersError {}; + // Mandatory parameters res.name = getMandatoryParameterAs(parameters, "c"); res.version = getMandatoryParameterAs(parameters, "v"); diff --git a/src/libs/subsonic/impl/SubsonicResponse.hpp b/src/libs/subsonic/impl/SubsonicResponse.hpp index 321d7c76..d2d5294f 100644 --- a/src/libs/subsonic/impl/SubsonicResponse.hpp +++ b/src/libs/subsonic/impl/SubsonicResponse.hpp @@ -48,6 +48,7 @@ class Error ClientMustUpgrade = 20, ServerMustUpgrade = 30, WrongUsernameOrPassword = 40, + TokenAuthenticationNotSupportedForLDAPUsers = 41, UserNotAuthorized = 50, RequestedDataNotFound = 70, }; @@ -105,6 +106,14 @@ class WrongUsernameOrPasswordError : public Error std::string getMessage() const override { return "Wrong username or password."; } }; +class TokenAuthenticationNotSupportedForLDAPUsersError : public Error +{ + public: + TokenAuthenticationNotSupportedForLDAPUsersError() : Error {Code::TokenAuthenticationNotSupportedForLDAPUsers} {} + private: + std::string getMessage() const override { return "Token authentication not supported for LDAP users."; } +}; + class UserNotAuthorizedError : public Error { public: