package com.juick.www.controllers; import com.juick.server.util.WebUtils; import com.juick.service.MessagesService; import com.juick.service.UserService; import org.apache.commons.lang3.math.NumberUtils; import org.springframework.stereotype.Component; import org.springframework.web.filter.OncePerRequestFilter; import org.springframework.web.servlet.support.ServletUriComponentsBuilder; import org.springframework.web.util.UriComponents; import javax.annotation.Nonnull; import javax.inject.Inject; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @Component public class AnythingFilter extends OncePerRequestFilter { @Inject private MessagesService messagesService; @Inject private UserService userService; @Override public void doFilterInternal(@Nonnull HttpServletRequest servletRequest, @Nonnull HttpServletResponse servletResponse, @Nonnull FilterChain filterChain) throws IOException, ServletException { UriComponents components = ServletUriComponentsBuilder.fromCurrentRequestUri().build(); String anything = components.getPath().substring(1); int before = NumberUtils.toInt(components.getQueryParams().getFirst("before"), 0); if (before == 0) { boolean isPostNumber = WebUtils.isPostNumber(anything); int messageId = isPostNumber ? NumberUtils.toInt(anything) : 0; if (isPostNumber && anything.equals(Integer.toString(messageId))) { if (messageId > 0) { com.juick.User author = messagesService.getMessageAuthor(messageId); if (author != null) { servletResponse.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY); servletResponse.setHeader("Location", "/" + author.getName() + "/" + anything); return; } } } com.juick.User user = userService.getUserByName(anything); if (user.getUid() > 0) { ((HttpServletResponse)servletResponse).sendRedirect("/" + user.getName() + "/"); } else { filterChain.doFilter(servletRequest, servletResponse); } } else { com.juick.User user = userService.getUserByName(anything); if (!user.isAnonymous()) { ((HttpServletResponse) servletResponse).sendRedirect("/" + user.getName() + "/?before=" + before); } else { filterChain.doFilter(servletRequest, servletResponse); } } } }