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

software.amazon.awssdk.services.eventbridge.endpoints.internal.DefaultEventBridgeEndpointProvider Maven / Gradle / Ivy

Go to download

The AWS Java SDK for EventBridge module holds the client classes that are used for communicating with EventBridge.

There is a newer version: 2.29.39
Show newest version
/*
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance with
 * the License. A copy of the License is located at
 * 
 * http://aws.amazon.com/apache2.0
 * 
 * or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
 * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions
 * and limitations under the License.
 */

package software.amazon.awssdk.services.eventbridge.endpoints.internal;

import java.net.URI;
import java.util.Arrays;
import java.util.concurrent.CompletableFuture;
import software.amazon.awssdk.annotations.Generated;
import software.amazon.awssdk.annotations.SdkInternalApi;
import software.amazon.awssdk.awscore.endpoints.AwsEndpointAttribute;
import software.amazon.awssdk.awscore.endpoints.authscheme.SigV4aAuthScheme;
import software.amazon.awssdk.core.exception.SdkClientException;
import software.amazon.awssdk.endpoints.Endpoint;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.eventbridge.endpoints.EventBridgeEndpointParams;
import software.amazon.awssdk.services.eventbridge.endpoints.EventBridgeEndpointProvider;
import software.amazon.awssdk.utils.CompletableFutureUtils;
import software.amazon.awssdk.utils.Validate;

@Generated("software.amazon.awssdk:codegen")
@SdkInternalApi
public final class DefaultEventBridgeEndpointProvider implements EventBridgeEndpointProvider {
    @Override
    public CompletableFuture resolveEndpoint(EventBridgeEndpointParams params) {
        Validate.notNull(params.useDualStack(), "Parameter 'UseDualStack' must not be null");
        Validate.notNull(params.useFips(), "Parameter 'UseFIPS' must not be null");
        try {
            RuleResult result = endpointRule0(params, new LocalState(params.region()));
            if (result.canContinue()) {
                throw SdkClientException.create("Rule engine did not reach an error or endpoint result");
            }
            if (result.isError()) {
                String errorMsg = result.error();
                if (errorMsg.contains("Invalid ARN") && errorMsg.contains(":s3:::")) {
                    errorMsg += ". Use the bucket name instead of simple bucket ARNs in GetBucketLocationRequest.";
                }
                throw SdkClientException.create(errorMsg);
            }
            return CompletableFuture.completedFuture(result.endpoint());
        } catch (Exception error) {
            return CompletableFutureUtils.failedFuture(error);
        }
    }

    private static RuleResult endpointRule0(EventBridgeEndpointParams params, LocalState locals) {
        RuleResult result = endpointRule1(params, locals);
        if (result.isResolved()) {
            return result;
        }
        result = endpointRule12(params, locals);
        if (result.isResolved()) {
            return result;
        }
        result = endpointRule16(params, locals);
        if (result.isResolved()) {
            return result;
        }
        return endpointRule33(params, locals);
    }

    private static RuleResult endpointRule1(EventBridgeEndpointParams params, LocalState locals) {
        if (params.endpointId() != null && locals.region() != null) {
            RulePartition partitionResult = null;
            if ((partitionResult = RulesFunctions.awsPartition(locals.region())) != null) {
                locals = locals.toBuilder().partitionResult(partitionResult).build();
                RuleResult result = endpointRule2(params, locals);
                if (result.isResolved()) {
                    return result;
                }
                return endpointRule11(params, locals);
            }
        }
        return RuleResult.carryOn();
    }

    private static RuleResult endpointRule2(EventBridgeEndpointParams params, LocalState locals) {
        if (RulesFunctions.isValidHostLabel(params.endpointId(), true)) {
            RuleResult result = endpointRule3(params, locals);
            if (result.isResolved()) {
                return result;
            }
            return endpointRule10(params, locals);
        }
        return RuleResult.carryOn();
    }

    private static RuleResult endpointRule3(EventBridgeEndpointParams params, LocalState locals) {
        if (!params.useFips()) {
            RuleResult result = endpointRule4(params, locals);
            if (result.isResolved()) {
                return result;
            }
            result = endpointRule5(params, locals);
            if (result.isResolved()) {
                return result;
            }
            return endpointRule9(params, locals);
        }
        return RuleResult.carryOn();
    }

    private static RuleResult endpointRule4(EventBridgeEndpointParams params, LocalState locals) {
        if (params.endpoint() != null) {
            return RuleResult.endpoint(Endpoint
                    .builder()
                    .url(URI.create(params.endpoint()))
                    .putAttribute(
                            AwsEndpointAttribute.AUTH_SCHEMES,
                            Arrays.asList(SigV4aAuthScheme.builder().signingName("events").signingRegionSet(Arrays.asList("*"))
                                    .build())).build());
        }
        return RuleResult.carryOn();
    }

    private static RuleResult endpointRule5(EventBridgeEndpointParams params, LocalState locals) {
        if (params.useDualStack()) {
            RuleResult result = endpointRule6(params, locals);
            if (result.isResolved()) {
                return result;
            }
            return endpointRule8(params, locals);
        }
        return RuleResult.carryOn();
    }

