Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package orthanc-authorization for 
openSUSE:Factory checked in at 2026-01-26 11:05:50
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/orthanc-authorization (Old)
 and      /work/SRC/openSUSE:Factory/.orthanc-authorization.new.1928 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "orthanc-authorization"

Mon Jan 26 11:05:50 2026 rev:9 rq:1329067 version:0.10.3

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/orthanc-authorization/orthanc-authorization.changes  
    2025-10-12 22:29:46.599320109 +0200
+++ 
/work/SRC/openSUSE:Factory/.orthanc-authorization.new.1928/orthanc-authorization.changes
    2026-01-26 11:05:55.239027633 +0100
@@ -1,0 +2,8 @@
+Sun Jan 25 11:25:13 UTC 2026 - Axel Braun <[email protected]>
+
+- version 0.10.3
+  * New default permissions for worklists
+  * New default permissions for tools/metrics-prometheus
+  * New default permissions for tools/generate-uid
+
+-------------------------------------------------------------------

Old:
----
  OrthancAuthorization-0.10.2.tar.gz

New:
----
  OrthancAuthorization-0.10.3.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ orthanc-authorization.spec ++++++
--- /var/tmp/diff_new_pack.ZaPB9Y/_old  2026-01-26 11:05:56.191067465 +0100
+++ /var/tmp/diff_new_pack.ZaPB9Y/_new  2026-01-26 11:05:56.191067465 +0100
@@ -1,8 +1,8 @@
 #
 # spec file for package orthanc-authorization
 #
-# Copyright (c) 2025 SUSE LLC and contributors
-# Copyright (c) 2025 Dr. Axel Braun <[email protected]>
+# Copyright (c) 2026 SUSE LLC and contributors
+# Copyright (c) 2025-2026 Dr. Axel Braun <[email protected]>
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -21,7 +21,7 @@
 Summary:        Authorisation plugin for Orthanc
 License:        GPL-3.0-or-later
 Group:          Productivity/Graphics/Viewers
-Version:        0.10.2
+Version:        0.10.3
 Release:        0
 URL:            http://orthanc-server.com
 Source0:        
https://orthanc.uclouvain.be/downloads/sources/%{name}/OrthancAuthorization-%{version}.tar.gz

++++++ OrthancAuthorization-0.10.2.tar.gz -> OrthancAuthorization-0.10.3.tar.gz 
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/OrthancAuthorization-0.10.2/.hg_archival.txt 
new/OrthancAuthorization-0.10.3/.hg_archival.txt
--- old/OrthancAuthorization-0.10.2/.hg_archival.txt    2025-10-10 
08:46:45.000000000 +0200
+++ new/OrthancAuthorization-0.10.3/.hg_archival.txt    2025-11-20 
11:30:19.000000000 +0100
@@ -1,6 +1,6 @@
 repo: decac5df19c4aa24efe56534b828a295397c80e4
-node: 092ccae9c2170a9341f03c97cccd728b3816263f
-branch: 0.10.2
+node: 17d187579803fb323ab3e0b53e1a993bbe9af161
+branch: 0.10.3
 latesttag: null
-latesttagdistance: 237
-changessincelatesttag: 256
+latesttagdistance: 244
+changessincelatesttag: 265
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/OrthancAuthorization-0.10.2/CMakeLists.txt 
new/OrthancAuthorization-0.10.3/CMakeLists.txt
--- old/OrthancAuthorization-0.10.2/CMakeLists.txt      2025-10-10 
08:46:45.000000000 +0200
+++ new/OrthancAuthorization-0.10.3/CMakeLists.txt      2025-11-20 
11:30:19.000000000 +0100
@@ -21,13 +21,13 @@
 
 project(OrthancAuthorization)
 
-set(ORTHANC_PLUGIN_VERSION "0.10.2")
+set(ORTHANC_PLUGIN_VERSION "0.10.3")
 
 if (ORTHANC_PLUGIN_VERSION STREQUAL "mainline")
   set(ORTHANC_FRAMEWORK_VERSION "mainline")
   set(ORTHANC_FRAMEWORK_DEFAULT_SOURCE "hg")
 else()
