package com.hubspot.singularity.auth.authenticator; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.inject.Inject; import com.google.inject.Singleton; import com.hubspot.singularity.Singularity; import com.hubspot.singularity.WebExceptions; import com.ning.http.client.Response; import java.io.IOException; @Singleton public class WrappedUserResponseParser extends WebhookResponseParser { private final ObjectMapper objectMapper; @Inject public WrappedUserResponseParser(@Singularity ObjectMapper objectMapper) { this.objectMapper = objectMapper; } SingularityUserPermissionsResponse parse(Response response) throws IOException { if (response.getStatusCode() > 299) { throw WebExceptions.unauthorized( String.format("Got status code %d when verifying jwt", response.getStatusCode()) ); } else { String responseBody = response.getResponseBody(); SingularityUserPermissionsResponse permissionsResponse = objectMapper.readValue( responseBody, SingularityUserPermissionsResponse.class ); if (!permissionsResponse.getUser().isPresent()) { throw WebExceptions.unauthorized( String.format("No user present in response %s", permissionsResponse) ); } if (!permissionsResponse.getUser().get().isAuthenticated()) { throw WebExceptions.unauthorized( String.format("User not authenticated (response: %s)", permissionsResponse) ); } return permissionsResponse; } } }