View Javadoc

1   package com.atlassian.asap.feign;
2   
3   import com.atlassian.asap.api.Jwt;
4   import com.atlassian.asap.api.JwtBuilder;
5   import com.atlassian.asap.api.client.http.AuthorizationHeaderGenerator;
6   import com.atlassian.asap.api.exception.CannotRetrieveKeyException;
7   import com.atlassian.asap.api.exception.InvalidTokenException;
8   import feign.RequestInterceptor;
9   import feign.RequestTemplate;
10  
11  import java.util.Objects;
12  
13  /**
14   * Decorates a Feign request with ASAP credentials.
15   */
16  public class AsapInterceptor implements RequestInterceptor {
17      private final AuthorizationHeaderGenerator authorizationHeaderGenerator;
18      private final Jwt jwtPrototype;
19  
20      public AsapInterceptor(AuthorizationHeaderGenerator authorizationHeaderGenerator, Jwt jwtPrototype) {
21          this.authorizationHeaderGenerator = Objects.requireNonNull(authorizationHeaderGenerator);
22          this.jwtPrototype = Objects.requireNonNull(jwtPrototype);
23      }
24  
25      @Override
26      public void apply(RequestTemplate requestTemplate) {
27          Jwt jwt = JwtBuilder.newFromPrototype(jwtPrototype).build();
28          try {
29              requestTemplate.header("Authorization", authorizationHeaderGenerator.generateAuthorizationHeader(jwt));
30          } catch (InvalidTokenException e) {
31              throw new RuntimeException("Invalid prototype token", e);
32          } catch (CannotRetrieveKeyException e) {
33              e.printStackTrace();
34          }
35      }
36  }