in auth-functions/src/main/java/com/auth/TrustedStoreCustomResourceHandler.java [34:107]
public Object handleRequest(CloudFormationCustomResourceEvent input, Context context) {
LambdaLogger logger = context.getLogger();
logger.log("Input: " + input);
final String requestType = input.getRequestType();
ExecutorService service = Executors.newSingleThreadExecutor();
JSONObject responseData = new JSONObject();
String bucket = (String) input.getResourceProperties().getOrDefault("TrustStoreBucket", "");
String key = (String) input.getResourceProperties().getOrDefault("TrustStoreKey", "");
String concatenatedCert = String.join("\n", ((List<String>) input.getResourceProperties().getOrDefault("Certs", emptyList())));
try {
if (requestType == null | concatenatedCert.isEmpty()) {
throw new RuntimeException();
}
Runnable r = () -> {
switch (requestType) {
case "Create": {
logger.log("CREATE!");
responseData.put("Message", "Resource creation successful!");
PutObjectResponse putObjectResponse = S3_CLIENT.putObject(PutObjectRequest.builder()
.bucket(bucket)
.key(key)
.build(), RequestBody.fromString(concatenatedCert));
context.getLogger().log(putObjectResponse.toString());
responseData.put("TrustStoreUri", String.format("s3://%s/%s", bucket, key));
responseData.put("ObjectVersion", putObjectResponse.versionId());
sendResponse(input, context, "SUCCESS", responseData);
break;
}
case "Update": {
logger.log("UPDATE!");
PutObjectResponse putObjectResponse = S3_CLIENT.putObject(PutObjectRequest.builder()
.bucket(bucket)
.key(key)
.build(), RequestBody.fromString(concatenatedCert));
context.getLogger().log(putObjectResponse.toString());
responseData.put("Message", "Resource update successful!");
responseData.put("TrustStoreUri", String.format("s3://%s/%s", bucket, key));
responseData.put("ObjectVersion", putObjectResponse.versionId());
sendResponse(input, context, "SUCCESS", responseData);
break;
}
case "Delete": {
logger.log("DELETE!");
sendResponse(input, context, "SUCCESS", responseData);
break;
}
default: {
logger.log("FAILURE!");
sendResponse(input, context, "FAILED", responseData);
}
}
};
Future<?> f = service.submit(r);
f.get(context.getRemainingTimeInMillis() - 1000, TimeUnit.MILLISECONDS);
} catch (final TimeoutException | InterruptedException
| ExecutionException e) {
logger.log("FAILURE!");
sendResponse(input, context, "FAILED", responseData);
// Took too long!
} finally {
service.shutdown();
}
return null;
}