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 2025-10-12 22:24:39
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/orthanc-authorization (Old)
 and      /work/SRC/openSUSE:Factory/.orthanc-authorization.new.18484 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "orthanc-authorization"

Sun Oct 12 22:24:39 2025 rev:8 rq:1310936 version:0.10.2

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/orthanc-authorization/orthanc-authorization.changes  
    2025-09-11 14:47:07.619546241 +0200
+++ 
/work/SRC/openSUSE:Factory/.orthanc-authorization.new.18484/orthanc-authorization.changes
   2025-10-12 22:29:46.599320109 +0200
@@ -1,0 +2,8 @@
+Sun Oct 12 14:19:00 UTC 2025 - Axel Braun <[email protected]>
+
+- version 0.10.2
+  * 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"
+
+-------------------------------------------------------------------

Old:
----
  OrthancAuthorization-0.10.1.tar.gz

New:
----
  OrthancAuthorization-0.10.2.tar.gz

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

Other differences:
------------------
++++++ orthanc-authorization.spec ++++++
--- /var/tmp/diff_new_pack.bqE4xo/_old  2025-10-12 22:29:48.943418246 +0200
+++ /var/tmp/diff_new_pack.bqE4xo/_new  2025-10-12 22:29:48.983419921 +0200
@@ -21,7 +21,7 @@
 Summary:        Authorisation plugin for Orthanc
 License:        GPL-3.0-or-later
 Group:          Productivity/Graphics/Viewers
-Version:        0.10.1
+Version:        0.10.2
 Release:        0
 URL:            http://orthanc-server.com
 Source0:        
https://orthanc.uclouvain.be/downloads/sources/%{name}/OrthancAuthorization-%{version}.tar.gz

++++++ OrthancAuthorization-0.10.1.tar.gz -> OrthancAuthorization-0.10.2.tar.gz 
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/OrthancAuthorization-0.10.1/.hg_archival.txt 
new/OrthancAuthorization-0.10.2/.hg_archival.txt
--- old/OrthancAuthorization-0.10.1/.hg_archival.txt    2025-08-13 
18:16:05.000000000 +0200
+++ new/OrthancAuthorization-0.10.2/.hg_archival.txt    2025-10-10 
08:46:45.000000000 +0200
@@ -1,6 +1,6 @@
 repo: decac5df19c4aa24efe56534b828a295397c80e4
-node: 117032bb73b26ac117f159e9f97dcbc2eb143089
-branch: 0.10.1
+node: 092ccae9c2170a9341f03c97cccd728b3816263f
+branch: 0.10.2
 latesttag: null
-latesttagdistance: 229
-changessincelatesttag: 246
+latesttagdistance: 237
+changessincelatesttag: 256
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/OrthancAuthorization-0.10.1/CMakeLists.txt 
new/OrthancAuthorization-0.10.2/CMakeLists.txt
--- old/OrthancAuthorization-0.10.1/CMakeLists.txt      2025-08-13 
18:16:05.000000000 +0200
+++ new/OrthancAuthorization-0.10.2/CMakeLists.txt      2025-10-10 
08:46:45.000000000 +0200
@@ -17,11 +17,11 @@
 # along with this program. If not, see <http://www.gnu.org/licenses/>.
 
 
-cmake_minimum_required(VERSION 2.8)
+cmake_minimum_required(VERSION 2.8...4.0)
 
 project(OrthancAuthorization)
 
-set(ORTHANC_PLUGIN_VERSION "0.10.1")
+set(ORTHANC_PLUGIN_VERSION "0.10.2")
 
 if (ORTHANC_PLUGIN_VERSION STREQUAL "mainline")
   set(ORTHANC_FRAMEWORK_VERSION "mainline")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/OrthancAuthorization-0.10.1/NEWS 
new/OrthancAuthorization-0.10.2/NEWS
--- old/OrthancAuthorization-0.10.1/NEWS        2025-08-13 18:16:05.000000000 
+0200
+++ new/OrthancAuthorization-0.10.2/NEWS        2025-10-10 08:46:45.000000000 
+0200
@@ -1,3 +1,11 @@
+2025-10-10 - v 0.10.2
+=====================
+
+* 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"
+
+
 2025-08-13 - v 0.10.1
 =====================
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/OrthancAuthorization-0.10.1/Plugin/DefaultConfiguration.json 
new/OrthancAuthorization-0.10.2/Plugin/DefaultConfiguration.json
--- old/OrthancAuthorization-0.10.1/Plugin/DefaultConfiguration.json    
2025-08-13 18:16:05.000000000 +0200
+++ new/OrthancAuthorization-0.10.2/Plugin/DefaultConfiguration.json    
2025-10-10 08:46:45.000000000 +0200
@@ -44,7 +44,8 @@
         //     "stone-webviewer",
         //     "orthanc-explorer-2",
         //     "ohif",
