import com.amazonaws.serverless.exceptions.ContainerInitializationException;
import com.amazonaws.serverless.proxy.internal.model.AwsProxyRequest;
import com.amazonaws.serverless.proxy.internal.model.AwsProxyResponse;
import com.amazonaws.serverless.proxy.spring.SpringLambdaContainerHandler;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestStreamHandler;
import com.amazonaws.util.Base64;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.maciejtreder.aws.webpush.AwsWebPushApp;
import org.apache.commons.io.IOUtils;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class HttpHandler implements RequestStreamHandler {
private SpringLambdaContainerHandler<AwsProxyRequest, AwsProxyResponse> handler;
private static ObjectMapper mapper = new ObjectMapper();
static {
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); //work-around for another issue
}
@Override
public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context)
throws IOException {
String theString = IOUtils.toString(inputStream, "UTF-8");
System.out.println(theString);
if (handler == null) {
try {
handler = SpringLambdaContainerHandler.getAwsProxyHandler(AwsWebPushApp.class);
} catch (ContainerInitializationException e) {
e.printStackTrace();
outputStream.close();
}
}
AwsProxyRequest request = mapper.readValue(theString, AwsProxyRequest.class);
System.out.println("is encoded");
System.out.println(request.isBase64Encoded());
if (request.getBody() != null) { //here we should be able to use isBase64Encode()
byte[] decoded = Base64.decode(request.getBody());
request.setBody(new String(decoded, "utf-8"));
}
AwsProxyResponse resp = handler.proxy(request, context);
mapper.writeValue(outputStream, resp);
// just in case it wasn't closed by the mapper
outputStream.close();
}
}
{
"resource": "/{proxy+}",
"path": "/webpush/vapid/subscribe",
"httpMethod": "POST",
"headers": {
"Accept": "application/json, text/plain, */*",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "en-US,en;q=0.8,pl;q=0.6",
"CloudFront-Forwarded-Proto": "https",
"CloudFront-Is-Desktop-Viewer": "true",
"CloudFront-Is-Mobile-Viewer": "false",
"CloudFront-Is-SmartTV-Viewer": "false",
"CloudFront-Is-Tablet-Viewer": "false",
"CloudFront-Viewer-Country": "PL",
"content-type": "application/json",
"Host": "api.angular-universal-serverless.maciejtreder.com",
"origin": "https://www.angular-universal-serverless.maciejtreder.com",
"Referer": "https://www.angular-universal-serverless.maciejtreder.com/",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36",
"Via": "2.0 68ef8323f03e69804fe5d491909ddb85.cloudfront.net (CloudFront)",
"X-Amz-Cf-Id": "VcChAC1vhVs1NUb35-PrvGufKXN7am-rQZMBuM4UPBIvom8-0sbFSQ==",
"X-Amzn-Trace-Id": "Root=1-597497c0-13985d331f52e70f27a3edfb",
"X-Forwarded-For": "89.64.35.4, 54.239.171.8",
"X-Forwarded-Port": "443",
"X-Forwarded-Proto": "https"
},
"queryStringParameters": null,
"pathParameters": {
"proxy": "vapid/subscribe"
},
"stageVariables": null,
"requestContext": {
"path": "/webpush/vapid/subscribe",
"accountId": "548199570266",
"resourceId": "pep2vp",
"stage": "production",
"requestId": "38ece18e-6fa3-11e7-8105-8f56ec1e5e01",
"identity": {
"cognitoIdentityPoolId": null,
"accountId": null,
"cognitoIdentityId": null,
"caller": null,
"apiKey": "",
"sourceIp": "89.64.35.4",
"accessKey": null,
"cognitoAuthenticationType": null,
"cognitoAuthenticationProvider": null,
"userArn": null,
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36",
"user": null
},
"resourcePath": "/{proxy+}",
"httpMethod": "POST",
"apiId": "k5nsma1gc6"
},
"body": "eyJlbmRwb2ludCI6Imh0dHBzOi8vZmNtLmdvb2dsZWFwaXMuY29tL2ZjbS9zZW5kL2MtWjB2RzBRRFN3OkFQQTkxYkgxZW1lRDVJdFhuazN6eGR0aTNldWNhdjNISHBITnJGRHRwcnIzYkd2SWRvSHFfRlotQkp6UjRHc0Jtc3dGaVFVeWNWUzZuNi1LNEtJTnVybjQwcDlSTERTZGV3amJwXzJuakpBdXE0X19EVFNXSXpxanlOWUpLRndmb1FUVU11RUMzLU5KIiwia2V5cyI6eyJwMjU2ZGgiOiJCRmxRS255WFk5eFVTQ2FuTkJNQkZ3TnJ4em9qMThXcDNpaVg2TmpSNWNhcXNYY2czbGJRSC1GUUZFUm5KbTMyX0JjSFFzX3lkekprR19sRm1DNmpZYTA9IiwiYXV0aCI6IlVqRkVkU1JlWW12LWRUYTNlSkw5MEE9PSJ9fQ==",
"isBase64Encoded": true
}
is encoded
false