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