1 package com.atlassian.plugins.rest.module.scope;
2
3 import com.atlassian.plugin.scope.ScopeManager;
4 import com.atlassian.plugins.rest.module.RestModuleDescriptor;
5 import com.sun.jersey.spi.container.ContainerRequest;
6 import com.sun.jersey.spi.container.ContainerRequestFilter;
7 import com.sun.jersey.spi.container.ContainerResponseFilter;
8 import com.sun.jersey.spi.container.ResourceFilter;
9 import org.slf4j.Logger;
10 import org.slf4j.LoggerFactory;
11
12 import javax.ws.rs.core.Response;
13
14 import static javax.ws.rs.core.Response.Status.PRECONDITION_FAILED;
15
16
17
18
19
20
21
22
23
24 public class ScopeResourceFilter implements ResourceFilter, ContainerRequestFilter {
25 private static final Logger log = LoggerFactory.getLogger(ScopeResourceFilter.class);
26
27 private final RestModuleDescriptor descriptor;
28 private final ScopeManager scopeManager;
29
30 private final Response.Status failureStatus = PRECONDITION_FAILED;
31
32 public ScopeResourceFilter(ScopeManager scopeManager, RestModuleDescriptor descriptor) {
33 this.descriptor = descriptor;
34 this.scopeManager = scopeManager;
35 }
36
37
38
39
40 public ContainerRequest filter(final ContainerRequest request) {
41 log.debug("Applying scope filter for {} ", descriptor);
42
43 final Boolean permit = descriptor.getScopeKey().map(scopeManager::isScopeActive).orElse(true);
44
45 if (!permit) {
46 log.debug("Scope is not active for matching descriptor {}", descriptor);
47
48 throw new ScopeCheckFailedException(failureStatus);
49 }
50
51 return request;
52 }
53
54 public ContainerRequestFilter getRequestFilter() {
55 return this;
56 }
57
58 public ContainerResponseFilter getResponseFilter() {
59 return null;
60 }
61 }