Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
A new query parameter (`ignoreSettingExcludeEmailFromExport`) has been added to the ["View a Dataverse Collection"](https://guides.dataverse.org/en/latest/api/native-api.html#view-a-dataverse-collection) API (`/api/dataverses/{collectionId}`).
This query parameter prevents the contact emails from being excluded when the setting `ExcludeEmailFromExport` is set to true and the user has EditDataverse permissions.
7 changes: 7 additions & 0 deletions doc/sphinx-guides/source/api/native-api.rst
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,13 @@ Usage example:

curl "https://demo.dataverse.org/api/dataverses/root?returnChildCount=true"

If a user with EditDataverse permissions wants to ignore the setting ``ExcludeEmailFromExport`` in order to see the contact emails, they must include the ``ignoreSettingExcludeEmailFromExport`` query parameter.

Usage example:

.. code-block:: bash

curl "https://demo.dataverse.org/api/dataverses/root?ignoreSettingExcludeEmailFromExport=true"

To view an unpublished Dataverse collection:

Expand Down
14 changes: 13 additions & 1 deletion src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java
Original file line number Diff line number Diff line change
Expand Up @@ -717,10 +717,22 @@ private Dataset parseDataset(String datasetJson) throws WrappedResponse {
@GET
@AuthRequired
@Path("{identifier}")
public Response getDataverse(@Context ContainerRequestContext crc, @PathParam("identifier") String idtf, @QueryParam("returnOwners") boolean returnOwners, @QueryParam("returnChildCount") boolean returnChildCount) {
public Response getDataverse(@Context ContainerRequestContext crc,
@PathParam("identifier") String idtf,
@QueryParam("returnOwners") boolean returnOwners,
@QueryParam("returnChildCount") boolean returnChildCount,
@QueryParam("ignoreSettingExcludeEmailFromExport") Boolean ignoreSettingToExcludeEmailFromExport) {
return response(req -> {
Dataverse dataverse = execCommand(new GetDataverseCommand(req, findDataverseOrDie(idtf)));

boolean hideEmail = settingsService.isTrueForKey(SettingsServiceBean.Key.ExcludeEmailFromExport, false);

// Check to see if the caller wants to ignore the ExcludeEmailFromExport setting and that they have permission to do so
boolean ignoreSettingExcludeEmailFromExport = ignoreSettingToExcludeEmailFromExport != null ? ignoreSettingToExcludeEmailFromExport : false;
if (hideEmail && ignoreSettingExcludeEmailFromExport && permissionService.userOn(getRequestUser(crc), dataverse).has(Permission.EditDataverse)) {
hideEmail = false;
}

return ok(json(dataverse, hideEmail, returnOwners, false, returnChildCount ? dataverseService.getChildCount(dataverse) : null));
}, getRequestUser(crc));
}
Expand Down
23 changes: 21 additions & 2 deletions src/test/java/edu/harvard/iq/dataverse/api/DataversesIT.java
Original file line number Diff line number Diff line change
Expand Up @@ -328,6 +328,25 @@ public void testReturnEmail() throws FileNotFoundException {
List dataverseEmailNotAllowed = with(exportDataverseAsJson.body().asString())
.getJsonObject("data.dataverseContacts");
assertNull(dataverseEmailNotAllowed);

Response getDataverseWithIgnoreExcludeEmail = UtilIT.getDataverseWithIgnoreExcludeEmail(dataverseAlias, apiToken, true);
getDataverseWithIgnoreExcludeEmail.prettyPrint();
getDataverseWithIgnoreExcludeEmail.then().assertThat()
.statusCode(OK.getStatusCode());

getDataverseWithIgnoreExcludeEmail.then().assertThat()
.statusCode(OK.getStatusCode())
.body("data.alias", equalTo(dataverseAlias))
.body("data.name", equalTo(dataverseAlias))
.body("data.dataverseContacts[0].displayOrder", equalTo(0))
.body("data.dataverseContacts[0].contactEmail", equalTo(emailAddressOfFirstDataverseContact))
.body("data.permissionRoot", equalTo(true))
.body("data.dataverseType", equalTo("UNCATEGORIZED"));

RestAssured.unregisterParser("text/plain");
List dataverseEmailAllowed = with(getDataverseWithIgnoreExcludeEmail.body().asString())
.getJsonObject("data.dataverseContacts");
assertNotNull(dataverseEmailAllowed);

Response removeExcludeEmail = UtilIT.deleteSetting(SettingsServiceBean.Key.ExcludeEmailFromExport);
removeExcludeEmail.then().assertThat()
Expand All @@ -347,9 +366,9 @@ public void testReturnEmail() throws FileNotFoundException {
.body("data.dataverseType", equalTo("UNCATEGORIZED"));

RestAssured.unregisterParser("text/plain");
List dataverseEmailAllowed = with(exportDataverseAsJson2.body().asString())
List dataverseEmailAllowed2 = with(exportDataverseAsJson2.body().asString())
.getJsonObject("data.dataverseContacts");
assertNotNull(dataverseEmailAllowed);
assertNotNull(dataverseEmailAllowed2);

Response deleteDataverse2 = UtilIT.deleteDataverse(dataverseAlias, apiToken);
deleteDataverse2.prettyPrint();
Expand Down
8 changes: 8 additions & 0 deletions src/test/java/edu/harvard/iq/dataverse/api/UtilIT.java
Original file line number Diff line number Diff line change
Expand Up @@ -1886,6 +1886,14 @@ static Response getDataverseWithChildCount(String alias, String apiToken, boole
+ (returnChildCount ? "/?returnChildCount=true" : ""));
}

static Response getDataverseWithIgnoreExcludeEmail(String alias, String apiToken, boolean ignoreSettingExcludeEmailFromExport) {
return given()
.header(API_TOKEN_HTTP_HEADER, apiToken)
.get("/api/dataverses/"
+ alias
+ (ignoreSettingExcludeEmailFromExport ? "/?ignoreSettingExcludeEmailFromExport=true" : ""));
}

static Response getMetadataBlockFromDatasetVersion(String persistentId, String versionNumber, String metadataBlock, String apiToken) {
return given()
.header(API_TOKEN_HTTP_HEADER, apiToken)
Expand Down