Search in sources :

Example 1 with OpenapiDescriptionFiletype

use of ee.ria.xroad.common.util.OpenapiDescriptionFiletype in project X-Road by nordic-institute.

the class RestMetadataServiceHandlerImpl method handleGetOpenApi.

private void handleGetOpenApi(ProxyMessage requestProxyMessage) throws IOException, HttpClientCreator.HttpClientCreatorException, URISyntaxException {
    List<NameValuePair> pairs = URLEncodedUtils.parse(requestProxyMessage.getRest().getQuery(), Charset.forName("UTF-8"));
    String targetServiceCode = null;
    for (NameValuePair pair : pairs) {
        log.trace("{} : {}", pair.getName(), pair.getValue());
        if (pair.getName().equalsIgnoreCase(QUERY_PARAM_SERVICECODE)) {
            targetServiceCode = pair.getValue();
        }
    }
    if (targetServiceCode == null || targetServiceCode.isEmpty()) {
        throw new CodedException(X_INVALID_REQUEST, "Missing serviceCode in message body");
    }
    ServiceId targetServiceId = ServiceId.create(requestProxyMessage.getRest().getServiceId().getClientId(), targetServiceCode);
    log.trace("targetServiceId={}", targetServiceId);
    DescriptionType descriptionType = ServerConf.getDescriptionType(targetServiceId);
    if (descriptionType == null) {
        throw new CodedException(X_INTERNAL_ERROR, String.format("Service not found: %s", targetServiceId.toString()));
    }
    if (descriptionType != DescriptionType.OPENAPI3) {
        throw new CodedException(X_INTERNAL_ERROR, String.format("Invalid service type: %s", descriptionType.toString()));
    }
    String serviceDescriptionURL = ServerConf.getServiceDescriptionURL(targetServiceId);
    HttpClient client = httpClientCreator.getHttpClient();
    HttpContext httpContext = new BasicHttpContext();
    // ServerMessageProcessor uses the same method to pass the ServiceId to CustomSSLSocketFactory
    httpContext.setAttribute(ServiceId.class.getName(), targetServiceId);
    URI uri = new URI(serviceDescriptionURL);
    HttpResponse response = client.execute(new HttpGet(uri), httpContext);
    StatusLine statusLine = response.getStatusLine();
    if (HttpStatus.SC_OK != statusLine.getStatusCode()) {
        throw new CodedException(X_INTERNAL_ERROR, String.format("Failed reading service description from %s. Status: %s Reason: %s", serviceDescriptionURL, statusLine.getStatusCode(), statusLine.getReasonPhrase()));
    }
    InputStream responseContent = response.getEntity().getContent();
    try {
        OpenapiDescriptionFiletype filetype = getFileType(response, uri);
        Openapi3Anonymiser anonymiser = new Openapi3Anonymiser();
        if (OpenapiDescriptionFiletype.JSON.equals(filetype)) {
            anonymiser.anonymiseJson(responseContent, restResponseBody);
        } else {
            anonymiser.anonymiseYaml(responseContent, restResponseBody);
        }
    } catch (IOException e) {
        throw new CodedException(X_INTERNAL_ERROR, String.format("Failed overwriting origin URL for the openapi servers for %s", serviceDescriptionURL));
    }
    if (response.containsHeader(MimeUtils.HEADER_CONTENT_TYPE)) {
        restResponse.getHeaders().add(new BasicHeader(MimeUtils.HEADER_CONTENT_TYPE, response.getFirstHeader(MimeUtils.HEADER_CONTENT_TYPE).getValue()));
    } else {
        restResponse.getHeaders().add(new BasicHeader(MimeUtils.HEADER_CONTENT_TYPE, DEFAULT_GETOPENAPI_CONTENT_TYPE));
    }
}
Also used : NameValuePair(org.apache.http.NameValuePair) DescriptionType(ee.ria.xroad.common.conf.serverconf.model.DescriptionType) BasicHttpContext(org.apache.http.protocol.BasicHttpContext) InputStream(java.io.InputStream) HttpGet(org.apache.http.client.methods.HttpGet) BasicHttpContext(org.apache.http.protocol.BasicHttpContext) HttpContext(org.apache.http.protocol.HttpContext) HttpResponse(org.apache.http.HttpResponse) IOException(java.io.IOException) URI(java.net.URI) ServiceId(ee.ria.xroad.common.identifier.ServiceId) StatusLine(org.apache.http.StatusLine) CodedException(ee.ria.xroad.common.CodedException) HttpClient(org.apache.http.client.HttpClient) OpenapiDescriptionFiletype(ee.ria.xroad.common.util.OpenapiDescriptionFiletype) BasicHeader(org.apache.http.message.BasicHeader)

Aggregations

CodedException (ee.ria.xroad.common.CodedException)1 DescriptionType (ee.ria.xroad.common.conf.serverconf.model.DescriptionType)1 ServiceId (ee.ria.xroad.common.identifier.ServiceId)1 OpenapiDescriptionFiletype (ee.ria.xroad.common.util.OpenapiDescriptionFiletype)1 IOException (java.io.IOException)1 InputStream (java.io.InputStream)1 URI (java.net.URI)1 HttpResponse (org.apache.http.HttpResponse)1 NameValuePair (org.apache.http.NameValuePair)1 StatusLine (org.apache.http.StatusLine)1 HttpClient (org.apache.http.client.HttpClient)1 HttpGet (org.apache.http.client.methods.HttpGet)1 BasicHeader (org.apache.http.message.BasicHeader)1 BasicHttpContext (org.apache.http.protocol.BasicHttpContext)1 HttpContext (org.apache.http.protocol.HttpContext)1