public Object handleRequest()

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;
    }