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 }