• 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/dashboard/DashboardUsersPage.java
1
package edu.harvard.iq.dataverse.dashboard;
2

3
import edu.harvard.iq.dataverse.DataverseSession;
4
import edu.harvard.iq.dataverse.PermissionsWrapper;
5
import edu.harvard.iq.dataverse.UserServiceBean;
6
import edu.harvard.iq.dataverse.common.BundleUtil;
7
import edu.harvard.iq.dataverse.util.JsfHelper;
8
import edu.harvard.iq.dataverse.util.SystemConfig;
9
import io.vavr.control.Try;
10
import org.omnifaces.cdi.ViewScoped;
11
import org.primefaces.model.LazyDataModel;
12

13
import javax.inject.Inject;
14
import javax.inject.Named;
15
import java.text.NumberFormat;
16
import java.util.logging.Level;
17
import java.util.logging.Logger;
18

19
@ViewScoped
20
@Named("DashboardUsersPage")
21
public class DashboardUsersPage implements java.io.Serializable {
22

23
    private UserServiceBean userService;
24
    private DataverseSession session;
25
    private PermissionsWrapper permissionsWrapper;
26
    private DashboardUsersService dashboardUsersService;
27
    private SystemConfig systemConfig;
28
    private DashboardUserInfoService dashboardUserInfoService;
29

30
    private static final Logger logger = Logger.getLogger(DashboardUsersPage.class.getCanonicalName());
×
31

32
    private String searchTerm;
33
    private LazyDataModel<DashboardUserInfo> users;
34
    private DashboardUserInfo selectedUserInfo;
35

36

37
    // -------------------- CONSTRUCTORS --------------------
38

39
    @Deprecated
40
    public DashboardUsersPage() {
×
41
    }
×
42

43
    @Inject
44
    public DashboardUsersPage(UserServiceBean userService, DataverseSession session,
45
                              PermissionsWrapper permissionsWrapper, DashboardUsersService dashboardUsersService,
46
                              SystemConfig systemConfig, DashboardUserInfoService dashboardUserInfoService) {
×
47
        this.userService = userService;
×
48
        this.session = session;
×
49
        this.permissionsWrapper = permissionsWrapper;
×
50
        this.dashboardUsersService = dashboardUsersService;
×
51
        this.systemConfig = systemConfig;
×
52
        this.dashboardUserInfoService = dashboardUserInfoService;
×
53
    }
×
54

55
    // -------------------- GETTERS --------------------
56

57
    public String getSearchTerm() {
58
        return searchTerm;
×
59
    }
60

61
    public LazyDataModel<DashboardUserInfo> getUsers() {
62
        return users;
×
63
    }
64

65
    public DashboardUserInfo getSelectedUserInfo() {
66
        return selectedUserInfo;
×
67
    }
68

69
    // -------------------- LOGIC --------------------
70

71
    public String init() {
72
        if (!session.getUser().isSuperuser() || systemConfig.isReadonlyMode()) {
×
73
            return permissionsWrapper.notAuthorized();
×
74
        }
75

76
        users = new LazyUsersInfoDataModel(userService, dashboardUserInfoService);
×
77

78
        return null;
×
79
    }
80

81
    public void saveSuperuserStatus() {
82
        if (selectedUserInfo != null) {
×
83
            Try.of(() -> dashboardUsersService.changeSuperuserStatus(Long.parseLong(selectedUserInfo.getId())))
×
84
                    .onSuccess(user -> selectedUserInfo.setSuperuser(user.isSuperuser()))
×
85
                    .onFailure(throwable -> logger.warning("Failed to permanently toggle the superuser status for user " + selectedUserInfo.getIdentifier() + ": " + throwable.getMessage()));
×
86
        } else {
87
            logger.warning("selectedUserPersistent is null.  AuthenticatedUser not found for id: ");
×
88
        }
89
    }
×
90

91
    public void cancelSuperuserStatusChange() {
92
        if (selectedUserInfo != null) {
×
93
            selectedUserInfo.setSuperuser(!selectedUserInfo.isSuperuser());
×
94
            selectedUserInfo = null;
×
95
        }
96
    }
×
97

98
    public void removeUserRoles() {
99
        logger.fine("Get persisent AuthenticatedUser for id: " + selectedUserInfo.getId());
×
100

101
        Try.of(() -> dashboardUsersService.revokeAllRolesForUser(Long.parseLong(selectedUserInfo.getId())))
×
102
                .onSuccess(user -> selectedUserInfo.setRoles(null))
×
103
                .onSuccess(user -> JsfHelper.addSuccessMessage(BundleUtil.getStringFromBundle("dashboard.list_users.removeAll.message.success",
×
104
                        selectedUserInfo.getIdentifier())))
×
105
                .onFailure(throwable -> JsfHelper.addErrorMessage(BundleUtil.getStringFromBundle("dashboard.list_users.removeAll.message.failure",
×
106
                        selectedUserInfo.getIdentifier())))
×
107
                .onFailure(throwable -> logger.log(Level.SEVERE, "Revoking all roles failed for user: " + selectedUserInfo.getIdentifier(), throwable));
×
108
    }
×
109

110
    public String getConfirmRemoveRolesMessage() {
111
        if (selectedUserInfo != null) {
×
112
            return BundleUtil.getStringFromBundle("dashboard.list_users.tbl_header.roles.removeAll.confirmationText", selectedUserInfo.getIdentifier());
×
113
        }
114
        return BundleUtil.getStringFromBundle("dashboard.list_users.tbl_header.roles.removeAll.confirmationText");
×
115
    }
116

117
    public String getDownloadUsersCsvUrl() {
NEW
118
        return "/api/users/csv";
×
119
    }
120

121
    /**
122
     * Number of total users
123
     *
124
     * @return
125
     */
126
    public String getUserCount() {
127
        return NumberFormat.getInstance().format(userService.getTotalUserCount());
×
128
    }
129

130
    /**
131
     * Number of total Superusers
132
     *
133
     * @return
134
     */
135
    public Long getSuperUserCount() {
136
        return userService.getSuperUserCount();
×
137
    }
138

139
    // -------------------- SETTERS --------------------
140

141
    public void setSearchTerm(String searchTerm) {
142
        this.searchTerm = searchTerm;
×
143
    }
×
144

145
    public void setUsers(LazyDataModel<DashboardUserInfo> users) {
146
        this.users = users;
×
147
    }
×
148

149
    public void setSelectedUserInfo(DashboardUserInfo selectedUserInfo) {
150
        this.selectedUserInfo = selectedUserInfo;
×
151
    }
×
152

153
}
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