blob: d4519539d54ca05cef637dd28bff2530dc1e84d9 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
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);
}
}
}
}
|