All Downloads are FREE. Search and download functionalities are using the official Maven repository.

uk.co.mruoc.nac.user.cognito.CognitoAuthCodeClient Maven / Gradle / Ivy

The newest version!
package uk.co.mruoc.nac.user.cognito;

import java.net.URI;
import java.util.Objects;
import lombok.Builder;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import uk.co.mruoc.nac.entities.AuthCodeRequest;
import uk.co.mruoc.nac.entities.TokenResponse;
import uk.co.mruoc.nac.usecases.AuthCodeClient;
import uk.co.mruoc.nac.user.JwtParser;

@RequiredArgsConstructor
@Builder
public class CognitoAuthCodeClient implements AuthCodeClient {

  private final URI uri;
  private final String clientId;
  private final RestTemplate template;
  private final JwtParser jwtParser;

  @Override
  public TokenResponse create(AuthCodeRequest request) {
    HttpEntity> entity = toRequestEntity(request);
    ResponseEntity response =
        template.exchange(uri, HttpMethod.POST, entity, CognitoAuthCodeResponse.class);
    return toTokenResponse(Objects.requireNonNull(response.getBody()));
  }

  private TokenResponse toTokenResponse(CognitoAuthCodeResponse response) {
    CognitoAuthCodeResponse responseBody = Objects.requireNonNull(response);
    String accessToken = response.getAccessToken();
    return TokenResponse.builder()
        .accessToken(accessToken)
        .refreshToken(responseBody.getRefreshToken())
        .username(jwtParser.toUsername(accessToken))
        .build();
  }

  private HttpEntity> toRequestEntity(AuthCodeRequest request) {
    return new HttpEntity<>(toRequestBody(request), buildRequestHeaders());
  }

  private MultiValueMap toRequestBody(AuthCodeRequest request) {
    MultiValueMap body = new LinkedMultiValueMap<>();
    body.add("grant_type", "authorization_code");
    body.add("client_id", clientId);
    body.add("code", request.getAuthCode());
    body.add("redirect_uri", request.getRedirectUri());
    return body;
  }

  private static HttpHeaders buildRequestHeaders() {
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
    return headers;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy