1 package com.atlassian.asap.it;
2
3 import com.atlassian.asap.api.server.http.RequestAuthenticator;
4 import com.atlassian.asap.core.server.filter.AbstractRequestAuthenticationFilter;
5 import com.atlassian.asap.core.server.filter.WhitelistRequestAuthorizationFilter;
6 import com.atlassian.asap.core.server.http.RequestAuthenticatorImpl;
7 import com.atlassian.asap.core.validator.JwtClaimsValidator;
8 import com.atlassian.asap.core.validator.JwtValidator;
9 import com.atlassian.asap.core.validator.JwtValidatorImpl;
10 import com.atlassian.asap.nimbus.parser.NimbusJwtParser;
11 import com.google.common.collect.ImmutableSet;
12 import org.eclipse.jetty.server.Server;
13 import org.eclipse.jetty.servlet.FilterHolder;
14 import org.eclipse.jetty.servlet.ServletContextHandler;
15 import org.junit.AfterClass;
16 import org.junit.BeforeClass;
17
18 import javax.servlet.DispatcherType;
19 import javax.servlet.Filter;
20 import javax.servlet.FilterChain;
21 import javax.servlet.FilterConfig;
22 import javax.servlet.ServletException;
23 import javax.servlet.ServletRequest;
24 import javax.servlet.ServletResponse;
25 import javax.servlet.http.HttpServletResponse;
26 import java.io.IOException;
27 import java.net.URI;
28 import java.time.Clock;
29 import java.util.EnumSet;
30 import java.util.Set;
31
32 public class ServletFilterIntegrationTest extends BaseIntegrationTest {
33 private static final Set<String> AUTHORIZED_SUBJECTS = ImmutableSet.of(ISSUER1);
34 private static final Set<String> AUTHORIZED_ISSUERS = ImmutableSet.of(ISSUER1);
35
36 private static Server server;
37
38 @Override
39 protected URI getUrlForResourceName(String resourceName) {
40 return URI.create("http://localhost:9000/" + resourceName);
41 }
42
43 @BeforeClass
44 public static void startHttpServer() throws Exception {
45 JwtValidator jwtValidator = new JwtValidatorImpl(PUBLIC_KEY_PROVIDER,
46 new NimbusJwtParser(),
47 new JwtClaimsValidator(Clock.systemUTC()),
48 AUDIENCE);
49 final RequestAuthenticator requestAuthenticator = new RequestAuthenticatorImpl(jwtValidator);
50
51 Filter authenticationFilter = new AbstractRequestAuthenticationFilter() {
52 @Override
53 protected RequestAuthenticator getRequestAuthenticator(FilterConfig filterConfig) {
54 return requestAuthenticator;
55 }
56 };
57 Filter authorizationFilter = new WhitelistRequestAuthorizationFilter(AUTHORIZED_SUBJECTS, AUTHORIZED_ISSUERS);
58
59 ServletContextHandler servletContext = new ServletContextHandler(ServletContextHandler.SESSIONS);
60 servletContext.addFilter(new FilterHolder(authenticationFilter), "/*",
61 EnumSet.allOf(DispatcherType.class));
62 servletContext.addFilter(new FilterHolder(authorizationFilter), "/*", EnumSet.allOf(DispatcherType.class));
63
64 servletContext.addFilter(ResourceFilter.class, "/" + RESOURCE, EnumSet.allOf(DispatcherType.class));
65
66 server = new Server(9000);
67 server.setHandler(servletContext);
68 server.start();
69 }
70
71 @AfterClass
72 public static void stopHttpServer() throws Exception {
73 server.stop();
74 }
75
76 public static class ResourceFilter implements Filter {
77 @Override
78 public void init(FilterConfig filterConfig) throws ServletException {
79
80 }
81
82 @Override
83 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
84 throws IOException, ServletException {
85 ((HttpServletResponse) response).setStatus(200);
86 }
87
88 @Override
89 public void destroy() {
90
91 }
92 }
93 }