Skip to content

Commit 3f64b3c

Browse files
SDM binding and technical user customer issues
1 parent 588490f commit 3f64b3c

11 files changed

Lines changed: 77 additions & 31 deletions

File tree

sdm/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
<test-generation-folder>src/test/gen</test-generation-folder>
3535
<maven.compiler.source>17</maven.compiler.source>
3636
<maven.compiler.target>17</maven.compiler.target>
37-
<attachments_version>1.3.1</attachments_version>
37+
<attachments_version>1.4.0</attachments_version>
3838
<lombok.version>1.18.36</lombok.version>
3939
<jacoco.version>0.8.7</jacoco.version>
4040
<ehcache-version>3.10.8</ehcache-version>

sdm/src/main/java/com/sap/cds/sdm/handler/TokenHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public Map<String, Object> getUaaCredentials() {
7171
DefaultServiceBindingAccessor.getInstance().getServiceBindings();
7272
ServiceBinding sdmBinding =
7373
allServiceBindings.stream()
74-
.filter(binding -> "sdm".equalsIgnoreCase(binding.getServiceName().orElse(null)))
74+
.filter(binding -> binding.getTags().contains("sdm"))
7575
.findFirst()
7676
.orElseThrow(() -> new IllegalStateException("SDM binding not found"));
7777
return sdmBinding.getCredentials();

sdm/src/main/java/com/sap/cds/sdm/service/SDMAttachmentsService.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,8 @@ public AttachmentModificationResult createAttachment(CreateAttachmentInput input
181181
return new AttachmentModificationResult(
182182
Boolean.TRUE.equals(createContext.getIsInternalStored()),
183183
createContext.getContentId(),
184-
createContext.getData().getStatus());
184+
createContext.getData().getStatus(),
185+
null);
185186
}
186187

187188
@Override

