/* (c) 2014 Open Source Geospatial Foundation - all rights reserved * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.geofence.login; import org.geoserver.geofence.login.LoginService; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import org.geoserver.geofence.api.AuthProvider; import org.geoserver.geofence.api.dto.Authority; import org.geoserver.geofence.api.dto.GrantedAuths; import org.geoserver.geofence.api.exception.AuthException; import org.geoserver.geofence.login.util.GrantAll; import org.geoserver.geofence.login.util.SessionManager; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; /** * @author ETj (etj at geo-solutions.it) */ public class LoginServiceImpl implements LoginService, InitializingBean, DisposableBean { private static final Logger LOGGER = LogManager.getLogger(LoginServiceImpl.class); // private List<String> authorizedRoles; private AuthProvider authProvider = new GrantAll(); // this provider should be overridden by // injecting a true implementation. private SessionManager sessionManager; public LoginServiceImpl() { LOGGER.info("Creating " + getClass().getSimpleName() + " instance"); } @Override public void afterPropertiesSet() { LOGGER.debug("afterPropertiesSet()"); } @Override public void destroy() throws Exception { LOGGER.debug("destroy()"); } @PostConstruct public void postConstruct() { LOGGER.debug("postConstruct()"); } @PreDestroy public void preDestroy() { LOGGER.debug("preDestroy()"); } // ========================================================================== // Service methods // ========================================================================== @Override public String login(String username, String password, String pwFromDb) throws AuthException { LOGGER.info("LOGIN REQUEST FOR " + username); // MessageContext msgCtxt = webServiceContext.getMessageContext(); // HttpServletRequest req = (HttpServletRequest)msgCtxt.get(MessageContext.SERVLET_REQUEST); // String clientIP = req.getRemoteAddr(); // // LOGGER.info("LOGIN REQUEST FOR " + username + " @ " + clientIP); if (username == null) { throw new AuthException("Null username"); } else { try { GrantedAuths ga = authProvider.login(username, password, pwFromDb); if (!ga.getAuthorities().contains(Authority.LOGIN)) { LOGGER.warn("Login not granted to user [" + username + "]"); throw new AuthException("User " + username + " can't log in"); } String token = sessionManager.createSession(username, ga); return token; } catch (AuthException ex) { LOGGER.warn("Authentication Failed for user [" + username + "]: " + ex.getLocalizedMessage()); throw new AuthException("Authentication error", ex); } } } @Override public void logout(String token) { LOGGER.info("LOGOUT:" + token); sessionManager.closeSession(token); } @Override public GrantedAuths getGrantedAuthorities(String token) { LOGGER.info("getGrantedAuthorities:" + token); return sessionManager.getGrantedAuthorities(token); } // ========================================================================== // Setters // ========================================================================== public void setAuthProvider(AuthProvider authProvider) { LOGGER.info("Setting AuthProvider: " + authProvider.getClass()); this.authProvider = authProvider; } public void setSessionManager(SessionManager sessionManager) { this.sessionManager = sessionManager; } }