changeset 345:4d9e8a4773ca

Added support for inbox-links
author Alain Mazy <am@orthanc.team>
date Thu, 20 Aug 2026 10:54:01 +0200
parents 47e6b454ef43
children f2ae8fe9933c
files NEWS Plugin/AuthorizationWebService.cpp Plugin/AuthorizationWebService.h Plugin/CachedAuthorizationService.h Plugin/DefaultConfiguration.json Plugin/IAuthorizationService.h Plugin/Plugin.cpp
diffstat 7 files changed, 31 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/NEWS	Mon Aug 10 10:18:23 2026 +0200
+++ b/NEWS	Thu Aug 20 10:54:01 2026 +0200
@@ -1,3 +1,9 @@
+Pending changes
+===============
+
+* Added support for inbox-links (new permission: create-inbox-links)
+
+
 2026-07-23 - v 0.11.4
 =====================
 
--- a/Plugin/AuthorizationWebService.cpp	Mon Aug 10 10:18:23 2026 +0200
+++ b/Plugin/AuthorizationWebService.cpp	Thu Aug 20 10:54:01 2026 +0200
@@ -261,7 +261,8 @@
 
   bool AuthorizationWebService::CreateToken(IAuthorizationService::CreatedToken& response,
                                             const std::string& tokenType, 
-                                            const std::string& id, 
+                                            const std::string& id,
+                                            const std::string& username, 
                                             const std::vector<IAuthorizationService::OrthancResource>& resources,
                                             const std::string& expirationDateString,
                                             const uint64_t& validityDuration)
@@ -279,6 +280,11 @@
       body["id"] = id;
     }
 
+    if (!username.empty())
+    {
+      body["username"] = username;
+    }
+
     AddServerId(body, serverId_);
 
     body["resources"] = Json::arrayValue;
--- a/Plugin/AuthorizationWebService.h	Mon Aug 10 10:18:23 2026 +0200
+++ b/Plugin/AuthorizationWebService.h	Thu Aug 20 10:54:01 2026 +0200
@@ -93,7 +93,8 @@
 
     virtual bool CreateToken(IAuthorizationService::CreatedToken& response,
                              const std::string& tokenType, 
-                             const std::string& id, 
+                             const std::string& id,
+                             const std::string& username, 
                              const std::vector<IAuthorizationService::OrthancResource>& resources,
                              const std::string& expirationDateString,
                              const uint64_t& validityDuration) ORTHANC_OVERRIDE;
--- a/Plugin/CachedAuthorizationService.h	Mon Aug 10 10:18:23 2026 +0200
+++ b/Plugin/CachedAuthorizationService.h	Thu Aug 20 10:54:01 2026 +0200
@@ -88,7 +88,8 @@
 
     virtual bool CreateToken(IAuthorizationService::CreatedToken& response,
                              const std::string& tokenType, 
-                             const std::string& id, 
+                             const std::string& id,
+                             const std::string& username, 
                              const std::vector<IAuthorizationService::OrthancResource>& resources,
                              const std::string& expirationDateString,
                              const uint64_t& validityDuration) ORTHANC_OVERRIDE
@@ -96,6 +97,7 @@
       return decorated_->CreateToken(response,
                                      tokenType,
                                      id,
+                                     username,
                                      resources,
                                      expirationDateString,
                                      validityDuration);
--- a/Plugin/DefaultConfiguration.json	Mon Aug 10 10:18:23 2026 +0200
+++ b/Plugin/DefaultConfiguration.json	Thu Aug 20 10:54:01 2026 +0200
@@ -86,8 +86,9 @@
 
             // share a link to open a study
             ["put", "^/auth/tokens/(stone-viewer-publication|meddream-viewer-publication|osimis-viewer-publication|ohif-viewer-publication|volview-viewer-publication)$", "all|share"],
-            ["get", "^/ui/api/emails/templates/(.*)$", "all|share"],
-            ["post", "^/ui/api/emails/send$", "all|share"],
+            ["put", "^/auth/tokens/inbox-link$", "all|create-inbox-links"],
+            ["get", "^/ui/api/emails/templates/(.*)$", "all|share|create-inbox-links"],
+            ["post", "^/ui/api/emails/send$", "all|share|create-inbox-links"],
 
             // uploads
             ["post", "^/instances$", "all|upload"],
--- a/Plugin/IAuthorizationService.h	Mon Aug 10 10:18:23 2026 +0200
+++ b/Plugin/IAuthorizationService.h	Thu Aug 20 10:54:01 2026 +0200
@@ -40,6 +40,7 @@
       std::string orthancId;
       std::string url;
       std::string level;
+      std::string username;
     };
 
     struct CreatedToken
@@ -103,7 +104,8 @@
 
     virtual bool CreateToken(CreatedToken& response,
                              const std::string& tokenType, 
-                             const std::string& id, 
+                             const std::string& id,
+                             const std::string& username, 
                              const std::vector<OrthancResource>& resources,
                              const std::string& expirationDateString,
                              const uint64_t& validityDuration) = 0;
--- a/Plugin/Plugin.cpp	Mon Aug 10 10:18:23 2026 +0200
+++ b/Plugin/Plugin.cpp	Thu Aug 20 10:54:01 2026 +0200
@@ -2043,7 +2043,7 @@
       throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat, "A JSON payload was expected");
     }
 
-    std::string id;
+    std::string id, username;
     std::vector<OrthancPlugins::IAuthorizationService::OrthancResource> resources;
     std::string expirationDateString;
     uint64_t validityDuration;
@@ -2053,6 +2053,11 @@
       id = body["ID"].asString();
     }
 
+    if (body.isMember("Username"))
+    {
+      username = body["Username"].asString();
+    }
+
     for (Json::ArrayIndex i = 0; i < body["Resources"].size(); ++i)
     {
       const Json::Value& jsonResource = body["Resources"][i];
@@ -2091,6 +2096,7 @@
     if (authorizationService_->CreateToken(createdToken,
                                            tokenType,
                                            id,
+                                           username,
                                            resources,
                                            expirationDateString,
                                            validityDuration))