Skip to content

Commit c73691b

Browse files
committed
throw exception if non superuser changes the limit
1 parent 81f72b2 commit c73691b

File tree

6 files changed

+26
-26
lines changed

6 files changed

+26
-26
lines changed

src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -135,13 +135,9 @@ public Response addRoot(@Context ContainerRequestContext crc, String body) {
135135
@Path("{identifier}")
136136
public Response addDataverse(@Context ContainerRequestContext crc, String body, @PathParam("identifier") String parentIdtf) {
137137
Dataverse newDataverse;
138-
AuthenticatedUser u;
139-
try {
140-
u = getRequestAuthenticatedUserOrDie(crc);
141-
newDataverse = parseAndValidateAddDataverseRequestBody(body, u.isSuperuser());
142138

143-
} catch (WrappedResponse ww) {
144-
return handleWrappedResponse(ww);
139+
try {
140+
newDataverse = parseAndValidateAddDataverseRequestBody(body);
145141
} catch (JsonParsingException jpe) {
146142
return error(Status.BAD_REQUEST, MessageFormat.format(BundleUtil.getStringFromBundle("dataverse.create.error.jsonparse"), jpe.getMessage()));
147143
} catch (JsonParseException ex) {
@@ -158,9 +154,11 @@ public Response addDataverse(@Context ContainerRequestContext crc, String body,
158154
newDataverse.setOwner(owner);
159155
}
160156

157+
AuthenticatedUser u = getRequestAuthenticatedUserOrDie(crc);
161158
newDataverse = execCommand(new CreateDataverseCommand(newDataverse, createDataverseRequest(u), facets, inputLevels, metadataBlocks));
162159
return created("/dataverses/" + newDataverse.getAlias(), json(newDataverse));
163-
160+
} catch (WrappedResponse ww) {
161+
return handleWrappedResponse(ww);
164162
} catch (EJBException ex) {
165163
return handleEJBException(ex, "Error creating dataverse.");
166164
} catch (Exception ex) {
@@ -169,10 +167,10 @@ public Response addDataverse(@Context ContainerRequestContext crc, String body,
169167
}
170168
}
171169

172-
private Dataverse parseAndValidateAddDataverseRequestBody(String body, Boolean isSuperuser) throws JsonParsingException, JsonParseException {
170+
private Dataverse parseAndValidateAddDataverseRequestBody(String body) throws JsonParsingException, JsonParseException {
173171
try {
174172
JsonObject addDataverseJson = JsonUtil.getJsonObject(body);
175-
return jsonParser().parseDataverse(addDataverseJson, isSuperuser);
173+
return jsonParser().parseDataverse(addDataverseJson);
176174
} catch (JsonParsingException jpe) {
177175
logger.log(Level.SEVERE, "Json: {0}", body);
178176
throw jpe;
@@ -187,17 +185,15 @@ private Dataverse parseAndValidateAddDataverseRequestBody(String body, Boolean i
187185
@Path("{identifier}")
188186
public Response updateDataverse(@Context ContainerRequestContext crc, String body, @PathParam("identifier") String identifier) {
189187
Dataverse dataverse;
190-
AuthenticatedUser u;
191188
try {
192-
u = getRequestAuthenticatedUserOrDie(crc);
193189
dataverse = findDataverseOrDie(identifier);
194190
} catch (WrappedResponse e) {
195191
return e.getResponse();
196192
}
197193

198194
DataverseDTO updatedDataverseDTO;
199195
try {
200-
updatedDataverseDTO = parseAndValidateUpdateDataverseRequestBody(body, u.isSuperuser());
196+
updatedDataverseDTO = parseAndValidateUpdateDataverseRequestBody(body);
201197
} catch (JsonParsingException jpe) {
202198
return error(Status.BAD_REQUEST, MessageFormat.format(BundleUtil.getStringFromBundle("dataverse.create.error.jsonparse"), jpe.getMessage()));
203199
} catch (JsonParseException ex) {
@@ -209,6 +205,7 @@ public Response updateDataverse(@Context ContainerRequestContext crc, String bod
209205
List<MetadataBlock> metadataBlocks = parseMetadataBlocks(body);
210206
List<DatasetFieldType> facets = parseFacets(body);
211207

208+
AuthenticatedUser u = getRequestAuthenticatedUserOrDie(crc);
212209
dataverse = execCommand(new UpdateDataverseCommand(dataverse, facets, null, createDataverseRequest(u), inputLevels, metadataBlocks, updatedDataverseDTO));
213210
return ok(json(dataverse));
214211

@@ -220,10 +217,10 @@ public Response updateDataverse(@Context ContainerRequestContext crc, String bod
220217
}
221218
}
222219

223-
private DataverseDTO parseAndValidateUpdateDataverseRequestBody(String body, Boolean isSuperuser) throws JsonParsingException, JsonParseException {
220+
private DataverseDTO parseAndValidateUpdateDataverseRequestBody(String body) throws JsonParsingException, JsonParseException {
224221
try {
225222
JsonObject updateDataverseJson = JsonUtil.getJsonObject(body);
226-
return jsonParser().parseDataverseDTO(updateDataverseJson, isSuperuser);
223+
return jsonParser().parseDataverseDTO(updateDataverseJson);
227224
} catch (JsonParsingException jpe) {
228225
logger.log(Level.SEVERE, "Json: {0}", body);
229226
throw jpe;

src/main/java/edu/harvard/iq/dataverse/engine/command/impl/CreateDataverseCommand.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import edu.harvard.iq.dataverse.engine.command.RequiredPermissions;
1212
import edu.harvard.iq.dataverse.engine.command.exception.IllegalCommandException;
1313
import edu.harvard.iq.dataverse.settings.SettingsServiceBean;
14+
import edu.harvard.iq.dataverse.util.BundleUtil;
1415

1516
import java.sql.Timestamp;
1617
import java.util.ArrayList;
@@ -50,6 +51,9 @@ protected Dataverse innerExecute(CommandContext ctxt) throws IllegalCommandExcep
5051
throw new IllegalCommandException("Root Dataverse already exists. Cannot create another one", this);
5152
}
5253
}
54+
if (!getUser().isSuperuser() && dataverse.isDatasetFileCountLimitSet(dataverse.getDatasetFileCountLimit())) {
55+
throw new IllegalCommandException(BundleUtil.getStringFromBundle("file.dataset.error.set.file.count.limit"), this);
56+
}
5357

5458
if (metadataBlocks != null && !metadataBlocks.isEmpty()) {
5559
dataverse.setMetadataBlockRoot(true);

src/main/java/edu/harvard/iq/dataverse/engine/command/impl/UpdateDataverseCommand.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import edu.harvard.iq.dataverse.engine.command.DataverseRequest;
1212
import edu.harvard.iq.dataverse.engine.command.RequiredPermissions;
1313
import edu.harvard.iq.dataverse.engine.command.exception.IllegalCommandException;
14+
import edu.harvard.iq.dataverse.util.BundleUtil;
1415

1516
import java.util.ArrayList;
1617
import java.util.List;
@@ -66,6 +67,9 @@ protected Dataverse innerExecute(CommandContext ctxt) throws IllegalCommandExcep
6667
}
6768
}
6869
}
70+
if (!getUser().isSuperuser() && updatedDataverseDTO.getDatasetFileCountLimit() != dataverse.getDatasetFileCountLimit()) {
71+
throw new IllegalCommandException(BundleUtil.getStringFromBundle("file.dataset.error.set.file.count.limit"), this);
72+
}
6973

7074
Dataverse oldDv = ctxt.dataverses().find(dataverse.getId());
7175

src/main/java/edu/harvard/iq/dataverse/util/json/JsonParser.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -119,9 +119,6 @@ public void setLenient(boolean lenient) {
119119
}
120120

121121
public Dataverse parseDataverse(JsonObject jobj) throws JsonParseException {
122-
return parseDataverse(jobj, false);
123-
}
124-
public Dataverse parseDataverse(JsonObject jobj, boolean isSuperuser) throws JsonParseException {
125122
Dataverse dv = new Dataverse();
126123

127124
/**
@@ -137,7 +134,7 @@ public Dataverse parseDataverse(JsonObject jobj, boolean isSuperuser) throws Jso
137134
dv.setPermissionRoot(jobj.getBoolean("permissionRoot", false));
138135
dv.setFacetRoot(jobj.getBoolean("facetRoot", false));
139136
dv.setAffiliation(jobj.getString("affiliation", null));
140-
if (isSuperuser) {
137+
if (jobj.containsKey("datasetFileCountLimit")) {
141138
dv.setDatasetFileCountLimit(jobj.getInt("datasetFileCountLimit", -1));
142139
}
143140

@@ -206,9 +203,6 @@ public Dataverse parseDataverse(JsonObject jobj, boolean isSuperuser) throws Jso
206203
}
207204

208205
public DataverseDTO parseDataverseDTO(JsonObject jsonObject) throws JsonParseException {
209-
return parseDataverseDTO(jsonObject, false);
210-
}
211-
public DataverseDTO parseDataverseDTO(JsonObject jsonObject, Boolean isSuperuser) throws JsonParseException {
212206
DataverseDTO dataverseDTO = new DataverseDTO();
213207

214208
setDataverseDTOPropertyIfPresent(jsonObject, "alias", dataverseDTO::setAlias);
@@ -236,7 +230,7 @@ public DataverseDTO parseDataverseDTO(JsonObject jsonObject, Boolean isSuperuser
236230
}
237231
dataverseDTO.setDataverseContacts(contacts);
238232
}
239-
if (isSuperuser && jsonObject.containsKey("datasetFileCountLimit")) {
233+
if (jsonObject.containsKey("datasetFileCountLimit")) {
240234
dataverseDTO.setDatasetFileCountLimit(Integer.valueOf(jsonObject.getInt("datasetFileCountLimit")));
241235
}
242236

src/main/java/propertyFiles/Bundle.properties

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2385,6 +2385,7 @@ file.message.replaceSuccess=The file has been replaced.
23852385

23862386
# File Add/Replace operation messages
23872387
file.add.count_exceeds_limit=Number of files can not exceed the maximum number of files allowed for this Dataset ({0}).
2388+
file.dataset.error.set.file.count.limit=Only Superuser can set the Dataset File Count Limit.
23882389
file.addreplace.file_size_ok=File size is in range.
23892390
file.addreplace.error.byte_abrev=B
23902391
file.addreplace.error.file_exceeds_limit=This file size ({0}) exceeds the size limit of {1}.
@@ -3222,4 +3223,4 @@ updateDatasetFieldsCommand.api.processDatasetUpdate.parseError=Error parsing dat
32223223
abstractApiBean.error.datasetInternalVersionNumberIsOutdated=Dataset internal version number {0} is outdated
32233224

32243225
#RoleAssigneeServiceBean.java
3225-
roleAssigneeServiceBean.error.dataverseRequestCannotBeNull=DataverseRequest cannot be null.
3226+
roleAssigneeServiceBean.error.dataverseRequestCannotBeNull=DataverseRequest cannot be null.

src/test/java/edu/harvard/iq/dataverse/api/FilesIT.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3308,9 +3308,9 @@ public void testUploadFilesWithLimits() throws JsonParseException {
33083308
// Test changing the limit by a non-superuser
33093309
dv.setDatasetFileCountLimit(100);
33103310
updateDataverseResponse = UtilIT.updateDataverse(dataverseAlias, dv, apiToken);
3311+
updateDataverseResponse.prettyPrint();
33113312
updateDataverseResponse.then().assertThat()
3312-
.statusCode(OK.getStatusCode())
3313-
.body("data.effectiveDatasetFileCountLimit", equalTo(1))
3314-
.body("data.datasetFileCountLimit", equalTo(1));
3313+
.body("message", containsString(BundleUtil.getStringFromBundle("file.dataset.error.set.file.count.limit")))
3314+
.statusCode(INTERNAL_SERVER_ERROR.getStatusCode());
33153315
}
33163316
}

0 commit comments

Comments
 (0)