Skip to content

Commit 8fb2eef

Browse files
vins01-4scienceMicheleboychuk
authored andcommitted
Merged in task/dspace-cris-2024_02_x/DSC-2686 (pull request DSpace#5256)
Task/dspace cris 2024 02 x/DSC-2686 Approved-by: Mykhaylo Boychuk
2 parents c8a0dcc + 090f57a commit 8fb2eef

2 files changed

Lines changed: 24 additions & 6 deletions

File tree

dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/ConfigurationRestRepository.java

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ protected String[] getExposedProperties() {
4343
return configurationService.getArrayProperty("rest.properties.exposed");
4444
}
4545

46-
protected String[] getAdminRestrictedProperties() {
46+
protected String[] getAdminExposedProperties() {
4747
return configurationService.getArrayProperty("admin.rest.properties.exposed");
4848
}
4949

@@ -66,12 +66,13 @@ protected String[] getAdminRestrictedProperties() {
6666
@Override
6767
@PreAuthorize("permitAll()")
6868
public PropertyRest findOne(Context context, String property) {
69-
List<String> exposedProperties = Arrays.asList(getExposedProperties());
70-
List<String> adminRestrictedProperties = Arrays.asList(getAdminRestrictedProperties());
69+
if (
70+
!isAdminAllowed(context, property) && !isExposed(property)
71+
) {
72+
throw new ResourceNotFoundException("No such configuration property: " + property);
73+
}
7174

72-
if (!configurationService.hasProperty(property) ||
73-
(adminRestrictedProperties.contains(property) && !isCurrentUserAdmin(context)) ||
74-
(!exposedProperties.contains(property) && !isCurrentUserAdmin(context))) {
75+
if (!configurationService.hasProperty(property)) {
7576
throw new ResourceNotFoundException("No such configuration property: " + property);
7677
}
7778

@@ -82,6 +83,16 @@ public PropertyRest findOne(Context context, String property) {
8283
return propertyRest;
8384
}
8485

86+
private boolean isExposed(String property) {
87+
List<String> exposedProperties = Arrays.asList(getExposedProperties());
88+
return exposedProperties.contains(property);
89+
}
90+
91+
private boolean isAdminAllowed(Context context, String property) {
92+
List<String> adminExposedProperties = Arrays.asList(getAdminExposedProperties());
93+
return adminExposedProperties.contains(property) && isCurrentUserAdmin(context);
94+
}
95+
8596
private boolean isCurrentUserAdmin(Context context) {
8697
try {
8798
return authorizeService.isAdmin(context);

dspace-server-webapp/src/test/java/org/dspace/app/rest/ConfigurationRestRepositoryIT.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,13 @@ public void getAdminRestrictedValueRetrieved() throws Exception {
6060
.andExpect(status().is2xxSuccessful());
6161
}
6262

63+
@Test
64+
public void getNonAdminRestrictedPropertyNotRetrieved() throws Exception {
65+
String tokenAdmin = getAuthToken(admin.getEmail(), password);
66+
getClient(tokenAdmin).perform(get("/api/config/properties/db.url"))
67+
.andExpect(status().isNotFound());
68+
}
69+
6370
@Test
6471
public void getAll() throws Exception {
6572
getClient().perform(get("/api/config/properties/"))

0 commit comments

Comments
 (0)