github.com/treeverse/lakefs@v1.24.1-0.20240520134607-95648127bfb0/clients/hadoopfs/src/main/java/io/lakefs/auth/GeneratePresignGetCallerIdentityResponse.java (about)

     1  package io.lakefs.auth;
     2  
     3  import java.io.UnsupportedEncodingException;
     4  import java.net.URI;
     5  import java.net.URLEncoder;
     6  import java.nio.charset.StandardCharsets;
     7  import java.util.HashMap;
     8  import java.util.Map;
     9  
    10  public class GeneratePresignGetCallerIdentityResponse {
    11      private Map<String, String> signedQueryParams;
    12      private GeneratePresignGetCallerIdentityRequest req;
    13      private Map<String, String> signedHeaders;
    14      private String signature;
    15      private String region;
    16      public GeneratePresignGetCallerIdentityResponse(GeneratePresignGetCallerIdentityRequest req, String region, Map<String, String> signedQueryParams, Map<String, String> signedHeaders, String signature) {
    17          this.signedQueryParams = signedQueryParams;
    18          this.req = req;
    19          this.signedHeaders = signedHeaders;
    20          this.signature = signature;
    21          this.region = region;
    22      }
    23      public Map<String, String> getSignedQueryParams() {
    24          return signedQueryParams;
    25      }
    26      public GeneratePresignGetCallerIdentityRequest getRequest() {
    27          return req;
    28      }
    29      public Map<String, String> getSignedHeaders() {
    30          return signedHeaders;
    31      }
    32      public String getSignature() {
    33          return signature;
    34      }
    35      public String getHTTPMethod(){
    36          return "POST";
    37      }
    38      public String getRegion() {
    39          return region;
    40      }
    41      public String getHost() {
    42          return req.getStsEndpoint().getHost();
    43      }
    44      public String getAction(){
    45          return signedQueryParams.get(STSGetCallerIdentityPresigner.AMZ_ACTION_PARAM_NAME);
    46      }
    47      public String getDate(){
    48          return signedQueryParams.get(STSGetCallerIdentityPresigner.AMZ_DATE_PARAM_NAME);
    49      }
    50      public String getExpires(){
    51          return signedQueryParams.get(STSGetCallerIdentityPresigner.AMZ_EXPIRES_PARAM_NAME);
    52      }
    53      public String getAccessKeyId(){
    54          return req.getCredentials().getAWSAccessKeyId();
    55      }
    56      public String getVersion(){
    57          return signedQueryParams.get(STSGetCallerIdentityPresigner.AMZ_VERSION_PARAM_NAME);
    58      }
    59      public String getAlgorithm(){
    60          return signedQueryParams.get(STSGetCallerIdentityPresigner.AMZ_ALGORITHM_PARAM_NAME);
    61      }
    62      public String getSecurityToken(){
    63          return signedQueryParams.get(STSGetCallerIdentityPresigner.AMZ_SECURITY_TOKEN_PARAM_NAME);
    64      }
    65      public String getSignedHeadersParam(){
    66          return signedQueryParams.get(STSGetCallerIdentityPresigner.AMZ_SIGNED_HEADERS_PARAM_NAME);
    67      }
    68      public String convertToURL(){
    69          Map<String, String> allQueryParams = new HashMap<>();
    70          allQueryParams.putAll(signedQueryParams);
    71          allQueryParams.put(STSGetCallerIdentityPresigner.AMZ_SIGNATURE_PARAM_NAME, getSignature());
    72          return URLBuilder(allQueryParams, req.getStsEndpoint());
    73      }
    74      public static String URLBuilder(Map<String, String> params, URI endpoint) {
    75          StringBuilder query = new StringBuilder();
    76          for (Map.Entry<String, String> entry : params.entrySet()) {
    77              String key = entry.getKey();
    78              String value = entry.getValue();
    79              if (value != null) {
    80                  if (query.length() > 0) {
    81                      query.append("&");
    82                  }
    83                  try {
    84  
    85                      String encodedValue = URLEncoder.encode(value, StandardCharsets.UTF_8.toString());
    86                      query.append(key).append("=").append(encodedValue);
    87                  } catch (UnsupportedEncodingException ex) {
    88                      throw new RuntimeException(ex);
    89                  }
    90              }
    91          }
    92          try {
    93              String url = String.format("%s?%s", endpoint, query.toString());
    94              return new URI(url).toString();
    95          } catch (Exception e) {
    96              e.printStackTrace();
    97              return null;
    98          }
    99      }
   100  }