Skip to content

Commit 1682ba8

Browse files
authored
Merge pull request #1 from mattcorey/request-path
Implement getRequestUrl, clean up getServerName, getPort, getContextPath
2 parents b9f486e + 510f05b commit 1682ba8

File tree

5 files changed

+52
-28
lines changed

5 files changed

+52
-28
lines changed

aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/model/AwsProxyRequest.java

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -155,20 +155,4 @@ public boolean isBase64Encoded() {
155155
public void setBase64Encoded(boolean base64Encoded) {
156156
isBase64Encoded = base64Encoded;
157157
}
158-
159-
@Override
160-
public String toString() {
161-
return "AwsProxyRequest{" +
162-
"body='" + body + '\'' +
163-
", resource='" + resource + '\'' +
164-
", requestContext=" + requestContext +
165-
", queryStringParameters=" + queryStringParameters +
166-
", headers=" + headers +
167-
", pathParameters=" + pathParameters +
168-
", httpMethod='" + httpMethod + '\'' +
169-
", stageVariables=" + stageVariables +
170-
", path='" + path + '\'' +
171-
", isBase64Encoded=" + isBase64Encoded +
172-
'}';
173-
}
174158
}

aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ public String getPathTranslated() {
224224

225225
@Override
226226
public String getContextPath() {
227-
return "/";
227+
return request.getRequestContext().getStage();
228228
}
229229

230230

@@ -268,10 +268,15 @@ public String getRequestURI() {
268268
@Override
269269
public StringBuffer getRequestURL() {
270270
String url = "";
271-
url += getHeaderCaseInsensitive(HttpHeaders.HOST);
271+
url += getServerName();
272+
url += "/";
273+
url += getContextPath();
272274
url += "/";
273275
url += request.getPath();
274-
return new StringBuffer(url);
276+
277+
url = url.replaceAll("/+", "/");
278+
279+
return new StringBuffer(getScheme() + "://" + url);
275280
}
276281

277282

@@ -608,13 +613,18 @@ public String getScheme() {
608613

609614
@Override
610615
public String getServerName() {
611-
return "lambda.amazonaws.com";
616+
String name = getHeaderCaseInsensitive(HttpHeaders.HOST);
617+
618+
if (name == null || name.length() == 0) {
619+
name = "lambda.amazonaws.com";
620+
}
621+
return name;
612622
}
613623

614624

615625
@Override
616626
public int getServerPort() {
617-
return 0;
627+
return getLocalPort();
618628
}
619629

620630

@@ -720,7 +730,14 @@ public String getLocalAddr() {
720730

721731
@Override
722732
public int getLocalPort() {
723-
return 0;
733+
int port = 0;
734+
735+
if ("https".equals(getScheme())) {
736+
port = 443;
737+
} else if ("http".equals(getScheme())) {
738+
port = 80;
739+
}
740+
return port;
724741
}
725742

726743

aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ public AwsProxyRequestBuilder(String path, String httpMethod) {
5353
this.request.setPath(path);
5454
this.request.setQueryStringParameters(new HashMap<>());
5555
this.request.setRequestContext(new ApiGatewayRequestContext());
56+
this.request.getRequestContext().setStage("test");
5657
ApiGatewayRequestIdentity identity = new ApiGatewayRequestIdentity();
5758
identity.setSourceIp("127.0.0.1");
5859
this.request.getRequestContext().setIdentity(identity);
@@ -68,9 +69,6 @@ public AwsProxyRequestBuilder method(String httpMethod) {
6869
return this;
6970
}
7071

71-
// public AwsProxyRequestBuilder schemeAndHost(String scheme) {
72-
// this.request.getRequestContext().
73-
// }
7472

7573
public AwsProxyRequestBuilder path(String path) {
7674
this.request.setPath(path);
@@ -171,6 +169,28 @@ public AwsProxyRequestBuilder cookie(String name, String value) {
171169
return this;
172170
}
173171

172+
public AwsProxyRequestBuilder scheme(String scheme) {
173+
if (request.getHeaders() == null) {
174+
request.setHeaders(new HashMap<>());
175+
}
176+
177+
request.getHeaders().put("CloudFront-Forwarded-Proto", scheme);
178+
return this;
179+
}
180+
181+
public AwsProxyRequestBuilder serverName(String serverName) {
182+
if (request.getHeaders() == null) {
183+
request.setHeaders(new HashMap<>());
184+
}
185+
186+
request.getHeaders().put("Host", serverName);
187+
return this;
188+
}
189+
190+
public AwsProxyRequestBuilder stage(String stage) {
191+
this.request.getRequestContext().setStage(stage);
192+
return this;
193+
}
174194

175195
public AwsProxyRequest build() {
176196
return this.request;

aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringAwsProxyTest.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -200,13 +200,16 @@ public void request_requestURI() {
200200

201201
@Test
202202
public void request_requestURL() {
203-
AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/request-URL", "GET")
203+
AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/request-Url", "GET")
204+
.scheme("https")
205+
.serverName("api.myserver.com")
206+
.stage("prod")
204207
.build();
205208

206209
AwsProxyResponse output = handler.proxy(request, lambdaContext);
207210
assertEquals(200, output.getStatusCode());
208211

209-
// validateSingleValueModel(output, "/echo/request-URI");
212+
validateSingleValueModel(output, "https://api.myserver.com/prod/echo/request-Url");
210213
}
211214

212215
private void validateMapResponseModel(AwsProxyResponse output) {

aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/EchoResource.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ public SingleValueModel echoRequestURI(HttpServletRequest request) {
9292
return valueModel;
9393
}
9494

95-
@RequestMapping(path = "/request-URL", method = RequestMethod.GET)
95+
@RequestMapping(path = "/request-Url", method = RequestMethod.GET)
9696
public SingleValueModel echoRequestURL(HttpServletRequest request) {
9797
SingleValueModel valueModel = new SingleValueModel();
9898
valueModel.setValue(request.getRequestURL().toString());

0 commit comments

Comments
 (0)