· 6 years ago · Nov 01, 2019, 06:40 PM
1package com.hawaiian.nightmare;
2
3import com.amazonaws.AmazonServiceException;
4import com.amazonaws.ClientConfiguration;
5import com.amazonaws.DefaultRequest;
6import com.amazonaws.Protocol;
7import com.amazonaws.Response;
8import com.amazonaws.auth.AWS4Signer;
9import com.amazonaws.auth.BasicAWSCredentials;
10import com.amazonaws.http.AmazonHttpClient;
11import com.amazonaws.http.ExecutionContext;
12import com.amazonaws.http.HttpMethodName;
13import com.amazonaws.http.HttpResponse;
14import com.amazonaws.http.HttpResponseHandler;
15import com.amazonaws.util.IOUtils;
16import org.springframework.beans.factory.annotation.Value;
17import org.springframework.core.io.Resource;
18import org.springframework.web.bind.annotation.GetMapping;
19import org.springframework.web.bind.annotation.RestController;
20
21import java.io.IOException;
22import java.net.URI;
23import java.util.HashMap;
24import java.util.Map;
25
26@RestController
27public class Service {
28
29 @Value("classpath:json/payload.json")
30 Resource resource;
31 private static final String API_KEY = "someKey";
32 private static final String API_NAME = "execute-api";
33 private static final String REGION = "us-west-2";
34 private static final String ACCESS_KEY = "someAccessKey";
35 private static final String SECRET_KEY = "someSecretKey";
36 private static final String ENDPOINT = "someEndpoint";
37 private static final String HOST = "someHost";
38
39 @GetMapping("/")
40 public String run() throws IOException {
41
42 final String payload = IOUtils.toString(resource.getInputStream());
43
44 // Request Headers
45 Map<String, String> headers = new HashMap<>();
46 headers.put("Content-Type", "application/json");
47 headers.put("Host", HOST);
48 headers.put("Content-Length", String.valueOf(payload.length()));
49 headers.put("x-api-key", API_KEY);
50
51 // Buid Request
52 DefaultRequest<String> request = new DefaultRequest<>(API_NAME);
53 request.setEndpoint(URI.create(ENDPOINT));
54 request.setHttpMethod(HttpMethodName.POST);
55 request.setContent(resource.getInputStream());
56 request.setHeaders(headers);
57
58 // Sign Request
59 BasicAWSCredentials awsCredentials = new BasicAWSCredentials(ACCESS_KEY, SECRET_KEY);
60 AWS4Signer aws4Signer = new AWS4Signer(false);
61 aws4Signer.setServiceName(API_NAME);
62 aws4Signer.setRegionName(REGION);
63 aws4Signer.sign(request, awsCredentials);
64
65 ClientConfiguration config = new ClientConfiguration();
66 config.setProtocol(Protocol.HTTPS);
67 AmazonHttpClient client = new AmazonHttpClient(config);
68 Response<Void> response = client.requestExecutionBuilder()
69 .request(request)
70 .errorResponseHandler(new MyErrorHandler())
71 .executionContext(new ExecutionContext(true))
72 .execute();
73
74 System.out.println(IOUtils.toString(response.getHttpResponse().getContent()));
75 return "ok";
76 }
77
78 static class MyErrorHandler implements HttpResponseHandler<AmazonServiceException> {
79
80 @Override
81 public AmazonServiceException handle(HttpResponse response) throws Exception {
82 AmazonServiceException exception = new AmazonServiceException("Something Went Wrong!");
83 exception.setStatusCode(response.getStatusCode());
84
85 String msg = response.getStatusText() + ". ";
86 if (response.getContent() != null) {
87 msg += IOUtils.toString(response.getContent());
88 }
89
90 exception.setErrorCode(msg);
91 return exception;
92 }
93
94 @Override
95 public boolean needsConnectionLeftOpen() {
96 return false;
97 }
98 }
99}