View Javadoc

1   package com.atlassian.asap.core.server.jersey;
2   
3   import com.atlassian.asap.api.Jwt;
4   import com.atlassian.asap.api.server.http.RequestAuthenticator;
5   import com.atlassian.asap.core.server.AuthenticationContext;
6   import com.atlassian.asap.core.server.http.RequestAuthenticatorFactory;
7   import com.sun.jersey.api.core.InjectParam;
8   import com.sun.jersey.core.spi.component.ComponentContext;
9   import com.sun.jersey.core.spi.component.ComponentScope;
10  import com.sun.jersey.spi.inject.Injectable;
11  import com.sun.jersey.spi.inject.InjectableProvider;
12  
13  import javax.ws.rs.ext.Provider;
14  import java.lang.reflect.Type;
15  import java.util.Objects;
16  
17  @Provider
18  public class JwtAuthProvider implements InjectableProvider<JwtAuth, Type> {
19      private final AuthenticationContext authContext;
20      private final RequestAuthenticatorFactory requestAuthenticatorFactory;
21      private final JerseyRequestAuthorizerFactory jerseyRequestAuthorizerFactory;
22  
23      public JwtAuthProvider(@InjectParam AuthenticationContext authContext,
24                             @InjectParam RequestAuthenticatorFactory requestAuthenticatorFactory,
25                             @InjectParam JerseyRequestAuthorizerFactory jerseyRequestAuthorizerFactory) {
26          this.authContext = Objects.requireNonNull(authContext);
27          this.requestAuthenticatorFactory = Objects.requireNonNull(requestAuthenticatorFactory);
28          this.jerseyRequestAuthorizerFactory = Objects.requireNonNull(jerseyRequestAuthorizerFactory);
29      }
30  
31      public JwtAuthProvider(@InjectParam AuthenticationContext authContext) {
32          this(authContext, new RequestAuthenticatorFactory(), new JerseyRequestAuthorizerFactory());
33      }
34  
35      @Override
36      public Injectable getInjectable(ComponentContext componentContext, JwtAuth jwtAuth, Type type) {
37          if (type.equals(Jwt.class)) {
38              RequestAuthenticator requestAuthenticator = createRequestAuthenticator(authContext);
39              JerseyRequestAuthorizer jerseyRequestAuthorizer = createRequestAuthorizer(jwtAuth);
40              return new JwtInjectable(requestAuthenticator, jerseyRequestAuthorizer);
41          } else {
42              return null;
43          }
44      }
45  
46      private JerseyRequestAuthorizer createRequestAuthorizer(JwtAuth jwtAuth) {
47          return jerseyRequestAuthorizerFactory.create(jwtAuth);
48      }
49  
50      private RequestAuthenticator createRequestAuthenticator(AuthenticationContext authContext) {
51          return requestAuthenticatorFactory.create(authContext);
52      }
53  
54      @Override
55      public ComponentScope getScope() {
56          return ComponentScope.PerRequest;
57      }
58  }