1 /*
2  * Copyright 2015-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
3  * 
4  * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance with
5  * the License. A copy of the License is located at
6  * 
7  * http://aws.amazon.com/apache2.0
8  * 
9  * or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
10  * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions
11  * and limitations under the License.
12  */

13
14 package software.amazon.awssdk.regions.servicemetadata;
15
16 import java.net.URI;
17 import java.util.Arrays;
18 import java.util.Collections;
19 import java.util.List;
20 import java.util.Map;
21 import software.amazon.awssdk.annotations.Generated;
22 import software.amazon.awssdk.annotations.SdkPublicApi;
23 import software.amazon.awssdk.regions.Region;
24 import software.amazon.awssdk.regions.ServiceMetadata;
25 import software.amazon.awssdk.regions.ServicePartitionMetadata;
26 import software.amazon.awssdk.regions.internal.DefaultServicePartitionMetadata;
27 import software.amazon.awssdk.utils.ImmutableMap;
28
29 @Generated("software.amazon.awssdk:codegen")
30 @SdkPublicApi
31 public final class IamServiceMetadata implements ServiceMetadata {
32     private static final String ENDPOINT_PREFIX = "iam";
33
34     private static final Map<String, String> PARTITION_OVERRIDDEN_ENDPOINTS = ImmutableMap.<String, String> builder().build();
35
36     private static final Map<String, String> REGION_OVERRIDDEN_ENDPOINTS = ImmutableMap.<String, String> builder()
37             .put("aws-global""iam.amazonaws.com").put("aws-cn-global""iam.cn-north-1.amazonaws.com.cn")
38             .put("aws-iso-global""iam.us-iso-east-1.c2s.ic.gov").put("aws-iso-b-global""iam.us-isob-east-1.sc2s.sgov.gov")
39             .put("aws-us-gov-global""iam.us-gov.amazonaws.com").build();
40
41     private static final List<Region> REGIONS = Collections.unmodifiableList(Arrays.asList(Region.of("aws-global"),
42             Region.of("aws-cn-global"), Region.of("aws-us-gov-global"), Region.of("aws-iso-global"),
43             Region.of("aws-iso-b-global")));
44
45     private static final Map<String, String> SIGNING_REGION_OVERRIDES = ImmutableMap.<String, String> builder()
46             .put("aws-global""us-east-1").put("aws-cn-global""cn-north-1").put("aws-iso-global""us-iso-east-1")
47             .put("aws-iso-b-global""us-isob-east-1").put("aws-us-gov-global""us-gov-west-1").build();
48
49     private static final List<ServicePartitionMetadata> PARTITIONS = Collections.unmodifiableList(Arrays.asList(
50             new DefaultServicePartitionMetadata("aws", Region.of("aws-global")), new DefaultServicePartitionMetadata("aws-cn",
51                     Region.of("aws-cn-global")),
52             new DefaultServicePartitionMetadata("aws-us-gov", Region.of("aws-us-gov-global")),
53             new DefaultServicePartitionMetadata("aws-iso", Region.of("aws-iso-global")), new DefaultServicePartitionMetadata(
54                     "aws-iso-b", Region.of("aws-iso-b-global"))));
55
56     @Override
57     public List<Region> regions() {
58         return REGIONS;
59     }
60
61     @Override
62     public URI endpointFor(Region region) {
63         return URI.create(REGION_OVERRIDDEN_ENDPOINTS.containsKey(region.id()) ? REGION_OVERRIDDEN_ENDPOINTS.get(region.id())
64                 : computeEndpoint(ENDPOINT_PREFIX, PARTITION_OVERRIDDEN_ENDPOINTS, region));
65     }
66
67     @Override
68     public Region signingRegion(Region region) {
69         return Region.of(SIGNING_REGION_OVERRIDES.getOrDefault(region.id(), region.id()));
70     }
71
72     @Override
73     public List<ServicePartitionMetadata> servicePartitions() {
74         return PARTITIONS;
75     }
76 }
77