sdm/src/main/java/com/sap/cds/sdm/service/SDMService.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ public String getFolderIdByPath(
3333

3434
public JSONObject getRepositoryInfo(SDMCredentials sdmCredentials) throws IOException;
3535

36-
public int deleteDocument(String cmisaction, String objectId, String user) throws IOException;
36+
public int deleteDocument(String cmisaction, String objectId, String user, Boolean isSystemUser)
37+
throws IOException;
3738

3839
public void readDocument(
3940
String objectId, SDMCredentials sdmCredentials, AttachmentReadEventContext context)

sdm/src/main/java/com/sap/cds/sdm/service/SDMServiceImpl.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -660,13 +660,17 @@ public Map<String, RepoValue> fetchRepositoryData(JSONObject repoInfo, String re
660660
}
661661

662662
@Override
663-
public int deleteDocument(String cmisaction, String objectId, String user) {
663+
public int deleteDocument(String cmisaction, String objectId, String user, Boolean isSytemUser) {
664664
logger.info(
665-
"Deleting document - action: {}, objectId: {}, user: {}", cmisaction, objectId, user);
665+
"Deleting document - action: {}, objectId: {}, user: {},isSystemUser :{}",
666+
cmisaction,
667+
objectId,
668+
user,
669+
isSytemUser);
666670
long startTime = System.currentTimeMillis();
667671
SDMCredentials sdmCredentials = tokenHandler.getSDMCredentials();
668672
HttpClient httpClient;
669-
if (user.equals(SDMConstants.SYSTEM_USER)) {
673+
if (isSytemUser) {
670674
logger.debug("Using TECHNICAL_USER_FLOW for deletion");
671675
httpClient = tokenHandler.getHttpClient(binding, connectionPool, null, TECHNICAL_USER_FLOW);
672676
} else {

sdm/src/main/java/com/sap/cds/sdm/service/handler/SDMAttachmentsServiceHandler.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,12 +107,20 @@ public void markAttachmentAsDeleted(AttachmentMarkAsDeletedEventContext context)
107107
if (cmisDocuments.isEmpty()) {
108108
// deleteFolder API
109109
logger.info("Deleting folder: {} for entity: {}", folderId, entity);
110-
sdmService.deleteDocument("deleteTree", folderId, context.getDeletionUserInfo().getName());
110+
sdmService.deleteDocument(
111+
"deleteTree",
112+
folderId,
113+
context.getDeletionUserInfo().getName(),
114+
context.getDeletionUserInfo().getIsSystemUser());
111115
logger.info("Folder deleted successfully: {}", folderId);
112116
} else {
113117
if (!isObjectIdPresent(cmisDocuments, objectId)) {
114118
logger.info("Deleting document: {} from repository", objectId);
115-
sdmService.deleteDocument("delete", objectId, context.getDeletionUserInfo().getName());
119+
sdmService.deleteDocument(
120+
"delete",
121+
objectId,
122+
context.getDeletionUserInfo().getName(),
123+
context.getDeletionUserInfo().getIsSystemUser());
116124
logger.info("Document deleted successfully: {}", objectId);
117125
} else {
118126
logger.debug("ObjectId {} is still referenced, not deleting", objectId);

sdm/src/main/java/com/sap/cds/sdm/service/handler/SDMCustomServiceHandler.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1525,13 +1525,20 @@ private void handleCopyFailure(
15251525
logger.error("Copy failure detected, initiating cleanup. Error: {}", e.getMessage());
15261526
if (!folderExists) {
15271527
logger.debug("Deleting newly created folder: {}", folderId);
1528-
sdmService.deleteDocument("deleteTree", folderId, context.getUserInfo().getName());
1528+
sdmService.deleteDocument(
1529+
"deleteTree",
1530+
folderId,
1531+
context.getUserInfo().getName(),
1532+
context.getUserInfo().isSystemUser());
15291533
} else {
15301534
logger.debug(
15311535
"Deleting {} copied attachments from existing folder", attachmentsMetadata.size());
15321536
for (Map<String, String> attachmentMetadata : attachmentsMetadata) {
15331537
sdmService.deleteDocument(
1534-
"delete", attachmentMetadata.get("cmis:objectId"), context.getUserInfo().getName());
1538+
"delete",
1539+
attachmentMetadata.get("cmis:objectId"),
1540+
context.getUserInfo().getName(),
1541+
context.getUserInfo().isSystemUser());
15351542
}
15361543
}
15371544
throw new ServiceException(e.getMessage());

sdm/src/test/java/unit/com/sap/cds/sdm/handler/TokenHandlerTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ public void testGetSDMCredentials() {
140140
mockCredentials.put("uaa", mockUaa);
141141
mockCredentials.put("uri", "https://mock.service.url");
142142

143-
Mockito.when(mockServiceBinding.getServiceName()).thenReturn(Optional.of("sdm"));
143+
Mockito.when(mockServiceBinding.getTags()).thenReturn(Collections.singletonList("sdm"));
144144
Mockito.when(mockServiceBinding.getCredentials()).thenReturn(mockCredentials);
145145

146146
List<ServiceBinding> mockServiceBindings = Collections.singletonList(mockServiceBinding);
@@ -202,7 +202,7 @@ public void testGetHttpClientForOnboardFlow() {
202202
mockCredentials.put("uaa", mockUaa);
203203
mockCredentials.put("uri", "https://mock.service.url");
204204

205-
Mockito.when(mockServiceBinding.getServiceName()).thenReturn(Optional.of("sdm"));
205+
Mockito.when(mockServiceBinding.getTags()).thenReturn(Collections.singletonList("sdm"));
206206
Mockito.when(mockServiceBinding.getCredentials()).thenReturn(mockCredentials);
207207

208208
List<ServiceBinding> mockServiceBindings = Collections.singletonList(mockServiceBinding);

sdm/src/test/java/unit/com/sap/cds/sdm/service/SDMServiceImplTest.java

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -809,10 +809,14 @@ public void testDeleteFolder() throws IOException {
809809
when(response.getEntity()).thenReturn(entity);
810810
when(mockContext.getDeletionUserInfo()).thenReturn(deletionUserInfo);
811811
when(deletionUserInfo.getName()).thenReturn("system-internal");
812+
when(deletionUserInfo.getIsSystemUser()).thenReturn(true);
812813
SDMServiceImpl sdmServiceImpl = new SDMServiceImpl(binding, connectionPool, tokenHandler);
813814
int actualResponse =
814815
sdmServiceImpl.deleteDocument(
815-
"deleteTree", "objectId", mockContext.getDeletionUserInfo().getName());
816+
"deleteTree",
817+
"objectId",
818+
mockContext.getDeletionUserInfo().getName(),
819+
mockContext.getDeletionUserInfo().getIsSystemUser());
816820
assertEquals(200, actualResponse);
817821
} finally {
818822
mockWebServer.shutdown();
@@ -841,7 +845,10 @@ public void testDeleteFolderAuthorities() throws IOException {
841845
SDMServiceImpl sdmServiceImpl = new SDMServiceImpl(binding, connectionPool, tokenHandler);
842846
int actualResponse =
843847
sdmServiceImpl.deleteDocument(
844-
"deleteTree", "objectId", mockContext.getDeletionUserInfo().getName());
848+
"deleteTree",
849+
"objectId",
850+
mockContext.getDeletionUserInfo().getName(),
851+
mockContext.getDeletionUserInfo().getIsSystemUser());
845852
assertEquals(200, actualResponse);
846853
} finally {
847854
mockWebServer.shutdown();
@@ -903,10 +910,14 @@ public void testDeleteDocument() throws IOException {
903910
when(tokenHandler.getSDMCredentials()).thenReturn(mockSdmCredentials);
904911
when(mockContext.getDeletionUserInfo()).thenReturn(deletionUserInfo);
905912
when(deletionUserInfo.getName()).thenReturn("system-internal");
913+
when(deletionUserInfo.getIsSystemUser()).thenReturn(true);
906914
SDMServiceImpl sdmServiceImpl = new SDMServiceImpl(binding, connectionPool, tokenHandler);
907915
int actualResponse =
908916
sdmServiceImpl.deleteDocument(
909-
"delete", "objectId", mockContext.getDeletionUserInfo().getName());
917+
"delete",
918+
"objectId",
919+
mockContext.getDeletionUserInfo().getName(),
920+
mockContext.getDeletionUserInfo().getIsSystemUser());
910921
assertEquals(200, actualResponse);
911922
} finally {
912923
mockWebServer.shutdown();
@@ -934,7 +945,10 @@ public void testDeleteDocumentNamedUserFlow() throws IOException {
934945
SDMServiceImpl sdmServiceImpl = new SDMServiceImpl(binding, connectionPool, tokenHandler);
935946
int actualResponse =
936947
sdmServiceImpl.deleteDocument(
937-
"delete", "objectId", mockContext.getDeletionUserInfo().getName());
948+
"delete",
949+
"objectId",
950+
mockContext.getDeletionUserInfo().getName(),
951+
mockContext.getDeletionUserInfo().getIsSystemUser());
938952
assertEquals(200, actualResponse);
939953
} finally {
940954
mockWebServer.shutdown();
@@ -961,10 +975,14 @@ public void testDeleteDocumentObjectNotFound() throws IOException {
961975
when(tokenHandler.getSDMCredentials()).thenReturn(mockSdmCredentials);
962976
when(mockContext.getDeletionUserInfo()).thenReturn(deletionUserInfo);
963977
when(deletionUserInfo.getName()).thenReturn("system-internal");
978+
when(deletionUserInfo.getIsSystemUser()).thenReturn(true);
964979
SDMServiceImpl sdmServiceImpl = new SDMServiceImpl(binding, connectionPool, tokenHandler);
965980
int actualResponse =
966981
sdmServiceImpl.deleteDocument(
967-
"delete", "ewdwe", mockContext.getDeletionUserInfo().getName());
982+
"delete",
983+
"ewdwe",
984+
mockContext.getDeletionUserInfo().getName(),
985+
mockContext.getDeletionUserInfo().getIsSystemUser());
968986
assertEquals(404, actualResponse);
969987
} finally {
970988
mockWebServer.shutdown();
@@ -1296,12 +1314,16 @@ public void testDeleteDocumentThrowsServiceExceptionOnHttpClientError() throws I
12961314
SDMServiceImpl sdmServiceImpl = new SDMServiceImpl(binding, connectionPool, tokenHandler);
12971315
when(mockContext.getDeletionUserInfo()).thenReturn(deletionUserInfo);
12981316
when(deletionUserInfo.getName()).thenReturn("system-internal");
1317+
when(deletionUserInfo.getIsSystemUser()).thenReturn(true);
12991318
// Ensure ServiceException is thrown
13001319
assertThrows(
13011320
ServiceException.class,
13021321
() ->
13031322
sdmServiceImpl.deleteDocument(
1304-
"delete", "123", mockContext.getDeletionUserInfo().getName()));
1323+
"delete",
1324+
"123",
1325+
mockContext.getDeletionUserInfo().getName(),
1326+
mockContext.getDeletionUserInfo().getIsSystemUser()));
13051327
}
13061328

13071329
@Test

sdm/src/test/java/unit/com/sap/cds/sdm/service/handler/SDMAttachmentsServiceHandlerTest.java

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1425,7 +1425,8 @@ public void testDocumentDeletion() throws IOException {
14251425
.deleteDocument(
14261426
"delete",
14271427
objectId,
1428-
attachmentMarkAsDeletedEventContext.getDeletionUserInfo().getName());
1428+
attachmentMarkAsDeletedEventContext.getDeletionUserInfo().getName(),
1429+
attachmentMarkAsDeletedEventContext.getDeletionUserInfo().getIsSystemUser());
14291430
}
14301431

14311432
@Test
@@ -1461,7 +1462,8 @@ public void testFolderDeletion() throws IOException {
14611462
.deleteDocument(
14621463
"deleteTree",
14631464
folderId,
1464-
attachmentMarkAsDeletedEventContext.getDeletionUserInfo().getName());
1465+
attachmentMarkAsDeletedEventContext.getDeletionUserInfo().getName(),
1466+
attachmentMarkAsDeletedEventContext.getDeletionUserInfo().getIsSystemUser());
14651467
}
14661468

14671469
@Test
@@ -2054,7 +2056,7 @@ public void testMarkAttachmentAsDeleted_WithNullObjectId() throws IOException {
20542056
handlerSpy.markAttachmentAsDeleted(deleteContext);
20552057

20562058
verify(deleteContext).setCompleted();
2057-
verify(sdmService, never()).deleteDocument(anyString(), anyString(), anyString());
2059+
verify(sdmService, never()).deleteDocument(anyString(), anyString(), anyString(), anyBoolean());
20582060
}
20592061

20602062
@Test
@@ -2068,7 +2070,7 @@ public void testMarkAttachmentAsDeleted_WithInsufficientContextValues() throws I
20682070
handlerSpy.markAttachmentAsDeleted(deleteContext);
20692071

20702072
verify(deleteContext).setCompleted();
2071-
verify(sdmService, never()).deleteDocument(anyString(), anyString(), anyString());
2073+
verify(sdmService, never()).deleteDocument(anyString(), anyString(), anyString(), anyBoolean());
20722074
}
20732075

20742076
@Test
@@ -2083,7 +2085,7 @@ public void testMarkAttachmentAsDeleted_WithEmptyString() throws IOException {
20832085
handlerSpy.markAttachmentAsDeleted(deleteContext);
20842086

20852087
verify(deleteContext).setCompleted();
2086-
verify(sdmService, never()).deleteDocument(anyString(), anyString(), anyString());
2088+
verify(sdmService, never()).deleteDocument(anyString(), anyString(), anyString(), anyBoolean());
20872089
}
20882090

20892091
@Test
@@ -2103,7 +2105,7 @@ public void testMarkAttachmentAsDeleted_DeleteFolderWhenNoAttachments() throws I
21032105

21042106
handlerSpy.markAttachmentAsDeleted(deleteContext);
21052107

2106-
verify(sdmService).deleteDocument("deleteTree", "folderId", "testUser");
2108+
verify(sdmService).deleteDocument("deleteTree", "folderId", "testUser", false);
21072109
verify(deleteContext).setCompleted();
21082110
}
21092111

@@ -2127,7 +2129,7 @@ public void testMarkAttachmentAsDeleted_DeleteObjectWhenNotPresent() throws IOEx
21272129

21282130
handlerSpy.markAttachmentAsDeleted(deleteContext);
21292131

2130-
verify(sdmService).deleteDocument("delete", "objectId", "testUser");
2132+
verify(sdmService).deleteDocument("delete", "objectId", "testUser", false);
21312133
verify(deleteContext).setCompleted();
21322134
}
21332135

@@ -2151,7 +2153,7 @@ public void testMarkAttachmentAsDeleted_ObjectIdPresent() throws IOException {
21512153

21522154
handlerSpy.markAttachmentAsDeleted(deleteContext);
21532155

2154-
verify(sdmService, never()).deleteDocument(anyString(), anyString(), anyString());
2156+
verify(sdmService, never()).deleteDocument(anyString(), anyString(), anyString(), anyBoolean());
21552157
verify(deleteContext).setCompleted();
21562158
}
21572159

@@ -2416,7 +2418,7 @@ public void testMarkAttachmentAsDeleted_MultipleObjectsInFolder() throws IOExcep
24162418
handlerSpy.markAttachmentAsDeleted(deleteContext);
24172419

24182420
// Should not call delete on either document since target is present
2419-
verify(sdmService, never()).deleteDocument(anyString(), anyString(), anyString());
2421+
verify(sdmService, never()).deleteDocument(anyString(), anyString(), anyString(), anyBoolean());
24202422
verify(deleteContext).setCompleted();
24212423
}
24222424

0 commit comments

Comments
 (0)