diff options
author | Vitaly Takmazov | 2018-03-27 22:08:58 +0300 |
---|---|---|
committer | Vitaly Takmazov | 2018-03-27 22:08:58 +0300 |
commit | cc551432bf80e4466b92c42a77a094f31408abeb (patch) | |
tree | 6e0cc704411b478ad9353228d43145395e926294 /juick-www/src/main/java/com/juick/www/controllers/AnythingFilter.java | |
parent | ed4067c05b68fdb70f8a1edbf520627cd96845d9 (diff) |
move url guessing logic from mapping to Filter
Diffstat (limited to 'juick-www/src/main/java/com/juick/www/controllers/AnythingFilter.java')
-rw-r--r-- | juick-www/src/main/java/com/juick/www/controllers/AnythingFilter.java | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/juick-www/src/main/java/com/juick/www/controllers/AnythingFilter.java b/juick-www/src/main/java/com/juick/www/controllers/AnythingFilter.java new file mode 100644 index 00000000..e5d2ec3f --- /dev/null +++ b/juick-www/src/main/java/com/juick/www/controllers/AnythingFilter.java @@ -0,0 +1,67 @@ +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.servlet.support.ServletUriComponentsBuilder; +import org.springframework.web.util.UriComponents; + +import javax.inject.Inject; +import javax.servlet.*; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +@Component +public class AnythingFilter implements Filter { + @Inject + private MessagesService messagesService; + @Inject + private UserService userService; + @Override + public void init(FilterConfig filterConfig) throws ServletException { + + } + + @Override + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, 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) { + ((HttpServletResponse)servletResponse).sendRedirect("/" + 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.getUid() > 0) { + ((HttpServletResponse) servletResponse).sendRedirect("/" + user.getName() + "/?before=" + before); + } else { + filterChain.doFilter(servletRequest, servletResponse); + } + } + } + + @Override + public void destroy() { + + } +} |