From 0258a421ac86628c8c84ee7fd6907c3745b0064f Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Tue, 23 Oct 2012 07:38:43 +0000
Subject: [PATCH] SP-328, BIS-227: Bug fixed in context with archiving: wrong
 sessionToken has been used which leads failing authorization while accessing
 data store

SVN: 27320
---
 .../openbis/dss/generic/server/DataStoreService.java | 12 ++++++------
 .../dss/generic/server/DataStoreServiceLogger.java   |  4 ++--
 .../generic/server/business/bo/DataSetTable.java     |  7 ++++---
 .../openbis/generic/shared/IDataStoreService.java    | 11 ++++++-----
 .../generic/server/business/bo/DataSetTableTest.java |  9 +++++++--
 5 files changed, 25 insertions(+), 18 deletions(-)

diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreService.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreService.java
index 0c3e86726f8..aef53287023 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreService.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreService.java
@@ -365,24 +365,24 @@ public class DataStoreService extends AbstractServiceWithLogger<IDataStoreServic
     }
 
     @Override
-    public void unarchiveDatasets(String sessionToken, List<DatasetDescription> datasets,
+    public void unarchiveDatasets(String sessionToken, String userSessionToken, List<DatasetDescription> datasets,
             String userId, String userEmailOrNull)
     {
         String description = "Unarchiving";
         IProcessingPluginTask task = new UnarchiveProcessingPluginTask(getArchiverPlugin());
 
-        scheduleTask(sessionToken, description, task, datasets, userId, userEmailOrNull);
+        scheduleTask(sessionToken, userSessionToken, description, task, datasets, userId, userEmailOrNull);
     }
 
     @Override
-    public void archiveDatasets(String sessionToken, List<DatasetDescription> datasets,
+    public void archiveDatasets(String sessionToken, String userSessionToken, List<DatasetDescription> datasets,
             String userId, String userEmailOrNull, boolean removeFromDataStore)
     {
         String description = removeFromDataStore ? "Archiving" : "Copying data sets to archive";
         IProcessingPluginTask task =
                 new ArchiveProcessingPluginTask(getArchiverPlugin(), removeFromDataStore);
 
-        scheduleTask(sessionToken, description, task, datasets, userId, userEmailOrNull);
+        scheduleTask(sessionToken, userSessionToken, description, task, datasets, userId, userEmailOrNull);
     }
 
     @Override
@@ -431,7 +431,7 @@ public class DataStoreService extends AbstractServiceWithLogger<IDataStoreServic
         return new MailClient(mailClientParameters);
     }
 
-    private void scheduleTask(String sessionToken, String description,
+    private void scheduleTask(String sessionToken, String userSessionToken, String description,
             IProcessingPluginTask processingTask, List<DatasetDescription> datasets, String userId,
             String userEmailOrNull)
     {
@@ -440,7 +440,7 @@ public class DataStoreService extends AbstractServiceWithLogger<IDataStoreServic
                 DatastoreServiceDescription.processing(description, description, null, null);
         Map<String, String> parameterBindings = Collections.<String, String> emptyMap();
         commandExecutor.scheduleProcessDatasets(processingTask, datasets, parameterBindings,
-                userId, userEmailOrNull, sessionToken, pluginDescription, mailClientParameters);
+                userId, userEmailOrNull, userSessionToken, pluginDescription, mailClientParameters);
     }
 
     private static class ArchiveProcessingPluginTask implements IProcessingPluginTask
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreServiceLogger.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreServiceLogger.java
index d96e6d5ab36..1b6870116c8 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreServiceLogger.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreServiceLogger.java
@@ -146,7 +146,7 @@ class DataStoreServiceLogger implements IDataStoreService, IInitializable
     }
 
     @Override
