/** * The contents of this file are subject to the license and copyright * detailed in the LICENSE file at the root of the source * tree and available online at * * https://github.com/keeps/roda */ package org.roda.wui.server.management; import javax.servlet.http.HttpServletRequest; import org.roda.core.RodaCoreFactory; import org.roda.core.common.UserUtility; import org.roda.core.data.exceptions.AlreadyExistsException; import org.roda.core.data.exceptions.AuthorizationDeniedException; import org.roda.core.data.exceptions.EmailAlreadyExistsException; import org.roda.core.data.exceptions.GenericException; import org.roda.core.data.exceptions.IllegalOperationException; import org.roda.core.data.exceptions.InvalidTokenException; import org.roda.core.data.exceptions.NotFoundException; import org.roda.core.data.exceptions.RODAException; import org.roda.core.data.exceptions.UserAlreadyExistsException; import org.roda.core.data.v2.notifications.Notification; import org.roda.core.data.v2.user.Group; import org.roda.core.data.v2.user.User; import org.roda.wui.api.controllers.UserManagement; import org.roda.wui.client.browse.bundle.UserExtraBundle; import org.roda.wui.client.management.UserManagementService; import org.roda.wui.client.management.recaptcha.RecaptchaException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.gwt.user.server.rpc.RemoteServiceServlet; /** * User Management service implementation * * @author Luis Faria */ public class UserManagementServiceImpl extends RemoteServiceServlet implements UserManagementService { /** * */ private static final long serialVersionUID = 1L; @SuppressWarnings("unused") private final transient Logger logger = LoggerFactory.getLogger(this.getClass().getName()); private static final String RECAPTCHA_CODE_SECRET_PROPERTY = "ui.google.recaptcha.code.secret"; /** * User Management Service implementation constructor * */ public UserManagementServiceImpl() { // do nothing } @Override public Group getGroup(String groupname) throws AuthorizationDeniedException, GenericException, NotFoundException { User user = UserUtility.getUser(getThreadLocalRequest()); return UserManagement.retrieveGroup(user, groupname); } @Override public User retrieveUser(String username) throws RODAException { User user = UserUtility.getUser(getThreadLocalRequest()); return UserManagement.retrieveUser(user, username); } @Override public User registerUser(User user, String password, String captcha, UserExtraBundle extra, String localeString) throws GenericException, UserAlreadyExistsException, EmailAlreadyExistsException, RecaptchaException { if (captcha != null) { RecaptchaUtils .recaptchaVerify(RodaCoreFactory.getRodaConfiguration().getString(RECAPTCHA_CODE_SECRET_PROPERTY, ""), captcha); } String servletPath = retrieveServletUrl(getThreadLocalRequest()); return UserManagement.registerUser(user, password, extra, localeString, servletPath); } @Override public User createUser(User newUser, String password, UserExtraBundle extra) throws AuthorizationDeniedException, NotFoundException, GenericException, EmailAlreadyExistsException, UserAlreadyExistsException, IllegalOperationException { User user = UserUtility.getUser(getThreadLocalRequest()); return UserManagement.createUser(user, newUser, password, extra); } @Override public void updateMyUser(User modifiedUser, String password, UserExtraBundle extra) throws AuthorizationDeniedException, NotFoundException, AlreadyExistsException, GenericException, IllegalOperationException { User user = UserUtility.getUser(getThreadLocalRequest()); UserManagement.updateMyUser(user, modifiedUser, password, extra); } @Override public void updateUser(User modifiedUser, String password, UserExtraBundle extra) throws AuthorizationDeniedException, NotFoundException, AlreadyExistsException, GenericException { User user = UserUtility.getUser(getThreadLocalRequest()); UserManagement.updateUser(user, modifiedUser, password, extra); } @Override public void deleteUser(String username) throws AuthorizationDeniedException, GenericException { User user = UserUtility.getUser(getThreadLocalRequest()); UserManagement.deleteUser(user, username); } @Override public void createGroup(Group group) throws AuthorizationDeniedException, GenericException, AlreadyExistsException { User user = UserUtility.getUser(getThreadLocalRequest()); UserManagement.createGroup(user, group); } @Override public void updateGroup(Group group) throws AuthorizationDeniedException, GenericException, NotFoundException { User user = UserUtility.getUser(getThreadLocalRequest()); UserManagement.updateGroup(user, group); } @Override public void deleteGroup(String groupname) throws AuthorizationDeniedException, GenericException { User user = UserUtility.getUser(getThreadLocalRequest()); UserManagement.deleteGroup(user, groupname); } @Override public Notification sendEmailVerification(final String username, final boolean generateNewToken, String localeString) throws GenericException, NotFoundException { final String servletPath = retrieveServletUrl(getThreadLocalRequest()); return UserManagement.sendEmailVerification(servletPath, username, generateNewToken, localeString); } @Override public void confirmUserEmail(String username, String emailConfirmationToken) throws InvalidTokenException, NotFoundException, GenericException { UserManagement.confirmUserEmail(username, emailConfirmationToken); } @Override public void requestPasswordReset(String usernameOrEmail, String captcha, String localeString) throws GenericException, NotFoundException, IllegalOperationException, RecaptchaException { if (captcha != null) { RecaptchaUtils .recaptchaVerify(RodaCoreFactory.getRodaConfiguration().getString(RECAPTCHA_CODE_SECRET_PROPERTY, ""), captcha); } String servletPath = retrieveServletUrl(getThreadLocalRequest()); UserManagement.requestPasswordReset(servletPath, usernameOrEmail, localeString); } @Override public void resetUserPassword(String username, String password, String resetPasswordToken) throws InvalidTokenException, IllegalOperationException, NotFoundException, GenericException { UserManagement.resetUserPassword(username, password, resetPasswordToken); } private static String retrieveServletUrl(HttpServletRequest req) { String scheme = req.getScheme(); String serverName = req.getServerName(); int serverPort = req.getServerPort(); String contextPath = req.getContextPath(); String url = scheme + "://" + serverName + ":" + serverPort + contextPath; if (("http".equalsIgnoreCase(scheme) && serverPort == 80) || ("https".equalsIgnoreCase(scheme) && serverPort == 443)) { url = scheme + "://" + serverName + contextPath; } return url; } @Override public UserExtraBundle retrieveUserExtraBundle(String name) throws AuthorizationDeniedException, GenericException, NotFoundException { User user = UserUtility.getUser(getThreadLocalRequest()); return UserManagement.retrieveUserExtraBundle(user, name); } @Override public UserExtraBundle retrieveDefaultExtraBundle() throws AuthorizationDeniedException { User user = UserUtility.getUser(getThreadLocalRequest()); return UserManagement.retrieveUserExtraBundle(user); } }