-  set(ORTHANC_FRAMEWORK_VERSION "1.12.2")
+  set(ORTHANC_FRAMEWORK_VERSION "1.12.9")
   set(ORTHANC_FRAMEWORK_DEFAULT_SOURCE "web")
 endif()
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/OrthancAuthorization-0.10.2/NEWS 
new/OrthancAuthorization-0.10.3/NEWS
--- old/OrthancAuthorization-0.10.2/NEWS        2025-10-10 08:46:45.000000000 
+0200
+++ new/OrthancAuthorization-0.10.3/NEWS        2025-11-20 11:30:19.000000000 
+0100
@@ -1,7 +1,15 @@
+2025-11-20 - v 0.10.3
+=====================
+
+* New default permissions for worklists
+* New default permissions for tools/metrics-prometheus
+* New default permissions for tools/generate-uid
+
+
 2025-10-10 - v 0.10.2
 =====================
 
-* New default permissions to add/delete modalities through the Rest API
+* New default permissions to add/delete modalities through the REST API
   
https://discourse.orthanc-server.org/t/managing-modalities-using-the-rest-api-and-keycloak/6137
 * New standard configuration "stl"
 
@@ -244,9 +252,9 @@
 * new user-permission based authorization model.  This is enabled if you
   define the new "WebServiceUserProfileUrl" configuration.
 * new "orthanc-explorer-2" StandardConfigurations
-* new GET "auth/user/profile" Rest API route to retrieve user permissions
-* new PUT "auth/tokens/{token-type}" Rest API route to create tokens
-* new POST "auth/tokens/decode" Rest API route to decode tokens
+* new GET "auth/user/profile" REST API route to retrieve user permissions
+* new PUT "auth/tokens/{token-type}" REST API route to create tokens
+* new POST "auth/tokens/decode" REST API route to decode tokens
 * these 3 new routes required an updated auth-web-service.
 * SECURITY FIX: in prior versions, it was possible to browse remote
   dicom-web servers without being authenticated.  (The API routes
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/OrthancAuthorization-0.10.2/Plugin/DefaultAuthorizationParser.cpp 
new/OrthancAuthorization-0.10.3/Plugin/DefaultAuthorizationParser.cpp
--- old/OrthancAuthorization-0.10.2/Plugin/DefaultAuthorizationParser.cpp       
2025-10-10 08:46:45.000000000 +0200
+++ new/OrthancAuthorization-0.10.3/Plugin/DefaultAuthorizationParser.cpp       
2025-11-20 11:30:19.000000000 +0100
@@ -45,7 +45,7 @@
       tmp = tmp.substr(0, tmp.size() - 1);
     }
 
-    // note: if you add new DICOMWeb routes here, add them in the 
DefaultConfiguration.json too
+    // note: if you add new DICOMweb routes here, add them in the 
DefaultConfiguration.json too
     dicomWebStudies_ = boost::regex(
       "^" + tmp + 
"/studies/([.0-9]+)(|/series|/metadata|/instances|/rendered|/thumbnail)(|/)$");
       
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/OrthancAuthorization-0.10.2/Plugin/DefaultConfiguration.json 
new/OrthancAuthorization-0.10.3/Plugin/DefaultConfiguration.json
--- old/OrthancAuthorization-0.10.2/Plugin/DefaultConfiguration.json    
2025-10-10 08:46:45.000000000 +0200
+++ new/OrthancAuthorization-0.10.3/Plugin/DefaultConfiguration.json    
2025-11-20 11:30:19.000000000 +0100
@@ -60,17 +60,21 @@
         // The default configuration is suitable for Orthanc-Explorer-2 (see 
https://github.com/orthanc-team/orthanc-auth-service)
         "Permissions" : [
             ["post", "^/auth/tokens/decode$", ""],
-            ["post", "^/tools/lookup$", ""], // currently used to authorize 
downloads in Stone (to map the StudyInstanceUID into an OrthancID.  Not ideal 
-> we should define a new API that has the resource ID in the path to be able 
to check it at resource level) but, on another hand, you do not get any Patient 
information from this route
+            ["post", "^/tools/lookup$", ""],            // currently used to 
authorize downloads in Stone (to map the StudyInstanceUID into an OrthancID.  
Not ideal -> we should define a new API that has the resource ID in the path to 
be able to check it at resource level) but, on another hand, you do not get any 
Patient information from this route
+            ["get", "^/tools/generate-uid(.*)$", ""],   // used in OE2 when 
generating worklists but there are no sensitive data to retrieve -> allow all
 
             // elemental browsing in OE2
             ["post", "^/tools/find$", "all|view"],
             ["post", "^/tools/count-resources$", "all|view"],
             ["get" , "^/(patients|studies|series|instances)(|/)", "all|view"],
             ["get" , "^/statistics$", "all|view"],
+            ["get" , "^/tools/metrics-prometheus$", "all|view"],
             ["get" , "^/changes$", "all|view"],
             ["get" , "^/system$", "all|view"],
             ["get" , "^/plugins$", "all|view"],
             ["get" , "^/plugins/(.*)$", "all|view"],
+            ["get" , "^/worklists$", "all|view|worklists"],
+            ["get" , "^/worklists/(.*)$", "all|view|worklists"],
 
             // single resources patterns (SINGLE_RESOURCE_PATTERNS is an alias 
for all single resource patterns defined in 
https://orthanc.uclouvain.be/hg/orthanc-authorization/file/tip/Plugin/DefaultAuthorizationParser.cpp)
             // (a user must have access to the route + have an authorized 
label to access the resource)
@@ -107,7 +111,7 @@
             ["get" , "^/DICOM_WEB_ROOT/servers$", 
"all|send|q-r-remote-modalities"],
             ["post" , "^/DICOM_WEB_ROOT/(servers)/(.*)/stow$", "all|send"],
 