-    public void unarchiveDatasets(String sessionToken, List<DatasetDescription> datasets,
+    public void unarchiveDatasets(String sessionToken, String userSessionToken, List<DatasetDescription> datasets,
             String userId, String userEmailOrNull)
     {
         log("activateDatasets", "NO_OF_DATASETS(%s) USER_ID (%s) USER_EMAIL(%s)", datasets.size(),
@@ -154,7 +154,7 @@ class DataStoreServiceLogger implements IDataStoreService, IInitializable
     }
 
     @Override
-    public void archiveDatasets(String sessionToken, List<DatasetDescription> datasets,
+    public void archiveDatasets(String sessionToken, String userSessionToken, List<DatasetDescription> datasets,
             String userId, String userEmailOrNull, boolean removeFromDataStore)
     {
         log("archiveDatasets",
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTable.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTable.java
index fa1509aa989..d66d4ff6e5a 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTable.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTable.java
@@ -757,7 +757,8 @@ public final class DataSetTable extends AbstractDataSetBusinessObject implements
                 public void execute(String sessionToken, IDataStoreService service,
                         List<DatasetDescription> descriptions, String userId, String userEmailOrNull)
                 {
-                    service.unarchiveDatasets(sessionToken, descriptions, userId, userEmailOrNull);
+                    service.unarchiveDatasets(sessionToken, session.getSessionToken(),
+                            descriptions, userId, userEmailOrNull);
                 }
 
                 @Override
@@ -779,8 +780,8 @@ public final class DataSetTable extends AbstractDataSetBusinessObject implements
                 public void execute(String sessionToken, IDataStoreService service,
                         List<DatasetDescription> descriptions, String userId, String userEmailOrNull)
                 {
-                    service.archiveDatasets(sessionToken, descriptions, userId, userEmailOrNull,
-                            removeFromDataStore);
+                    service.archiveDatasets(sessionToken, session.getSessionToken(), descriptions,
+                            userId, userEmailOrNull, removeFromDataStore);
                 }
 
                 @Override
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IDataStoreService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IDataStoreService.java
index 5ced05af6a3..2bf39a876b6 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IDataStoreService.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IDataStoreService.java
@@ -19,9 +19,9 @@ package ch.systemsx.cisd.openbis.generic.shared;
 import java.util.List;
 import java.util.Map;
 
+import ch.systemsx.cisd.common.exception.InvalidAuthenticationException;
 import ch.systemsx.cisd.openbis.common.conversation.annotation.Conversational;
 import ch.systemsx.cisd.openbis.common.conversation.annotation.Progress;
-import ch.systemsx.cisd.common.exception.InvalidAuthenticationException;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.CustomImportFile;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IDatasetLocation;
@@ -113,8 +113,9 @@ public interface IDataStoreService
      * @param removeFromDataStore when set to <code>true</code> the data sets will be removed from
      *            the data store after a successful archiving operation.
      */
-    public void archiveDatasets(String sessionToken, List<DatasetDescription> datasets,
-            String userId, String userEmailOrNull, boolean removeFromDataStore);
+    public void archiveDatasets(String sessionToken, String userSessionToken,
+            List<DatasetDescription> datasets, String userId, String userEmailOrNull,
+            boolean removeFromDataStore);
 
     /**
      * Schedules unarchiving of provided datasets.
@@ -124,8 +125,8 @@ public interface IDataStoreService
      *            the task is finished. It may be null if the user doesn't have email and no message
      *            will be send in such case.
      */
-    public void unarchiveDatasets(String sessionToken, List<DatasetDescription> datasets,
-            String userId, String userEmailOrNull);
+    public void unarchiveDatasets(String sessionToken, String userSessionToken,
+            List<DatasetDescription> datasets, String userId, String userEmailOrNull);
 
     /**
      * Gets the link from a service that supports the IReportingPluginTask#createLink method.
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTableTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTableTest.java
index 3e48b5f2109..3f090bb614a 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTableTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTableTest.java
@@ -679,8 +679,9 @@ public final class DataSetTableTest extends AbstractBOTest
 
                     prepareUpdateDatasetStatuses(allDataSets, ARCHIVE_PENDING);
 
+                    String userSessionToken = ManagerTestTool.EXAMPLE_SESSION.getSessionToken();
                     allowing(dataStoreService2).archiveDatasets(
-                            with(equal(dss2.getSessionToken())),
+                            with(equal(dss2.getSessionToken())), with(equal(userSessionToken)),
                             with(createDatasetDescriptionsMatcher(d2Array)),
                             with(equal(ManagerTestTool.EXAMPLE_PERSON.getUserId())),
                             with(equal(ManagerTestTool.EXAMPLE_PERSON.getEmail())),
@@ -688,7 +689,7 @@ public final class DataSetTableTest extends AbstractBOTest
                     will(throwException(new RuntimeException()));
 
                     allowing(dataStoreService3).archiveDatasets(
-                            with(equal(dss3.getSessionToken())),
+                            with(equal(dss3.getSessionToken())), with(equal(userSessionToken)),
                             with(createDatasetDescriptionsMatcher(d3Array)),
                             with(equal(ManagerTestTool.EXAMPLE_PERSON.getUserId())),
                             with(equal(ManagerTestTool.EXAMPLE_PERSON.getEmail())),
@@ -737,7 +738,9 @@ public final class DataSetTableTest extends AbstractBOTest
         context.checking(new Expectations()
             {
                 {
+                    String userSessionToken = ManagerTestTool.EXAMPLE_SESSION.getSessionToken();
                     one(service).archiveDatasets(with(equal(store.getSessionToken())),
+                            with(equal(userSessionToken)),
                             with(createDatasetDescriptionsMatcher(dataSets)),
                             with(equal(ManagerTestTool.EXAMPLE_PERSON.getUserId())),
                             with(equal(ManagerTestTool.EXAMPLE_PERSON.getEmail())),
@@ -752,7 +755,9 @@ public final class DataSetTableTest extends AbstractBOTest
         context.checking(new Expectations()
             {
                 {
+                    String userSessionToken = ManagerTestTool.EXAMPLE_SESSION.getSessionToken();
                     one(service).unarchiveDatasets(with(equal(store.getSessionToken())),
+                            with(equal(userSessionToken)),
                             with(createDatasetDescriptionsMatcher(dataSets)),
                             with(equal(ManagerTestTool.EXAMPLE_PERSON.getUserId())),
                             with(equal(ManagerTestTool.EXAMPLE_PERSON.getEmail())));
-- 
GitLab