Skip to content

Commit eaee618

Browse files
authored
Merge pull request #5402 from Sage-Bionetworks/release-562
Release 562
2 parents d129d22 + ad10c1b commit eaee618

File tree

4 files changed

+32
-8
lines changed

4 files changed

+32
-8
lines changed

services/repository-managers/src/main/java/org/sagebionetworks/repo/manager/grid/create/RecordSetCreateGridHandler.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,13 @@
66
import java.util.Optional;
77

88
import org.sagebionetworks.repo.manager.EntityManager;
9+
import org.sagebionetworks.repo.manager.entity.EntityAuthorizationManager;
910
import org.sagebionetworks.repo.manager.file.CsvFileHandleProvider;
1011
import org.sagebionetworks.repo.manager.file.FileHandleManager;
1112
import org.sagebionetworks.repo.manager.grid.PatchRowHandler;
1213
import org.sagebionetworks.repo.manager.grid.PatchStore;
1314
import org.sagebionetworks.repo.manager.table.UploadPreviewBuilder;
15+
import org.sagebionetworks.repo.model.ACCESS_TYPE;
1416
import org.sagebionetworks.repo.model.RecordSet;
1517
import org.sagebionetworks.repo.model.UserInfo;
1618
import org.sagebionetworks.repo.model.dao.asynch.AsyncJobProgressCallback;
@@ -36,13 +38,15 @@ public class RecordSetCreateGridHandler implements CreateGridHandler {
3638
private final GridDao gridDao;
3739
private final EntityManager entityManager;
3840
private final FileHandleManager fileHandleManager;
41+
private final EntityAuthorizationManager authorizationManager;
3942
private final CsvFileHandleProvider csvProvider;
4043

41-
public RecordSetCreateGridHandler(GridDao gridDao, EntityManager entityManager, FileHandleManager fileHandleManager, CsvFileHandleProvider csvProvider) {
44+
public RecordSetCreateGridHandler(GridDao gridDao, EntityManager entityManager, FileHandleManager fileHandleManager, EntityAuthorizationManager authorizationManager, CsvFileHandleProvider csvProvider) {
4245
super();
4346
this.gridDao = gridDao;
4447
this.entityManager = entityManager;
4548
this.fileHandleManager = fileHandleManager;
49+
this.authorizationManager = authorizationManager;
4650
this.csvProvider = csvProvider;
4751
}
4852

@@ -55,8 +59,12 @@ public boolean canCreate(CreateGridRequest request) {
5559
public CreateGridHandlerResult createGrid(AsyncJobProgressCallback callback, UserInfo user, CreateGridRequest request,
5660
PatchStore patchStore) {
5761
String recordSetId = request.getRecordSetId();
62+
5863
RecordSet recordSet = entityManager.getEntity(user, recordSetId, RecordSet.class);
59-
64+
65+
// Makes sure the user has download access
66+
authorizationManager.hasAccess(user, recordSet.getId(), ACCESS_TYPE.DOWNLOAD).checkAuthorizationOrElseThrow();
67+
6068
Optional<String> validationSchemaId = entityManager.findBoundSchema(recordSetId)
6169
.map(binding -> binding.getJsonSchemaVersionInfo().get$id());
6270

@@ -65,7 +73,8 @@ public CreateGridHandlerResult createGrid(AsyncJobProgressCallback callback, Use
6573

6674
GridReplica replica = gridDao.createReplica(user.getId(), session.getSessionId(), false, EventSource.INTERNAL);
6775

68-
FileHandle fileHandle = fileHandleManager.getRawFileHandle(user, recordSet.getDataFileHandleId());
76+
// We already checked that the user has download access
77+
FileHandle fileHandle = fileHandleManager.getRawFileHandleUnchecked(recordSet.getDataFileHandleId());
6978

7079
CsvTableDescriptor csvDescriptor = recordSet.getCsvDescriptor();
7180

services/repository-managers/src/main/java/org/sagebionetworks/repo/manager/grid/internal/replica/export/GridRecordSetExporterImpl.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ String exportToCsv(UserInfo user, String sessionId, CsvTableDescriptor csvDescri
7272
DownloadFromGridRequest request = new DownloadFromGridRequest()
7373
.setSessionId(sessionId)
7474
.setWriteHeader(true)
75+
.setIncludeEtag(false)
76+
.setIncludeRowIdAndRowVersion(false)
7577
.setCsvTableDescriptor(csvDescriptor);
7678

7779
DownloadFromGridResult result;

services/repository-managers/src/test/java/org/sagebionetworks/repo/manager/grid/create/RecordSetCreateGridHandlerTest.java

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,15 @@
3030
import org.mockito.Spy;
3131
import org.mockito.junit.jupiter.MockitoExtension;
3232
import org.sagebionetworks.repo.manager.EntityManager;
33+
import org.sagebionetworks.repo.manager.entity.EntityAuthorizationManager;
3334
import org.sagebionetworks.repo.manager.file.CsvFileHandleProvider;
3435
import org.sagebionetworks.repo.manager.file.FileHandleManager;
3536
import org.sagebionetworks.repo.manager.grid.PatchRowHandler;
3637
import org.sagebionetworks.repo.manager.grid.PatchStore;
38+
import org.sagebionetworks.repo.model.ACCESS_TYPE;
3739
import org.sagebionetworks.repo.model.RecordSet;
3840
import org.sagebionetworks.repo.model.UserInfo;
41+
import org.sagebionetworks.repo.model.auth.AuthorizationStatus;
3942
import org.sagebionetworks.repo.model.dao.asynch.AsyncJobProgressCallback;
4043
import org.sagebionetworks.repo.model.dbo.grid.CreateGridSession;
4144
import org.sagebionetworks.repo.model.dbo.grid.GridDao;
@@ -80,6 +83,9 @@ public class RecordSetCreateGridHandlerTest {
8083
@Mock
8184
private FileHandleManager mockFileHandleManager;
8285

86+
@Mock
87+
private EntityAuthorizationManager mockAuthorizationManager;
88+
8389
@Mock
8490
private CsvFileHandleProvider mockCsvProvider;
8591

@@ -145,6 +151,7 @@ public void testCanCreate() {
145151
public void testBuildSessionFromRecordSet() throws IOException {
146152
when(mockUser.getId()).thenReturn(userId);
147153
when(mockEntityManager.getEntity(mockUser, recordSet.getId(), RecordSet.class)).thenReturn(recordSet);
154+
when(mockAuthorizationManager.hasAccess(mockUser, recordSet.getId(), ACCESS_TYPE.DOWNLOAD)).thenReturn(AuthorizationStatus.authorized());
148155
when(mockEntityManager.findBoundSchema(recordSet.getId())).thenReturn(Optional.of(
149156
new JsonSchemaObjectBinding().setJsonSchemaVersionInfo(new JsonSchemaVersionInfo().set$id(schema$id))));
150157

@@ -156,7 +163,7 @@ public void testBuildSessionFromRecordSet() throws IOException {
156163

157164
when(mockGridDao.createReplica(userId, gridSessionId, isAgent, EventSource.INTERNAL)).thenReturn(replica);
158165

159-
when(mockFileHandleManager.getRawFileHandle(mockUser, recordSet.getDataFileHandleId())).thenReturn(csvFile);
166+
when(mockFileHandleManager.getRawFileHandleUnchecked(recordSet.getDataFileHandleId())).thenReturn(csvFile);
160167

161168
Long maxRowSize = (long) TableModelUtils.calculateMaxRowSize(csvSchema);
162169

@@ -188,6 +195,7 @@ public void testBuildSessionFromRecordSet() throws IOException {
188195
public void testBuildSessionFromRecordSetWithNoValidationSchema() throws IOException {
189196
when(mockUser.getId()).thenReturn(userId);
190197
when(mockEntityManager.getEntity(mockUser, recordSet.getId(), RecordSet.class)).thenReturn(recordSet);
198+
when(mockAuthorizationManager.hasAccess(mockUser, recordSet.getId(), ACCESS_TYPE.DOWNLOAD)).thenReturn(AuthorizationStatus.authorized());
191199
when(mockEntityManager.findBoundSchema(recordSet.getId())).thenReturn(Optional.empty());
192200

193201
gridSession = new GridSession().setSessionId(gridSessionId);
@@ -197,7 +205,7 @@ public void testBuildSessionFromRecordSetWithNoValidationSchema() throws IOExcep
197205

198206
when(mockGridDao.createReplica(userId, gridSessionId, isAgent, EventSource.INTERNAL)).thenReturn(replica);
199207

200-
when(mockFileHandleManager.getRawFileHandle(mockUser, recordSet.getDataFileHandleId())).thenReturn(csvFile);
208+
when(mockFileHandleManager.getRawFileHandleUnchecked(recordSet.getDataFileHandleId())).thenReturn(csvFile);
201209

202210
Long maxRowSize = (long) TableModelUtils.calculateMaxRowSize(csvSchema);
203211

@@ -231,6 +239,7 @@ public void testBuildSessionFromRecordSetWithNoCsvDescriptor() throws IOExceptio
231239

232240
when(mockUser.getId()).thenReturn(userId);
233241
when(mockEntityManager.getEntity(mockUser, recordSet.getId(), RecordSet.class)).thenReturn(recordSet);
242+
when(mockAuthorizationManager.hasAccess(mockUser, recordSet.getId(), ACCESS_TYPE.DOWNLOAD)).thenReturn(AuthorizationStatus.authorized());
234243
when(mockEntityManager.findBoundSchema(recordSet.getId())).thenReturn(Optional.empty());
235244

236245
gridSession = new GridSession().setSessionId(gridSessionId);
@@ -240,7 +249,7 @@ public void testBuildSessionFromRecordSetWithNoCsvDescriptor() throws IOExceptio
240249

241250
when(mockGridDao.createReplica(userId, gridSessionId, isAgent, EventSource.INTERNAL)).thenReturn(replica);
242251

243-
when(mockFileHandleManager.getRawFileHandle(mockUser, recordSet.getDataFileHandleId())).thenReturn(csvFile);
252+
when(mockFileHandleManager.getRawFileHandleUnchecked(recordSet.getDataFileHandleId())).thenReturn(csvFile);
244253

245254
Long maxRowSize = (long) TableModelUtils.calculateMaxRowSize(csvSchema);
246255

@@ -273,6 +282,7 @@ public void testBuildSessionFromRecordSetWithNoCsvDescriptor() throws IOExceptio
273282
public void testBuildSessionFromRecordSetWithIOException() throws IOException {
274283
when(mockUser.getId()).thenReturn(userId);
275284
when(mockEntityManager.getEntity(mockUser, recordSet.getId(), RecordSet.class)).thenReturn(recordSet);
285+
when(mockAuthorizationManager.hasAccess(mockUser, recordSet.getId(), ACCESS_TYPE.DOWNLOAD)).thenReturn(AuthorizationStatus.authorized());
276286
when(mockEntityManager.findBoundSchema(recordSet.getId())).thenReturn(Optional.empty());
277287

278288
gridSession = new GridSession().setSessionId(gridSessionId);
@@ -282,7 +292,7 @@ public void testBuildSessionFromRecordSetWithIOException() throws IOException {
282292

283293
when(mockGridDao.createReplica(userId, gridSessionId, isAgent, EventSource.INTERNAL)).thenReturn(replica);
284294

285-
when(mockFileHandleManager.getRawFileHandle(mockUser, recordSet.getDataFileHandleId())).thenReturn(csvFile);
295+
when(mockFileHandleManager.getRawFileHandleUnchecked(recordSet.getDataFileHandleId())).thenReturn(csvFile);
286296

287297
IOException ioe = new IOException("nope");
288298

@@ -313,6 +323,7 @@ public void testBuildSessionFromRecordSetWithIOException() throws IOException {
313323
public void testBuildSessionFromRecordSetWithEmptyCsvSchema() throws IOException {
314324
when(mockUser.getId()).thenReturn(userId);
315325
when(mockEntityManager.getEntity(mockUser, recordSet.getId(), RecordSet.class)).thenReturn(recordSet);
326+
when(mockAuthorizationManager.hasAccess(mockUser, recordSet.getId(), ACCESS_TYPE.DOWNLOAD)).thenReturn(AuthorizationStatus.authorized());
316327
when(mockEntityManager.findBoundSchema(recordSet.getId())).thenReturn(Optional.empty());
317328

318329
gridSession = new GridSession().setSessionId(gridSessionId);
@@ -322,7 +333,7 @@ public void testBuildSessionFromRecordSetWithEmptyCsvSchema() throws IOException
322333

323334
when(mockGridDao.createReplica(userId, gridSessionId, isAgent, EventSource.INTERNAL)).thenReturn(replica);
324335

325-
when(mockFileHandleManager.getRawFileHandle(mockUser, recordSet.getDataFileHandleId())).thenReturn(csvFile);
336+
when(mockFileHandleManager.getRawFileHandleUnchecked(recordSet.getDataFileHandleId())).thenReturn(csvFile);
326337

327338
csvSchema = Collections.emptyList();
328339

services/repository-managers/src/test/java/org/sagebionetworks/repo/manager/grid/internal/replica/export/GridRecordSetExporterImplTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@ public void testExportGrid() throws Exception {
100100
DownloadFromGridRequest expectdDownloadRequest = new DownloadFromGridRequest()
101101
.setSessionId(sessionId)
102102
.setWriteHeader(true)
103+
.setIncludeEtag(false)
104+
.setIncludeRowIdAndRowVersion(false)
103105
.setCsvTableDescriptor(csvDescriptor);
104106

105107
when(mockCsvExporter.exportGridAsCsv(eq(user), eq(expectdDownloadRequest), eq(mockJobCallback), any(ValidationSummaryBuilder.class)))

0 commit comments

Comments
 (0)