    private static RuleResult endpointRule6(EventBridgeEndpointParams params, LocalState locals) {
        if (locals.partitionResult().supportsDualStack()) {
            return endpointRule7(params, locals);
        }
        return RuleResult.carryOn();
    }

    private static RuleResult endpointRule7(EventBridgeEndpointParams params, LocalState locals) {
        return RuleResult.endpoint(Endpoint
                .builder()
                .url(URI.create("https://" + params.endpointId() + ".endpoint.events."
                        + locals.partitionResult().dualStackDnsSuffix()))
                .putAttribute(
                        AwsEndpointAttribute.AUTH_SCHEMES,
                        Arrays.asList(SigV4aAuthScheme.builder().signingName("events").signingRegionSet(Arrays.asList("*"))
                                .build())).build());
    }

    private static RuleResult endpointRule8(EventBridgeEndpointParams params, LocalState locals) {
        return RuleResult.error("DualStack is enabled but this partition does not support DualStack");
    }

    private static RuleResult endpointRule9(EventBridgeEndpointParams params, LocalState locals) {
        return RuleResult.endpoint(Endpoint
                .builder()
                .url(URI.create("https://" + params.endpointId() + ".endpoint.events." + locals.partitionResult().dnsSuffix()))
                .putAttribute(
                        AwsEndpointAttribute.AUTH_SCHEMES,
                        Arrays.asList(SigV4aAuthScheme.builder().signingName("events").signingRegionSet(Arrays.asList("*"))
                                .build())).build());
    }

    private static RuleResult endpointRule10(EventBridgeEndpointParams params, LocalState locals) {
        return RuleResult.error("Invalid Configuration: FIPS is not supported with EventBridge multi-region endpoints.");
    }

    private static RuleResult endpointRule11(EventBridgeEndpointParams params, LocalState locals) {
        return RuleResult.error("EndpointId must be a valid host label.");
    }

    private static RuleResult endpointRule12(EventBridgeEndpointParams params, LocalState locals) {
        if (params.endpoint() != null) {
            RuleResult result = endpointRule13(params, locals);
            if (result.isResolved()) {
                return result;
            }
            result = endpointRule14(params, locals);
            if (result.isResolved()) {
                return result;
            }
            return endpointRule15(params, locals);
        }
        return RuleResult.carryOn();
    }

    private static RuleResult endpointRule13(EventBridgeEndpointParams params, LocalState locals) {
        if (params.useFips()) {
            return RuleResult.error("Invalid Configuration: FIPS and custom endpoint are not supported");
        }
        return RuleResult.carryOn();
    }

    private static RuleResult endpointRule14(EventBridgeEndpointParams params, LocalState locals) {
        if (params.useDualStack()) {
            return RuleResult.error("Invalid Configuration: Dualstack and custom endpoint are not supported");
        }
        return RuleResult.carryOn();
    }

    private static RuleResult endpointRule15(EventBridgeEndpointParams params, LocalState locals) {
        return RuleResult.endpoint(Endpoint.builder().url(URI.create(params.endpoint())).build());
    }

    private static RuleResult endpointRule16(EventBridgeEndpointParams params, LocalState locals) {
        if (locals.region() != null) {
            return endpointRule17(params, locals);
        }
        return RuleResult.carryOn();
    }

    private static RuleResult endpointRule17(EventBridgeEndpointParams params, LocalState locals) {
        RulePartition partitionResult = null;
        if ((partitionResult = RulesFunctions.awsPartition(locals.region())) != null) {
            locals = locals.toBuilder().partitionResult(partitionResult).build();
            RuleResult result = endpointRule18(params, locals);
            if (result.isResolved()) {
                return result;
            }
            result = endpointRule22(params, locals);
            if (result.isResolved()) {
                return result;
            }
            result = endpointRule28(params, locals);
            if (result.isResolved()) {
                return result;
            }
            return endpointRule32(params, locals);
        }
        return RuleResult.carryOn();
    }

    private static RuleResult endpointRule18(EventBridgeEndpointParams params, LocalState locals) {
        if (params.useFips() && params.useDualStack()) {
            RuleResult result = endpointRule19(params, locals);
            if (result.isResolved()) {
                return result;
            }
            return endpointRule21(params, locals);
        }
        return RuleResult.carryOn();
    }

    private static RuleResult endpointRule19(EventBridgeEndpointParams params, LocalState locals) {
        if (locals.partitionResult().supportsFIPS() && locals.partitionResult().supportsDualStack()) {
            return endpointRule20(params, locals);
        }
        return RuleResult.carryOn();
    }

    private static RuleResult endpointRule20(EventBridgeEndpointParams params, LocalState locals) {
        return RuleResult.endpoint(Endpoint.builder()
                .url(URI.create("https://events-fips." + locals.region() + "." + locals.partitionResult().dualStackDnsSuffix()))
                .build());
    }