-        //     "volview"
+        //     "volview",
+        //     "stl"
         // ],
 
         //"UncheckedResources" : [],
@@ -94,8 +95,9 @@
             ["get" , "^/jobs/([a-f0-9-]+)$", 
"all|send|modify|anonymize|q-r-remote-modalities"],
 
             // interacting with peers/modalities/dicomweb
-            ["post", "^/(peers|modalities)/(.*)/store$", "all|send"],
+            ["post", "^/(peers|modalities)/(.*)/(store|store-straight)$", 
"all|send"],
             ["get" , "^/(peers|modalities)$", 
"all|send|q-r-remote-modalities"],
+            ["get" , "^/(peers|modalities)/(.*)/configuration$", 
"all|send|q-r-remote-modalities"],
             ["post", "^/modalities/(.*)/echo$", 
"all|send|q-r-remote-modalities"],
             ["post", "^/modalities/(.*)/query$", "all|q-r-remote-modalities"],
             ["get", "^/queries/([a-f0-9-]+)/answers$", 
"all|q-r-remote-modalities"],
@@ -131,7 +133,17 @@
             ["get", "^/auth/settings/permissions$", "admin-permissions"],
 
             // audit-logs
-            ["get", "^/auth/audit-logs$", "admin-permissions|audit-logs"]
+            ["get", "^/auth/audit-logs$", "admin-permissions|audit-logs"],
+
+            // add-delete modalities through the Rest API
+            ["put", "^/modalities/(.*)$", "admin-permissions"],
+            ["delete", "^/modalities/(.*)$", "admin-permissions"]
         ]
+
+        // If you just need to add a few permissions, while preserving the 
default ones,
+        // You may just not specify any "Permissions" field and add a few 
entries in the ExtraPermissions
+        // "ExtraPermissions" : [
+        //     ["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.1/Plugin/Plugin.cpp 
new/OrthancAuthorization-0.10.2/Plugin/Plugin.cpp
--- old/OrthancAuthorization-0.10.1/Plugin/Plugin.cpp   2025-08-13 
18:16:05.000000000 +0200
+++ new/OrthancAuthorization-0.10.2/Plugin/Plugin.cpp   2025-10-10 
08:46:45.000000000 +0200
@@ -2357,6 +2357,13 @@
             
tokens_.insert(OrthancPlugins::Token(OrthancPlugins::TokenType_HttpHeader, 
"Authorization"));
           }
 
+          if (standardConfigurations.find("stl") != 
standardConfigurations.end())
+          {
+            uncheckedFolders_.push_back("/stl/");
+
+            
tokens_.insert(OrthancPlugins::Token(OrthancPlugins::TokenType_HttpHeader, 
"Authorization"));
+          }
+
         }
 
         std::string checkedLevelString;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/OrthancAuthorization-0.10.1/Resources/Orthanc/CMake/AutoGeneratedCode.cmake 
new/OrthancAuthorization-0.10.2/Resources/Orthanc/CMake/AutoGeneratedCode.cmake
--- 
old/OrthancAuthorization-0.10.1/Resources/Orthanc/CMake/AutoGeneratedCode.cmake 
    2025-08-13 18:16:05.000000000 +0200
+++ 
new/OrthancAuthorization-0.10.2/Resources/Orthanc/CMake/AutoGeneratedCode.cmake 
    2025-10-10 08:46:45.000000000 +0200
@@ -20,7 +20,7 @@
 # <http://www.gnu.org/licenses/>.
 
 