-            // DICOMWeb QIDO-RS            
+            // DICOMweb QIDO-RS
             ["get" , "^/DICOM_WEB_ROOT/(studies|series|instances)(|/)$", 
"all|view"],
 
             // modifications/anonymization
@@ -135,9 +139,14 @@
             // audit-logs
             ["get", "^/auth/audit-logs$", "admin-permissions|audit-logs"],
 
-            // add-delete modalities through the Rest API
+            // add-delete modalities through the REST API
             ["put", "^/modalities/(.*)$", "admin-permissions"],
-            ["delete", "^/modalities/(.*)$", "admin-permissions"]
+            ["delete", "^/modalities/(.*)$", "admin-permissions"],
+
+            // create-edit-delete worklists 
+            ["post" , "^/worklists/create$", "all|worklists"],
+            ["put", "^/worklists/(.*)$", "all|worklists"],
+            ["delete" , "^/worklists/(.*)$", "all|worklists"]
         ]
 
         // If you just need to add a few permissions, while preserving the 
default ones,
@@ -146,4 +155,4 @@
         //     ["post", "^/my-plugin/do-something$", "all|upload"]
         // ]
     }
-}
\ No newline at end of file
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/OrthancAuthorization-0.10.2/Resources/Orthanc/Plugins/OrthancPluginCppWrapper.cpp
 
new/OrthancAuthorization-0.10.3/Resources/Orthanc/Plugins/OrthancPluginCppWrapper.cpp
--- 
old/OrthancAuthorization-0.10.2/Resources/Orthanc/Plugins/OrthancPluginCppWrapper.cpp
       2025-10-10 08:46:45.000000000 +0200
+++ 
new/OrthancAuthorization-0.10.3/Resources/Orthanc/Plugins/OrthancPluginCppWrapper.cpp
       2025-11-20 11:30:19.000000000 +0100
@@ -351,6 +351,34 @@
     }
   }
 
