1 package com.atlassian.plugin.refimpl.filter;
2
3 import com.atlassian.plugin.refimpl.ContainerManager;
4 import com.atlassian.plugin.refimpl.tenant.RefappTenancyCondition;
5 import com.atlassian.plugin.refimpl.tenant.RefappTenantRegistry;
6
7 import javax.servlet.Filter;
8 import javax.servlet.FilterChain;
9 import javax.servlet.FilterConfig;
10 import javax.servlet.ServletContext;
11 import javax.servlet.ServletException;
12 import javax.servlet.ServletRequest;
13 import javax.servlet.ServletResponse;
14 import javax.servlet.http.HttpServletRequest;
15 import javax.servlet.http.HttpServletResponse;
16 import java.io.IOException;
17
18
19
20
21
22 public class RefAppTenantFilter implements Filter {
23 private ServletContext context;
24 private RefappTenantRegistry tenantRegistry;
25
26 @Override
27 public void init(FilterConfig filterConfig) throws ServletException {
28 this.context = filterConfig.getServletContext();
29 this.tenantRegistry = (RefappTenantRegistry) context.getAttribute(ContainerManager.TENANTACCESSOR);
30 }
31
32
33
34
35
36 @Override
37 public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
38 throws IOException, ServletException {
39 if (RefappTenancyCondition.isEnabled()) {
40 HttpServletRequest req = (HttpServletRequest) servletRequest;
41 String path = req.getRequestURI();
42 if (isBaseRest(path) || tenantRegistry.hasTenant()) {
43 filterChain.doFilter(servletRequest, servletResponse);
44 } else {
45 ((HttpServletResponse) servletResponse).sendError(202, "Server unavailable. Waiting for tenant.");
46 }
47 } else {
48 filterChain.doFilter(servletRequest, servletResponse);
49 }
50 }
51
52 @Override
53 public void destroy() {
54 }
55
56 public boolean isBaseRest(String path) {
57 String contextpath = context.getContextPath();
58 return path.startsWith("/refapp/rest/landlord") ||
59 path.startsWith("/refapp/plugins/servlet/landlord");
60 }
61
62 }