package edu.harvard.iq.dataverse; import edu.harvard.iq.dataverse.authorization.AuthenticationServiceBean; import edu.harvard.iq.dataverse.authorization.users.ApiToken; import edu.harvard.iq.dataverse.authorization.users.AuthenticatedUser; import edu.harvard.iq.dataverse.util.BundleUtil; import java.sql.Timestamp; import java.util.ArrayList; import java.util.Calendar; import java.util.List; import java.util.logging.Logger; import javax.ejb.EJB; import javax.faces.view.ViewScoped; import javax.inject.Inject; import javax.inject.Named; /** * @todo Rename this to ApiTokenFragment? The separate page is being taken out * per https://github.com/IQSS/dataverse/issues/3086 */ @ViewScoped @Named("ApiTokenPage") public class ApiTokenPage implements java.io.Serializable { private static final Logger logger = Logger.getLogger(ApiTokenPage.class.getCanonicalName()); @Inject DataverseSession session; @EJB AuthenticationServiceBean authSvc; ApiToken apiToken; public boolean checkForApiToken() { if (session.getUser().isAuthenticated()){ AuthenticatedUser au = (AuthenticatedUser) session.getUser(); apiToken = authSvc.findApiTokenByUser(au); if (apiToken != null) { return true; } } return false; } public String getApiToken() { if (session.getUser().isAuthenticated()) { AuthenticatedUser au = (AuthenticatedUser) session.getUser(); apiToken = authSvc.findApiTokenByUser(au); if (apiToken != null) { return apiToken.getTokenString(); } else { List<String> arguments = new ArrayList<>(); arguments.add(au.getName()); return BundleUtil.getStringFromBundle("apitoken.notFound", arguments); } } else { // It should be impossible to get here from the UI. return "Only authenticated users can have API tokens."; } } public void generate() { if (session.getUser().isAuthenticated()) { AuthenticatedUser au = (AuthenticatedUser) session.getUser(); apiToken = authSvc.findApiTokenByUser(au); if (apiToken != null) { authSvc.removeApiToken(au); } /** * @todo DRY! Stolen from BuiltinUsers API page */ ApiToken newToken = new ApiToken(); newToken.setTokenString(java.util.UUID.randomUUID().toString()); newToken.setAuthenticatedUser(au); Calendar c = Calendar.getInstance(); newToken.setCreateTime(new Timestamp(c.getTimeInMillis())); c.roll(Calendar.YEAR, 1); newToken.setExpireTime(new Timestamp(c.getTimeInMillis())); authSvc.save(newToken); } } }