# HG changeset patch # User Sebastien Jodogne # Date 1460043740 -7200 # Node ID 22ddb22fce83329cbee3f25728b7bc5d30e68b0e # Parent ef1e9856c26f563b9c4bed3038470dd9174ef218 sample plugin diff -r ef1e9856c26f -r 22ddb22fce83 OrthancServer/main.cpp --- a/OrthancServer/main.cpp Thu Apr 07 17:26:13 2016 +0200 +++ b/OrthancServer/main.cpp Thu Apr 07 17:42:20 2016 +0200 @@ -278,9 +278,13 @@ { private: ServerContext& context_; + OrthancPlugins* plugins_; public: - MyIncomingHttpRequestFilter(ServerContext& context) : context_(context) + MyIncomingHttpRequestFilter(ServerContext& context, + OrthancPlugins* plugins) : + context_(context), + plugins_(plugins) { } @@ -290,6 +294,12 @@ const char* username, const IHttpHandler::Arguments& httpHeaders) const { + if (plugins_ != NULL && + !plugins_->IsAllowed(method, uri, ip, username, httpHeaders)) + { + return false; + } + static const char* HTTP_FILTER = "IncomingHttpRequestFilter"; LuaScripting::Locker locker(context_.GetLua()); @@ -679,7 +689,7 @@ // HTTP server - MyIncomingHttpRequestFilter httpFilter(context); + MyIncomingHttpRequestFilter httpFilter(context, plugins); MongooseServer httpServer; httpServer.SetPortNumber(Configuration::GetGlobalIntegerParameter("HttpPort", 8042)); httpServer.SetRemoteAccessAllowed(Configuration::GetGlobalBoolParameter("RemoteAccessAllowed", false)); diff -r ef1e9856c26f -r 22ddb22fce83 Plugins/Engine/OrthancPlugins.cpp --- a/Plugins/Engine/OrthancPlugins.cpp Thu Apr 07 17:26:13 2016 +0200 +++ b/Plugins/Engine/OrthancPlugins.cpp Thu Apr 07 17:42:20 2016 +0200 @@ -2431,18 +2431,15 @@ const char* username, const IHttpHandler::Arguments& httpHeaders) const { - std::vector httpKeys; - std::vector httpValues; - - httpKeys.reserve(httpHeaders.size()); - httpValues.reserve(httpHeaders.size()); + std::vector httpKeys(httpHeaders.size()); + std::vector httpValues(httpHeaders.size()); size_t pos = 0; for (IHttpHandler::Arguments::const_iterator it = httpHeaders.begin(); it != httpHeaders.end(); ++it, pos++) { httpKeys[pos] = it->first.c_str(); - httpValues[pos] = it->first.c_str(); + httpValues[pos] = it->second.c_str(); } OrthancPluginHttpMethod cMethod = Plugins::Convert(method); diff -r ef1e9856c26f -r 22ddb22fce83 Plugins/Include/orthanc/OrthancCPlugin.h --- a/Plugins/Include/orthanc/OrthancCPlugin.h Thu Apr 07 17:26:13 2016 +0200 +++ b/Plugins/Include/orthanc/OrthancCPlugin.h Thu Apr 07 17:42:20 2016 +0200 @@ -974,7 +974,7 @@ OrthancPluginHttpMethod method, const char* uri, const char* ip, - const uint32_t headersCount, + uint32_t headersCount, const char* const* headersKeys, const char* const* headersValues); diff -r ef1e9856c26f -r 22ddb22fce83 Plugins/Samples/Basic/Plugin.c --- a/Plugins/Samples/Basic/Plugin.c Thu Apr 07 17:26:13 2016 +0200 +++ b/Plugins/Samples/Basic/Plugin.c Thu Apr 07 17:42:20 2016 +0200 @@ -322,6 +322,38 @@ } +ORTHANC_PLUGINS_API int32_t FilterIncomingHttpRequest(OrthancPluginHttpMethod method, + const char* uri, + const char* ip, + uint32_t headersCount, + const char* const* headersKeys, + const char* const* headersValues) +{ + uint32_t i; + + if (headersCount > 0) + { + OrthancPluginLogInfo(context, "HTTP headers of an incoming REST request:"); + for (i = 0; i < headersCount; i++) + { + char info[1024]; + sprintf(info, " %s: %s", headersKeys[i], headersValues[i]); + OrthancPluginLogInfo(context, info); + } + } + + if (method == OrthancPluginHttpMethod_Get || + method == OrthancPluginHttpMethod_Post) + { + return 1; /* Allowed */ + } + else + { + return 0; /* Only allow GET and POST requests */ + } +} + + ORTHANC_PLUGINS_API int32_t OrthancPluginInitialize(OrthancPluginContext* c) { OrthancPluginMemoryBuffer tmp; @@ -384,8 +416,8 @@ OrthancPluginRegisterRestCallback(context, "/plugin/create", CallbackCreateDicom); OrthancPluginRegisterOnStoredInstanceCallback(context, OnStoredCallback); - OrthancPluginRegisterOnChangeCallback(context, OnChangeCallback); + OrthancPluginRegisterIncomingHttpRequestFilter(context, FilterIncomingHttpRequest); /* Declare several properties of the plugin */ OrthancPluginSetRootUri(context, "/plugin/hello");