-set(EMBED_RESOURCES_PYTHON "${CMAKE_CURRENT_LIST_DIR}/../EmbedResources.py"
+set(EMBED_RESOURCES_PYTHON "${CMAKE_CURRENT_LIST_DIR}/EmbedResources.py"
   CACHE INTERNAL "Path to the EmbedResources.py script from Orthanc")
 set(AUTOGENERATED_DIR "${CMAKE_CURRENT_BINARY_DIR}/AUTOGENERATED")
 set(AUTOGENERATED_SOURCES)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/OrthancAuthorization-0.10.1/Resources/Orthanc/CMake/DownloadOrthancFramework.cmake
 
new/OrthancAuthorization-0.10.2/Resources/Orthanc/CMake/DownloadOrthancFramework.cmake
--- 
old/OrthancAuthorization-0.10.1/Resources/Orthanc/CMake/DownloadOrthancFramework.cmake
      2025-08-13 18:16:05.000000000 +0200
+++ 
new/OrthancAuthorization-0.10.2/Resources/Orthanc/CMake/DownloadOrthancFramework.cmake
      2025-10-10 08:46:45.000000000 +0200
@@ -207,6 +207,14 @@
         # DICOMweb 1.15 (framework pre-1.12.2)
         set(ORTHANC_FRAMEWORK_PRE_RELEASE ON)
         set(ORTHANC_FRAMEWORK_MD5 "ebe8bdf388319f1c9536b2b680451848")
+      elseif (ORTHANC_FRAMEWORK_VERSION STREQUAL "36cd91a53403")
+        # Advanced storage 0.2.0 (framework pre-1.12.10)
+        set(ORTHANC_FRAMEWORK_PRE_RELEASE ON)
+        set(ORTHANC_FRAMEWORK_MD5 "911105f18a154b5e106985d8fcfcb620")
+      elseif (ORTHANC_FRAMEWORK_VERSION STREQUAL "9eb77f159b9d")
+        # Advanced storage 0.2.2 (framework pre-1.12.10)
+        set(ORTHANC_FRAMEWORK_PRE_RELEASE ON)
+        set(ORTHANC_FRAMEWORK_MD5 "bd5ba2cec329010b912209345acbdeaf")
       endif()
     endif()
   endif()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/OrthancAuthorization-0.10.1/Resources/Orthanc/Plugins/OrthancPluginCppWrapper.cpp
 
new/OrthancAuthorization-0.10.2/Resources/Orthanc/Plugins/OrthancPluginCppWrapper.cpp
--- 
old/OrthancAuthorization-0.10.1/Resources/Orthanc/Plugins/OrthancPluginCppWrapper.cpp
       2025-08-13 18:16:05.000000000 +0200
+++ 
new/OrthancAuthorization-0.10.2/Resources/Orthanc/Plugins/OrthancPluginCppWrapper.cpp
       2025-10-10 08:46:45.000000000 +0200
@@ -23,6 +23,7 @@
 
 #include "OrthancPluginCppWrapper.h"
 
+#include <cassert>
 #include <boost/algorithm/string/predicate.hpp>
 #include <boost/move/unique_ptr.hpp>
 #include <boost/thread.hpp>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/OrthancAuthorization-0.10.1/Resources/SyncOrthancFolder.py 
new/OrthancAuthorization-0.10.2/Resources/SyncOrthancFolder.py
--- old/OrthancAuthorization-0.10.1/Resources/SyncOrthancFolder.py      
2025-08-13 18:16:05.000000000 +0200
+++ new/OrthancAuthorization-0.10.2/Resources/SyncOrthancFolder.py      
2025-10-10 08:46:45.000000000 +0200
@@ -20,7 +20,7 @@
     ('OrthancFramework/Resources/CMake/DownloadOrthancFramework.cmake', 
'CMake'),
     ('OrthancFramework/Resources/CMake/DownloadPackage.cmake', 'CMake'),
     ('OrthancFramework/Resources/CMake/GoogleTestConfiguration.cmake', 
'CMake'),
-    ('OrthancFramework/Resources/EmbedResources.py', 'CMake'),
+    ('OrthancFramework/Resources/CMake/EmbedResources.py', 'CMake'),
     ('OrthancFramework/Resources/Toolchains/LinuxStandardBaseToolchain.cmake', 
'Toolchains'),
     ('OrthancFramework/Resources/Toolchains/MinGW-W64-Toolchain32.cmake', 
'Toolchains'),
     ('OrthancFramework/Resources/Toolchains/MinGW-W64-Toolchain64.cmake', 
'Toolchains'),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/OrthancAuthorization-0.10.1/UnitTestsSources/UnitTestsMain.cpp 
new/OrthancAuthorization-0.10.2/UnitTestsSources/UnitTestsMain.cpp
--- old/OrthancAuthorization-0.10.1/UnitTestsSources/UnitTestsMain.cpp  
2025-08-13 18:16:05.000000000 +0200
+++ new/OrthancAuthorization-0.10.2/UnitTestsSources/UnitTestsMain.cpp  
2025-10-10 08:46:45.000000000 +0200
@@ -30,6 +30,10 @@
 #include "../Plugin/MemoryCache.h"
 #include "../Plugin/PermissionParser.h"
 #include "../Plugin/ResourceHierarchyCache.h"
+#include "../Resources/Orthanc/Plugins/OrthancPluginCppWrapper.h"
+#include <Logging.h>
+#include <EmbeddedResources.h>
+
 
 extern void AdjustToolsFindQueryLabels(Json::Value& query, const 
OrthancPlugins::IAuthorizationService::UserProfile& profile);
 
@@ -586,108 +590,71 @@
   }
 }
 