    private static RuleResult endpointRule21(EventBridgeEndpointParams params, LocalState locals) {
        return RuleResult.error("FIPS and DualStack are enabled, but this partition does not support one or both");
    }

    private static RuleResult endpointRule22(EventBridgeEndpointParams params, LocalState locals) {
        if (params.useFips()) {
            RuleResult result = endpointRule23(params, locals);
            if (result.isResolved()) {
                return result;
            }
            return endpointRule27(params, locals);
        }
        return RuleResult.carryOn();
    }

    private static RuleResult endpointRule23(EventBridgeEndpointParams params, LocalState locals) {
        if (locals.partitionResult().supportsFIPS()) {
            RuleResult result = endpointRule24(params, locals);
            if (result.isResolved()) {
                return result;
            }
            result = endpointRule25(params, locals);
            if (result.isResolved()) {
                return result;
            }
            return endpointRule26(params, locals);
        }
        return RuleResult.carryOn();
    }

    private static RuleResult endpointRule24(EventBridgeEndpointParams params, LocalState locals) {
        if ("us-gov-east-1".equals(locals.region())) {
            return RuleResult.endpoint(Endpoint.builder().url(URI.create("https://events.us-gov-east-1.amazonaws.com")).build());
        }
        return RuleResult.carryOn();
    }

    private static RuleResult endpointRule25(EventBridgeEndpointParams params, LocalState locals) {
        if ("us-gov-west-1".equals(locals.region())) {
            return RuleResult.endpoint(Endpoint.builder().url(URI.create("https://events.us-gov-west-1.amazonaws.com")).build());
        }
        return RuleResult.carryOn();
    }

    private static RuleResult endpointRule26(EventBridgeEndpointParams params, LocalState locals) {
        return RuleResult.endpoint(Endpoint.builder()
                .url(URI.create("https://events-fips." + locals.region() + "." + locals.partitionResult().dnsSuffix())).build());
    }

    private static RuleResult endpointRule27(EventBridgeEndpointParams params, LocalState locals) {
        return RuleResult.error("FIPS is enabled but this partition does not support FIPS");
    }

    private static RuleResult endpointRule28(EventBridgeEndpointParams params, LocalState locals) {
        if (params.useDualStack()) {
            RuleResult result = endpointRule29(params, locals);
            if (result.isResolved()) {
                return result;
            }
            return endpointRule31(params, locals);
        }
        return RuleResult.carryOn();
    }

    private static RuleResult endpointRule29(EventBridgeEndpointParams params, LocalState locals) {
        if (locals.partitionResult().supportsDualStack()) {
            return endpointRule30(params, locals);
        }
        return RuleResult.carryOn();
    }

    private static RuleResult endpointRule30(EventBridgeEndpointParams params, LocalState locals) {
        return RuleResult.endpoint(Endpoint.builder()
                .url(URI.create("https://events." + locals.region() + "." + locals.partitionResult().dualStackDnsSuffix()))
                .build());
    }

    private static RuleResult endpointRule31(EventBridgeEndpointParams params, LocalState locals) {
        return RuleResult.error("DualStack is enabled but this partition does not support DualStack");
    }

    private static RuleResult endpointRule32(EventBridgeEndpointParams params, LocalState locals) {
        return RuleResult.endpoint(Endpoint.builder()
                .url(URI.create("https://events." + locals.region() + "." + locals.partitionResult().dnsSuffix())).build());
    }

    private static RuleResult endpointRule33(EventBridgeEndpointParams params, LocalState locals) {
        return RuleResult.error("Invalid Configuration: Missing Region");
    }

    @Override
    public boolean equals(Object rhs) {
        return rhs != null && getClass().equals(rhs.getClass());
    }

    @Override
    public int hashCode() {
        return getClass().hashCode();
    }

    private static final class LocalState {
        private final String region;

        private final RulePartition partitionResult;

        LocalState() {
            this.region = null;
            this.partitionResult = null;
        }

        LocalState(Region region) {
            if (region != null) {
                this.region = region.id();
            } else {
                this.region = null;
            }
            this.partitionResult = null;
        }

        LocalState(LocalStateBuilder builder) {
            this.region = builder.region;
            this.partitionResult = builder.partitionResult;
        }

        public String region() {
            return this.region;
        }

        public RulePartition partitionResult() {
            return this.partitionResult;
        }

        public LocalStateBuilder toBuilder() {
            return new LocalStateBuilder(this);
        }
    }

    private static final class LocalStateBuilder {
        private String region;

        private RulePartition partitionResult;

        LocalStateBuilder() {
            this.region = null;
            this.partitionResult = null;
        }

        LocalStateBuilder(LocalState locals) {
            this.region = locals.region;
            this.partitionResult = locals.partitionResult;
        }

        public LocalStateBuilder region(String value) {
            this.region = value;
            return this;
        }

        public LocalStateBuilder partitionResult(RulePartition value) {
            this.partitionResult = value;
            return this;
        }

        LocalState build() {
            return new LocalState(this);
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy