• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

CeON / dataverse / 1369

19 Jun 2024 01:24PM UTC coverage: 25.507% (-0.003%) from 25.51%
1369

push

jenkins

web-flow
Closes #2467: Add button to users dashboard to download csv with list of users (#2495)

* Closes #2478: API to download CSV file with all registered users

* Re-use existing superuser fetching method

* Closes #2467: Add button to users dashboard to download csv with list of users

4 of 14 new or added lines in 3 files covered. (28.57%)

1 existing line in 1 file now uncovered.

17782 of 69713 relevant lines covered (25.51%)

0.26 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/dataverse-webapp/src/main/java/edu/harvard/iq/dataverse/api/Users.java
1
package edu.harvard.iq.dataverse.api;
2

3
import edu.harvard.iq.dataverse.api.annotations.ApiWriteOperation;
4
import edu.harvard.iq.dataverse.persistence.user.AuthenticatedUser;
5
import edu.harvard.iq.dataverse.userdata.AuthenticatedUserCsvWriter;
6
import edu.harvard.iq.dataverse.users.ChangeUserIdentifierService;
7
import edu.harvard.iq.dataverse.users.MergeInAccountService;
8

9
import javax.ejb.EJBException;
10
import javax.inject.Inject;
11
import javax.ws.rs.GET;
12
import javax.ws.rs.POST;
13
import javax.ws.rs.Path;
14
import javax.ws.rs.PathParam;
15
import javax.ws.rs.Produces;
16
import javax.ws.rs.core.Response;
17
import javax.ws.rs.core.StreamingOutput;
18

19
/**
20
 *
21
 * @author madunlap
22
 */
23
@Path("users")
24
public class Users extends AbstractApiBean {
×
25

26
    @Inject
27
    private ChangeUserIdentifierService changeUserIdentifierService;
28

29
    @Inject
30
    private MergeInAccountService mergeInAccountService;
31

32
    @Inject
33
    private AuthenticatedUserCsvWriter authenticatedUserCsvWriter;
34

35
    @GET
36
    @Produces({"text/csv"})
37
    @Path("csv")
38
    public Response listUsersCSV() throws WrappedResponse {
NEW
39
        findSuperuserWithSessionFallbackOrDie();
×
40

41
        StreamingOutput csvContent = output -> authenticatedUserCsvWriter.write(output, authSvc.findAllAuthenticatedUsers());
×
42

43
        return Response.ok(csvContent)
×
44
                .header("Content-Disposition", "attachment; filename=\"authenticated-users.csv\"")
×
45
                .build();
×
46
    }
47

48
    @POST
49
    @ApiWriteOperation
50
    @Path("{consumedIdentifier}/mergeIntoUser/{baseIdentifier}")
51
    public Response mergeInAuthenticatedUser(@PathParam("consumedIdentifier") String consumedIdentifier, @PathParam("baseIdentifier") String baseIdentifier) {
52
        try {
53
            AuthenticatedUser user = findAuthenticatedUserOrDie();
×
54
            if (!user.isSuperuser()) {
×
55
                return error(Response.Status.FORBIDDEN, "This API call can be used by superusers only");
×
56
            }
57
            mergeInAccountService.mergeAccounts(consumedIdentifier, baseIdentifier);
×
58

59
            return ok("All account data for " + consumedIdentifier + " has been merged into " + baseIdentifier + ".");
×
60
        } catch (WrappedResponse ex) {
×
61
            return ex.getResponse();
×
62
        } catch (EJBException ise) {
×
63
            return badRequest(ise.getCause().getMessage());
×
64
        } catch (Exception e){
×
65
            return error(Response.Status.BAD_REQUEST, "Error calling MergeInAccountService: " + e.getLocalizedMessage());
×
66
        }
67
    }
68

69
    @POST
70
    @ApiWriteOperation
71
    @Path("{identifier}/changeIdentifier/{newIdentifier}")
72
    public Response changeAuthenticatedUserIdentifier(@PathParam("identifier") String oldIdentifier, @PathParam("newIdentifier")  String newIdentifier) {
73
        try {
74
            AuthenticatedUser user = findAuthenticatedUserOrDie();
×
75
            if (!user.isSuperuser()) {
×
76
                return error(Response.Status.FORBIDDEN, "This API call can be used by superusers only");
×
77
            }
78
            changeUserIdentifierService.changeUserIdentifier(oldIdentifier, newIdentifier);
×
79

80
            return ok("UserIdentifier changed from " + oldIdentifier + " to " + newIdentifier);
×
81
        } catch (WrappedResponse ex) {
×
82
            return ex.getResponse();
×
83
        } catch (EJBException ise) {
×
84
            return badRequest(ise.getCause().getMessage());
×
85
        } catch (Exception e){
×
86
            return error(Response.Status.BAD_REQUEST, "Error calling ChangeUserIdentifierService: " + e.getLocalizedMessage());
×
87
        }
88
    }
89

90
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc