diff --git a/libresonic-main/src/main/java/org/libresonic/player/controller/LoginController.java b/libresonic-main/src/main/java/org/libresonic/player/controller/LoginController.java new file mode 100644 index 00000000..41a9e3ea --- /dev/null +++ b/libresonic-main/src/main/java/org/libresonic/player/controller/LoginController.java @@ -0,0 +1,72 @@ +package org.libresonic.player.controller; + +import org.libresonic.player.Logger; +import org.libresonic.player.domain.User; +import org.libresonic.player.service.PlaylistService; +import org.libresonic.player.service.SecurityService; +import org.libresonic.player.service.SettingsService; +import org.libresonic.player.util.StringUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.servlet.view.RedirectView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.HashMap; +import java.util.Map; + +/** + * Spring MVC Controller that serves the login page. + */ +@Controller +@RequestMapping("/login") +public class LoginController { + + + private static final Logger LOG = Logger.getLogger(LoginController.class); + + private final SecurityService securityService; + private final SettingsService settingsService; + private final PlaylistService playlistService; + + @Autowired + public LoginController(SecurityService securityService, SettingsService settingsService, PlaylistService playlistService) { + this.securityService = securityService; + this.settingsService = settingsService; + this.playlistService = playlistService; + } + + @RequestMapping(method = { RequestMethod.GET, RequestMethod.POST }) + public ModelAndView login(HttpServletRequest request, HttpServletResponse response) throws Exception { + + // Auto-login if "user" and "password" parameters are given. + String username = request.getParameter("user"); + String password = request.getParameter("password"); + if (username != null && password != null) { + username = StringUtil.urlEncode(username); + password = StringUtil.urlEncode(password); + return new ModelAndView(new RedirectView("/j_spring_security_check?"+ + UsernamePasswordAuthenticationFilter.SPRING_SECURITY_FORM_USERNAME_KEY+"=" + username + + "&"+UsernamePasswordAuthenticationFilter.SPRING_SECURITY_FORM_PASSWORD_KEY+"=" + password + )); + } + + Map map = new HashMap(); + map.put("logout", request.getParameter("logout") != null); + map.put("error", request.getParameter("error") != null); + map.put("brand", settingsService.getBrand()); + map.put("loginMessage", settingsService.getLoginMessage()); + + User admin = securityService.getUserByName(User.USERNAME_ADMIN); + if (User.USERNAME_ADMIN.equals(admin.getPassword())) { + map.put("insecure", true); + } + + return new ModelAndView("login", "model", map); + } + +} diff --git a/libresonic-main/src/main/java/org/libresonic/player/controller/MultiController.java b/libresonic-main/src/main/java/org/libresonic/player/controller/MultiController.java index e37b736e..fcf98d9b 100644 --- a/libresonic-main/src/main/java/org/libresonic/player/controller/MultiController.java +++ b/libresonic-main/src/main/java/org/libresonic/player/controller/MultiController.java @@ -64,34 +64,6 @@ public class MultiController extends MultiActionController { private SettingsService settingsService; private PlaylistService playlistService; - public ModelAndView login(HttpServletRequest request, HttpServletResponse response) throws Exception { - - // Auto-login if "user" and "password" parameters are given. - String username = request.getParameter("user"); - String password = request.getParameter("password"); - if (username != null && password != null) { - username = StringUtil.urlEncode(username); - password = StringUtil.urlEncode(password); - return new ModelAndView(new RedirectView("/j_spring_security_check?"+ - UsernamePasswordAuthenticationFilter.SPRING_SECURITY_FORM_USERNAME_KEY+"=" + username + - "&"+UsernamePasswordAuthenticationFilter.SPRING_SECURITY_FORM_PASSWORD_KEY+"=" + password - )); - } - - Map map = new HashMap(); - map.put("logout", request.getParameter("logout") != null); - map.put("error", request.getParameter("error") != null); - map.put("brand", settingsService.getBrand()); - map.put("loginMessage", settingsService.getLoginMessage()); - - User admin = securityService.getUserByName(User.USERNAME_ADMIN); - if (User.USERNAME_ADMIN.equals(admin.getPassword())) { - map.put("insecure", true); - } - - return new ModelAndView("login", "model", map); - } - public ModelAndView recover(HttpServletRequest request, HttpServletResponse response) throws Exception { Map map = new HashMap(); diff --git a/libresonic-main/src/main/webapp/WEB-INF/libresonic-servlet.xml b/libresonic-main/src/main/webapp/WEB-INF/libresonic-servlet.xml index 52b0f556..5933acd7 100644 --- a/libresonic-main/src/main/webapp/WEB-INF/libresonic-servlet.xml +++ b/libresonic-main/src/main/webapp/WEB-INF/libresonic-servlet.xml @@ -2,7 +2,18 @@ + xmlns:context="http://www.springframework.org/schema/context" + xmlns:mvc="http://www.springframework.org/schema/mvc" + xsi:schemaLocation=" + http://www.springframework.org/schema/beans + http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/context + http://www.springframework.org/schema/context/spring-context.xsd + http://www.springframework.org/schema/mvc + http://www.springframework.org/schema/mvc/spring-mvc.xsd"> + + + @@ -434,7 +445,10 @@ topController randomPlayQueueController changeCoverArtController + multiController multiController multiController