+  static void DecodeHttpHeaders(HttpHeaders& target,
+                                const MemoryBuffer& source)
+  {
+    Json::Value v;
+    source.ToJson(v);
+
+    if (v.type() != Json::objectValue)
+    {
+      ORTHANC_PLUGINS_THROW_EXCEPTION(InternalError);
+    }
+
+    Json::Value::Members members = v.getMemberNames();
+    target.clear();
+
+    for (size_t i = 0; i < members.size(); i++)
+    {
+      const Json::Value& h = v[members[i]];
+      if (h.type() != Json::stringValue)
+      {
+        ORTHANC_PLUGINS_THROW_EXCEPTION(InternalError);
+      }
+      else
+      {
+        target[members[i]] = h.asString();
+      }
+    }
+  }
+
   // helper class to convert std::map of headers to the plugin SDK C structure
   class PluginHttpHeaders
   {
@@ -2084,8 +2112,30 @@
                             unsigned int timeout) const
   {
     MemoryBuffer buffer;
+    HttpHeaders answerHeaders;
 
-    if (DoPost(buffer, index, uri, body, headers, timeout))
+    if (DoPost(buffer, answerHeaders, index, uri, body, headers, timeout))
+    {
+      buffer.ToJson(target);
+      return true;
+    }
+    else
+    {
+      return false;
+    }
+  }
+
+  bool OrthancPeers::DoPost(Json::Value& target,
+                            HttpHeaders& answerHeaders,
+                            size_t index,
+                            const std::string& uri,
+                            const std::string& body,
+                            const HttpHeaders& headers, 
+                            unsigned int timeout) const
+  {
+    MemoryBuffer buffer;
+
+    if (DoPost(buffer, answerHeaders, index, uri, body, headers, timeout))
     {
       buffer.ToJson(target);
       return true;
@@ -2143,11 +2193,23 @@
                             const std::string& body,
                             const HttpHeaders& headers) const
   {
-    return DoPost(target, index, uri, body, headers, timeout_);
+    HttpHeaders answerHeaders;
+    return DoPost(target, answerHeaders, index, uri, body, headers, timeout_);
   }
 
+  bool OrthancPeers::DoPost(MemoryBuffer& target,
+                            size_t index,
+                            const std::string& uri,
+                            const std::string& body,
+                            const HttpHeaders& headers,
+                            unsigned int timeout) const
+  {
+    HttpHeaders answerHeaders;
+    return DoPost(target, answerHeaders, index, uri, body, headers, timeout);
+  }
 
   bool OrthancPeers::DoPost(MemoryBuffer& target,
+                            HttpHeaders& answerHeaders,
                             size_t index,
                             const std::string& uri,
                             const std::string& body,
@@ -2166,17 +2228,20 @@
     }
 
     OrthancPlugins::MemoryBuffer answer;
+    OrthancPlugins::MemoryBuffer answerHeadersBuffer;
     uint16_t status;
     PluginHttpHeaders pluginHeaders(headers);
 
     OrthancPluginErrorCode code = OrthancPluginCallPeerApi
-      (GetGlobalContext(), *answer, NULL, &status, peers_,
+      (GetGlobalContext(), *answer, *answerHeadersBuffer, &status, peers_,
        static_cast<uint32_t>(index), OrthancPluginHttpMethod_Post, uri.c_str(),
        pluginHeaders.GetSize(), pluginHeaders.GetKeys(), 
pluginHeaders.GetValues(), body.empty() ? NULL : body.c_str(), body.size(), 
timeout);
 
     if (code == OrthancPluginErrorCode_Success)
     {
       target.Swap(answer);
+      DecodeHttpHeaders(answerHeaders, answerHeadersBuffer);
+      
       return (status == 200);
     }
     else
@@ -3223,36 +3288,6 @@
   }
 #endif    
 
-
-  static void DecodeHttpHeaders(HttpHeaders& target,
-                                const MemoryBuffer& source)
-  {
-    Json::Value v;
-    source.ToJson(v);
-
-    if (v.type() != Json::objectValue)
-    {
-      ORTHANC_PLUGINS_THROW_EXCEPTION(InternalError);
-    }
-
-    Json::Value::Members members = v.getMemberNames();
-    target.clear();
-
-    for (size_t i = 0; i < members.size(); i++)
-    {
-      const Json::Value& h = v[members[i]];
-      if (h.type() != Json::stringValue)
-      {
-        ORTHANC_PLUGINS_THROW_EXCEPTION(InternalError);
-      }
-      else
-      {
-        target[members[i]] = h.asString();
-      }
-    }
-  }
-
-
   void HttpClient::ExecuteWithoutStream(uint16_t& httpStatus,
                                         HttpHeaders& answerHeaders,
                                         std::string& answerBody,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/OrthancAuthorization-0.10.2/Resources/Orthanc/Plugins/OrthancPluginCppWrapper.h
 
new/OrthancAuthorization-0.10.3/Resources/Orthanc/Plugins/OrthancPluginCppWrapper.h
--- 
old/OrthancAuthorization-0.10.2/Resources/Orthanc/Plugins/OrthancPluginCppWrapper.h
 2025-10-10 08:46:45.000000000 +0200
+++ 
new/OrthancAuthorization-0.10.3/Resources/Orthanc/Plugins/OrthancPluginCppWrapper.h
 2025-11-20 11:30:19.000000000 +0100
@@ -879,6 +879,14 @@
                 unsigned int timeout) const;
 
     bool DoPost(MemoryBuffer& target,
+                HttpHeaders& answerHeaders,
+                size_t index,
+                const std::string& uri,
+                const std::string& body,
+                const HttpHeaders& headers,
+                unsigned int timeout) const;
+
+    bool DoPost(MemoryBuffer& target,
                 const std::string& name,
                 const std::string& uri,
                 const std::string& body,
@@ -894,6 +902,14 @@
                 size_t index,
                 const std::string& uri,
                 const std::string& body,
+                const HttpHeaders& headers,
+                unsigned int timeout) const;
+    
+    bool DoPost(Json::Value& target,
+                HttpHeaders& answerHeaders,
+                size_t index,
+                const std::string& uri,
+                const std::string& body,
                 const HttpHeaders& headers,
                 unsigned int timeout) const;
 

Reply via email to