-// TEST(ToolsFindLabels, AdjustQueryForUserWithForbiddenLabelsRestrictions)
-// {
-//   // user who has forbidden access to "b" and "c"
-//   OrthancPlugins::IAuthorizationService::UserProfile profile;
-//   profile.forbiddenLabels.insert("b");
-//   profile.forbiddenLabels.insert("c");
-
-//   { // no labels before transformation -> "b", "c" label after (with a 
'None' constraint)
-//     Json::Value query;
-//     query["Query"] = Json::objectValue;
-//     query["Query"]["PatientID"] = "*";
-
-//     AdjustToolsFindQueryLabels(query, profile);
-
-//     ASSERT_EQ(2u, query["Labels"].size());
-//     ASSERT_TRUE(IsInJsonArray("b", query["Labels"]));
-//     ASSERT_TRUE(IsInJsonArray("c", query["Labels"]));
-//     ASSERT_EQ("None", query["LabelsConstraint"].asString());
-//   }
-
-//   { // missing LabelsConstraint -> throw
-//     Json::Value query;
-//     query["Query"] = Json::objectValue;
-//     query["Query"]["PatientID"] = "*";
-//     query["Labels"] = Json::arrayValue;
-//     query["Labels"].append("a");
-
-//     ASSERT_THROW(AdjustToolsFindQueryLabels(query, profile), 
Orthanc::OrthancException);
-//   }
-
-//   { // 'All' label constraint can not be modified for user with forbidden 
labels
-//     Json::Value query;
-//     query["Query"] = Json::objectValue;
-//     query["Query"]["PatientID"] = "*";
-//     query["Labels"] = Json::arrayValue;
-//     query["Labels"].append("b");
-//     query["Labels"].append("c");
-//     query["LabelsConstraint"] = "All";
-
-//     ASSERT_THROW(AdjustToolsFindQueryLabels(query, profile), 
Orthanc::OrthancException);
-//   }
-
-//   { // 'Any' label constraint can not be modified for user with forbidden 
labels
-//     Json::Value query;
-//     query["Query"] = Json::objectValue;
-//     query["Query"]["PatientID"] = "*";
-//     query["Labels"] = Json::arrayValue;
-//     query["Labels"].append("b");
-//     query["Labels"].append("c");
-//     query["LabelsConstraint"] = "Any";
-
-//     ASSERT_THROW(AdjustToolsFindQueryLabels(query, profile), 
Orthanc::OrthancException);
-//   }
-
-//   { // 'Any' label constraint can not be modified for user with forbidden 
labels
-//     Json::Value query;
-//     query["Query"] = Json::objectValue;
-//     query["Query"]["PatientID"] = "*";
-//     query["Labels"] = Json::arrayValue;
-//     query["Labels"].append("a");
-//     query["LabelsConstraint"] = "Any";
-
-//     ASSERT_THROW(AdjustToolsFindQueryLabels(query, profile), 
Orthanc::OrthancException);
-//   }
-
-
-//   { // 'None' label constraint are modified to always contain at least all 
forbidden_labels of the user
-//     Json::Value query;
-//     query["Query"] = Json::objectValue;
-//     query["Query"]["PatientID"] = "*";
-//     query["Labels"] = Json::arrayValue;
-//     query["Labels"].append("b");
-//     query["LabelsConstraint"] = "None";
-
-//     AdjustToolsFindQueryLabels(query, profile);
-//     ASSERT_EQ(2u, query["Labels"].size());
-//     ASSERT_TRUE(IsInJsonArray("b", query["Labels"]));
-//     ASSERT_TRUE(IsInJsonArray("c", query["Labels"]));
-//     ASSERT_EQ("None", query["LabelsConstraint"].asString());
-//   }
-
-//   { // 'None' label constraint are modified to always contain at least all 
forbidden_labels of the user
-//     Json::Value query;
-//     query["Query"] = Json::objectValue;
-//     query["Query"]["PatientID"] = "*";
-//     query["Labels"] = Json::arrayValue;
-//     query["Labels"].append("d");
-//     query["LabelsConstraint"] = "None";
-
-//     AdjustToolsFindQueryLabels(query, profile);
-//     ASSERT_EQ(3u, query["Labels"].size());
-//     ASSERT_TRUE(IsInJsonArray("b", query["Labels"]));
-//     ASSERT_TRUE(IsInJsonArray("c", query["Labels"]));
-//     ASSERT_TRUE(IsInJsonArray("d", query["Labels"]));
-//     ASSERT_EQ("None", query["LabelsConstraint"].asString());
-//   }
-// }
+void TestPermissions(PermissionParser& permParser, const std::string& uri, 
OrthancPluginHttpMethod method, const std::string& expectedPermissions)
+{
+  LOG(WARNING) << "testing permission on '" << uri << "'";
+  std::set<std::string> permissions;
+  std::vector<std::string> expectedPermissions_;
+  Orthanc::Toolbox::SplitString(expectedPermissions_, expectedPermissions, 
'|');
+  std::string matchedPattern;
+
+  ASSERT_TRUE(permParser.Parse(permissions, matchedPattern, method, uri));
+  ASSERT_EQ(expectedPermissions_.size(), permissions.size());
+
+  for (size_t i = 0; i < expectedPermissions_.size(); ++i)
+  {
+    ASSERT_TRUE(permissions.find(expectedPermissions_[i]) != 
permissions.end());
+  }
+}
+
+TEST(PermissionParser, Basic)
+{
+  MemoryCache::Factory factory(10);
+  DefaultAuthorizationParser authorizationParser(factory, "/dicom-web/");
+
+  std::string defaultConfigurationFileContent;
+  Orthanc::EmbeddedResources::GetFileResource(defaultConfigurationFileContent, 
Orthanc::EmbeddedResources::DEFAULT_CONFIGURATION);
+  Json::Value pluginJsonDefaultConfiguration;
+  OrthancPlugins::ReadJsonWithoutComments(pluginJsonDefaultConfiguration, 
defaultConfigurationFileContent);
+  
+  PermissionParser permParser("/dicom-web/", "/ui/");
+
+  
permParser.Add(pluginJsonDefaultConfiguration["Authorization"]["Permissions"], 
&authorizationParser);
+
+  
+
+  { // test modalities
+
+    TestPermissions(permParser, "/modalities", OrthancPluginHttpMethod_Get, 
"all|send|q-r-remote-modalities");  // list modalities
+    TestPermissions(permParser, "/modalities/alias", 
OrthancPluginHttpMethod_Put, "admin-permissions");  // add modalities
+    TestPermissions(permParser, "/modalities/alias", 
OrthancPluginHttpMethod_Delete, "admin-permissions");  // delete modalities
+    TestPermissions(permParser, "/modalities/alias/move", 
OrthancPluginHttpMethod_Post, "all|q-r-remote-modalities");  // trigger a 
c-move on distant modality
+    TestPermissions(permParser, "/modalities/alias/store", 
OrthancPluginHttpMethod_Post, "all|send");  // trigger a c-move on distant 
modality
+    TestPermissions(permParser, "/modalities/alias/store-straight", 
OrthancPluginHttpMethod_Post, "all|send");  // trigger a c-move on distant 
modality
+    TestPermissions(permParser, "/modalities/alias/echo", 
OrthancPluginHttpMethod_Post, "all|send|q-r-remote-modalities");  // echo
+    TestPermissions(permParser, "/modalities/alias/configuration", 
OrthancPluginHttpMethod_Get, "all|send|q-r-remote-modalities");  // see 
configuration
+
+  }
+
+            //   ["post", "^/modalities/(.*)/echo$", 
"all|send|q-r-remote-modalities"],
+            // ["post", "^/modalities/(.*)/query$", 
"all|q-r-remote-modalities"],
+            // ["get", "^/queries/([a-f0-9-]+)/answers$", 
"all|q-r-remote-modalities"],
+            // ["get", "^/queries/([a-f0-9-]+)/answers/([0-9]+)/content$", 
"all|q-r-remote-modalities"],
+            // ["post", "^/queries/([a-f0-9-]+)/answers/([0-9]+)/retrieve$", 
"all|q-r-remote-modalities"],
+            // ["post", "^/modalities/(.*)/move$", 
"all|q-r-remote-modalities"],
+
+}
 
 }
 
 int main(int argc, char **argv)
 {
+  Orthanc::Logging::Initialize();
+
   ::testing::InitGoogleTest(&argc, argv);
-  return RUN_ALL_TESTS();
+  int result = RUN_ALL_TESTS();
+
+  Orthanc::Logging::Finalize();
+
+  return result;
 }

Reply via email to