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

com.sap.cloud.sdk.cloudplatform.connectivity.ScpNeoDestinationParser Maven / Gradle / Ivy

/*
 * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved.
 */

package com.sap.cloud.sdk.cloudplatform.connectivity;

import java.net.URI;
import java.net.URISyntaxException;
import java.util.Map;

import javax.annotation.Nullable;

import org.slf4j.Logger;

import com.sap.cloud.sdk.cloudplatform.connectivity.exception.DestinationAccessException;
import com.sap.cloud.sdk.cloudplatform.logging.CloudLoggerFactory;
import com.sap.core.connectivity.api.configuration.DestinationConfiguration;

import lombok.AccessLevel;
import lombok.Getter;
import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor( access = AccessLevel.PACKAGE )
class ScpNeoDestinationParser extends AbstractDestinationParser
{
    private static final Logger logger = CloudLoggerFactory.getSanitizedLogger(ScpNeoDestinationParser.class);

    private static final String PROPERTY_CLOUD_CONNECTOR_LOCATION_ID = "CloudConnectorLocationId";
    private static final int DEFAULT_HTTPS_PORT = 443;

    @Getter( AccessLevel.PACKAGE )
    private final DestinationConfiguration destinationConfiguration;

    @Nullable
    @Override
    URI getUri()
        throws DestinationAccessException
    {
        @Nullable
        final URI uri = super.getUri();

        // for on-premise destinations, convert "https" to "http" while keeping port 443, if necessary
        if( uri != null && getProxyType() == ProxyType.ON_PREMISE && "https".equals(uri.getScheme()) ) {
            if( logger.isWarnEnabled() ) {
                logger.warn(
                    "Rewriting on-premise destination \""
                        + getName()
                        + "\" with URI scheme \"https\" to use \"http\": "
                        + uri
                        + ". To resolve this warning, make sure to use \"http\" for on-premise destinations.");
            }

            // keep the default HTTPS port if no port was specified
            final int port = uri.getPort() < 0 ? DEFAULT_HTTPS_PORT : uri.getPort();

            try {
                return new URI(
                    "http",
                    uri.getUserInfo(),
                    uri.getHost(),
                    port,
                    uri.getPath(),
                    uri.getQuery(),
                    uri.getFragment());
            }
            catch( final URISyntaxException e ) {
                throw new DestinationAccessException("Invalid destination URI.", e);
            }
        }

        return uri;
    }

    @Nullable
    String getCloudConnectorLocationId()
    {
        return getPropertyIfExists(PROPERTY_CLOUD_CONNECTOR_LOCATION_ID);
    }

    @Override
    Map getProperties()
        throws DestinationAccessException
    {
        return destinationConfiguration.getAllProperties();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy