package com.sap.pto.adapters; import java.security.Principal; import java.util.Locale; import javax.servlet.ServletRequest; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.sap.pto.dao.entities.User; import com.sap.security.um.service.UserManagementAccessor; import com.sap.security.um.user.PersistenceException; import com.sap.security.um.user.UnsupportedUserAttributeException; import com.sap.security.um.user.UserProvider; /** * This class contains methods for retrieving attributes of the already * authenticated user, managed by the ID Service. * The SAP NetWeaver Cloud ID Service provides user management * for applications that are hosted on the SAP NetWeaver Cloud Platform. */ public class UserManagementAdapter { private static final Logger logger = LoggerFactory.getLogger(UserManagementAdapter.class); /** * Update user fields with properties that are gotten from the User * principal, provided by SAP NetWeaver cloud ID Service. * */ public static User getAuthenticatedUser(ServletRequest request) { if (request == null) { throw new IllegalArgumentException("Request must not be null."); } User user = null; try { user = new User(); com.sap.security.um.user.User idmUser = getIdmUser(request); if (idmUser != null) { String userName = idmUser.getName(); user.setUserName(userName); String firstName = idmUser.getAttribute("firstname"); String lastName = idmUser.getAttribute("lastname"); user.setFullName(firstName + " " + lastName); String email = idmUser.getAttribute("email"); user.setEmail(email); } } catch (PersistenceException e) { logger.error("Could not get the user provider.", e); } catch (UnsupportedUserAttributeException e) { logger.error("Could not get user's attribute.", e); } return user; } private static com.sap.security.um.user.User getIdmUser(ServletRequest request) throws PersistenceException { UserProvider provider = UserManagementAccessor.getUserProvider(); com.sap.security.um.user.User idmUser = null; Principal principal = ((HttpServletRequest) request).getUserPrincipal(); if (principal != null) { // Read the currently logged in user from the user storage idmUser = provider.getUser(principal.getName()); } return idmUser; } public static String getAuthenticatedName(ServletRequest request) { if (request == null) { throw new IllegalArgumentException("Request must not be null."); } String userName = null; if (request instanceof HttpServletRequest) { Principal userPrincipal = ((HttpServletRequest) request).getUserPrincipal(); if (userPrincipal != null) { userName = StringUtils.lowerCase(userPrincipal.getName(), Locale.ENGLISH); } } return userName; } }