diff OrthancServer/Plugins/Engine/OrthancPlugins.cpp @ 4343:e1e918e790e8

New function in the SDK: OrthancPluginGenerateRestApiAuthorizationToken()
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 04 Dec 2020 18:28:23 +0100
parents a01b1c9cbef4
children d527a081f92d
line wrap: on
line diff
--- a/OrthancServer/Plugins/Engine/OrthancPlugins.cpp	Thu Dec 03 18:48:06 2020 +0100
+++ b/OrthancServer/Plugins/Engine/OrthancPlugins.cpp	Fri Dec 04 18:28:23 2020 +0100
@@ -918,6 +918,7 @@
     RefreshMetricsCallbacks refreshMetricsCallbacks_;
     StorageCommitmentScpCallbacks storageCommitmentScpCallbacks_;
     std::unique_ptr<StorageAreaFactory>  storageArea_;
+    std::set<std::string> authorizationTokens_;
 
     boost::recursive_mutex restCallbackMutex_;
     boost::recursive_mutex storedCallbackMutex_;
@@ -4647,6 +4648,18 @@
         return true;
       }
 
+      case _OrthancPluginService_GenerateRestApiAuthorizationToken:
+      {
+        const _OrthancPluginRetrieveDynamicString& p = 
+          *reinterpret_cast<const _OrthancPluginRetrieveDynamicString*>(parameters);
+        const std::string token = Toolbox::GenerateUuid();
+
+        pimpl_->authorizationTokens_.insert(token);
+        *p.result = CopyString("Bearer " + token);
+
+        return true;
+      }
+
       default:
       {
         // This service is unknown to the Orthanc plugin engine
@@ -5257,4 +5270,11 @@
 
     return false;
   }
+
+
+  bool OrthancPlugins::IsValidAuthorizationToken(const std::string& token) const
+  {
+    boost::recursive_mutex::scoped_lock lock(pimpl_->invokeServiceMutex_);
+    return (pimpl_->authorizationTokens_.find(token) != pimpl_->authorizationTokens_.end());
+  }
 }