Mercurial > hg > orthanc
changeset 6241:54c8e2398c94
provide GET arguments to HTTP authentication callback
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Fri, 11 Jul 2025 10:00:55 +0200 |
parents | a6c9451fbade |
children | 67f9625abb90 |
files | OrthancFramework/Sources/HttpServer/HttpServer.cpp OrthancFramework/Sources/HttpServer/IIncomingHttpRequestFilter.h OrthancServer/Plugins/Engine/OrthancPlugins.cpp OrthancServer/Plugins/Engine/OrthancPlugins.h OrthancServer/Plugins/Include/orthanc/OrthancCPlugin.h OrthancServer/Sources/main.cpp |
diffstat | 6 files changed, 32 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/OrthancFramework/Sources/HttpServer/HttpServer.cpp Fri Jul 11 09:41:19 2025 +0200 +++ b/OrthancFramework/Sources/HttpServer/HttpServer.cpp Fri Jul 11 10:00:55 2025 +0200 @@ -1283,7 +1283,7 @@ } else { - status = filter->CheckAuthentication(authenticationPayload, redirection, requestUri, headers); + status = filter->CheckAuthentication(authenticationPayload, redirection, requestUri, argumentsGET, headers); } switch (status)
--- a/OrthancFramework/Sources/HttpServer/IIncomingHttpRequestFilter.h Fri Jul 11 09:41:19 2025 +0200 +++ b/OrthancFramework/Sources/HttpServer/IIncomingHttpRequestFilter.h Fri Jul 11 10:00:55 2025 +0200 @@ -50,6 +50,7 @@ virtual AuthenticationStatus CheckAuthentication(std::string& customPayload /* out: payload to provide to "IsAllowed()" */, std::string& redirection /* out: path relative to the root */, const std::string& uri, + const HttpToolbox::GetArguments& getArguments, const HttpToolbox::Arguments& httpHeaders) const = 0; // This method corresponds to HTTP authorization
--- a/OrthancServer/Plugins/Engine/OrthancPlugins.cpp Fri Jul 11 09:41:19 2025 +0200 +++ b/OrthancServer/Plugins/Engine/OrthancPlugins.cpp Fri Jul 11 10:00:55 2025 +0200 @@ -2355,6 +2355,11 @@ std::vector<const char*>& values, const HttpToolbox::Arguments& arguments) { + if (static_cast<uint32_t>(arguments.size()) != arguments.size()) + { + throw OrthancException(ErrorCode_NotEnoughMemory); + } + keys.resize(arguments.size()); values.resize(arguments.size()); @@ -2366,6 +2371,8 @@ values[pos] = it->second.c_str(); pos++; } + + assert(pos == arguments.size()); } @@ -2373,6 +2380,11 @@ std::vector<const char*>& values, const HttpToolbox::GetArguments& arguments) { + if (static_cast<uint32_t>(arguments.size()) != arguments.size()) + { + throw OrthancException(ErrorCode_NotEnoughMemory); + } + keys.resize(arguments.size()); values.resize(arguments.size()); @@ -6862,6 +6874,7 @@ std::string& customPayload, std::string& redirection, const std::string& uri, + const HttpToolbox::GetArguments& getArguments, const HttpToolbox::Arguments& httpHeaders) const { boost::shared_lock<boost::shared_mutex> lock(pimpl_->incomingHttpRequestFilterMutex_); @@ -6872,27 +6885,19 @@ } else { - std::vector<const char*> keys, values; - keys.resize(httpHeaders.size()); - values.resize(httpHeaders.size()); - - uint32_t i = 0; - for (HttpToolbox::Arguments::const_iterator it = httpHeaders.begin(); it != httpHeaders.end(); ++it) - { - keys[i] = it->first.c_str(); - values[i] = it->second.c_str(); - i++; - } - - assert(i == httpHeaders.size()); + std::vector<const char*> headersKeys, headersValues; + ArgumentsToPlugin(headersKeys, headersValues, httpHeaders); + + std::vector<const char*> getKeys, getValues; + ArgumentsToPlugin(getKeys, getValues, getArguments); OrthancPluginHttpAuthenticationStatus status = OrthancPluginHttpAuthenticationStatus_Unauthorized; PluginMemoryBuffer32 payloadBuffer; PluginMemoryBuffer32 redirectionBuffer; OrthancPluginErrorCode code = pimpl_->httpAuthentication_( - &status, payloadBuffer.GetObject(), redirectionBuffer.GetObject(), uri.c_str(), i, - keys.empty() ? NULL : &keys[0], - values.empty() ? NULL : &values[0]); + &status, payloadBuffer.GetObject(), redirectionBuffer.GetObject(), uri.c_str(), + getKeys.size(), getKeys.empty() ? NULL : &getKeys[0], getValues.empty() ? NULL : &getValues[0], + headersKeys.size(), headersKeys.empty() ? NULL : &headersKeys[0], headersValues.empty() ? NULL : &headersValues[0]); if (code != OrthancPluginErrorCode_Success) {
--- a/OrthancServer/Plugins/Engine/OrthancPlugins.h Fri Jul 11 09:41:19 2025 +0200 +++ b/OrthancServer/Plugins/Engine/OrthancPlugins.h Fri Jul 11 10:00:55 2025 +0200 @@ -424,6 +424,7 @@ std::string& customPayload, std::string& redirection, const std::string& uri, + const HttpToolbox::GetArguments& getArguments, const HttpToolbox::Arguments& httpHeaders) const; }; }
--- a/OrthancServer/Plugins/Include/orthanc/OrthancCPlugin.h Fri Jul 11 09:41:19 2025 +0200 +++ b/OrthancServer/Plugins/Include/orthanc/OrthancCPlugin.h Fri Jul 11 10:00:55 2025 +0200 @@ -10391,6 +10391,9 @@ * a buffer filled with the path where to redirect the user (typically, a login page). * The path is relative to the root of the Web server of Orthanc. * @param uri The URI of interest (without the possible GET arguments). + * @param getCount For a GET request, the number of GET parameters. + * @param getKeys For a GET request, the keys of the GET parameters. + * @param getValues For a GET request, the values of the GET parameters. * @param headersCount The number of HTTP headers. * @param headersKeys The keys of the HTTP headers (always converted to low-case). * @param headersValues The values of the HTTP headers. @@ -10402,6 +10405,9 @@ OrthancPluginMemoryBuffer* customPayload, /* out */ OrthancPluginMemoryBuffer* redirection, /* out */ const char* uri, + uint32_t getCount, + const char* const* getKeys, + const char* const* getValues, uint32_t headersCount, const char* const* headersKeys, const char* const* headersValues);
--- a/OrthancServer/Sources/main.cpp Fri Jul 11 09:41:19 2025 +0200 +++ b/OrthancServer/Sources/main.cpp Fri Jul 11 10:00:55 2025 +0200 @@ -608,12 +608,13 @@ virtual AuthenticationStatus CheckAuthentication(std::string& customPayload, std::string& redirection, const std::string& uri, + const HttpToolbox::GetArguments& getArguments, const HttpToolbox::Arguments& httpHeaders) const ORTHANC_OVERRIDE { #if ORTHANC_ENABLE_PLUGINS == 1 if (plugins_ != NULL) { - return plugins_->CheckAuthentication(customPayload, redirection, uri, httpHeaders); + return plugins_->CheckAuthentication(customPayload, redirection, uri, getArguments, httpHeaders); } #endif