Skip to content

Commit 4c02860

Browse files
authored
Merge pull request #63 from onewelcome/add-post-endpoint
Add POST /resources API endpoint
2 parents 8fe7272 + 8009510 commit 4c02860

File tree

2 files changed

+44
-15
lines changed

2 files changed

+44
-15
lines changed

.circleci/config.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
version: 2.1
22

33
orbs:
4-
onegini-build: onegini/onegini-build@2
4+
onegini-build: onegini/onegini-build@3
55

66
.dev-context-and-executor: &dev-context-and-executor
77
context: dev-context

src/main/java/com/onegini/examples/resourcegateway/web/ResourcesController.java

Lines changed: 43 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,9 @@
44
import static com.onegini.examples.resourcegateway.service.ScopeValidationService.SCOPE_READ;
55
import static com.onegini.examples.resourcegateway.service.ScopeValidationService.SCOPE_WRITE;
66
import static org.springframework.http.HttpHeaders.AUTHORIZATION;
7+
import static org.springframework.http.HttpHeaders.CONTENT_TYPE;
78
import static org.springframework.http.HttpStatus.OK;
89

9-
import org.springframework.http.ResponseEntity;
10-
import org.springframework.web.bind.annotation.GetMapping;
11-
import org.springframework.web.bind.annotation.ModelAttribute;
12-
import org.springframework.web.bind.annotation.PostMapping;
13-
import org.springframework.web.bind.annotation.RequestHeader;
14-
import org.springframework.web.bind.annotation.RequestMapping;
15-
import org.springframework.web.bind.annotation.RestController;
16-
1710
import com.onegini.examples.resourcegateway.model.ApplicationDetails;
1811
import com.onegini.examples.resourcegateway.model.DecoratedUser;
1912
import com.onegini.examples.resourcegateway.model.DeviceList;
@@ -29,6 +22,19 @@
2922
import com.onegini.examples.resourcegateway.util.DecoratedUserIdBuilder;
3023
import lombok.RequiredArgsConstructor;
3124
import lombok.extern.slf4j.Slf4j;
25+
import org.springframework.http.ResponseEntity;
26+
import org.springframework.web.bind.annotation.GetMapping;
27+
import org.springframework.web.bind.annotation.ModelAttribute;
28+
import org.springframework.web.bind.annotation.PostMapping;
29+
import org.springframework.web.bind.annotation.RequestHeader;
30+
import org.springframework.web.bind.annotation.RequestMapping;
31+
import org.springframework.web.bind.annotation.RestController;
32+
33+
import javax.servlet.http.HttpServletRequest;
34+
import javax.servlet.http.HttpServletResponse;
35+
import java.io.IOException;
36+
import java.io.InputStream;
37+
import java.io.OutputStream;
3238

3339
@Slf4j
3440
@RestController
@@ -52,18 +58,21 @@ public ResponseEntity<DeviceList> getDevices(@RequestHeader(name = AUTHORIZATION
5258
}
5359

5460
@GetMapping(value = "/application-details")
55-
public ResponseEntity<ApplicationDetails> getApplicationDetails(@RequestHeader(name = AUTHORIZATION, required = false) final String authorizationHeader) {
61+
public ResponseEntity<ApplicationDetails> getApplicationDetails(
62+
@RequestHeader(name = AUTHORIZATION, required = false) final String authorizationHeader) {
5663
final TokenIntrospectionResult tokenIntrospectionResult = getTokenIntrospectionResultFromHeader(authorizationHeader);
5764
validateScopeAndTokenType(tokenIntrospectionResult, SCOPE_APPLICATION_DETAILS);
5865

59-
final ApplicationDetails applicationDetails = new ApplicationDetails(tokenIntrospectionResult.getAppIdentifier(), tokenIntrospectionResult.getAppPlatform(),
60-
tokenIntrospectionResult.getAppVersion());
66+
final ApplicationDetails applicationDetails =
67+
new ApplicationDetails(tokenIntrospectionResult.getAppIdentifier(), tokenIntrospectionResult.getAppPlatform(),
68+
tokenIntrospectionResult.getAppVersion());
6169

6270
return new ResponseEntity<>(applicationDetails, OK);
6371
}
6472

6573
@GetMapping(value = "/user-id-decorated")
66-
public ResponseEntity<DecoratedUser> getDecoratedUserId(@RequestHeader(name = AUTHORIZATION, required = false) final String authorizationHeader) {
74+
public ResponseEntity<DecoratedUser> getDecoratedUserId(
75+
@RequestHeader(name = AUTHORIZATION, required = false) final String authorizationHeader) {
6776
final TokenIntrospectionResult tokenIntrospectionResult = getTokenIntrospectionResultFromHeader(authorizationHeader);
6877

6978
tokenTypeValidationService.validateImplicitAuthenticationToken(tokenIntrospectionResult.getAmr());
@@ -76,8 +85,9 @@ public ResponseEntity<DecoratedUser> getDecoratedUserId(@RequestHeader(name = AU
7685
}
7786

7887
@PostMapping(value = "/file-upload")
79-
public ResponseEntity<MultipartResponse> fileUpload(@RequestHeader(name = AUTHORIZATION, required = false) final String authorizationHeader,
80-
@ModelAttribute final FormDataWithFiles formDataWithFiles) {
88+
public ResponseEntity<MultipartResponse> fileUpload(
89+
@RequestHeader(name = AUTHORIZATION, required = false) final String authorizationHeader,
90+
@ModelAttribute final FormDataWithFiles formDataWithFiles) {
8191
final TokenIntrospectionResult tokenIntrospectionResult = getTokenIntrospectionResultFromHeader(authorizationHeader);
8292
validateScopeAndTokenType(tokenIntrospectionResult, SCOPE_WRITE);
8393

@@ -86,6 +96,25 @@ public ResponseEntity<MultipartResponse> fileUpload(@RequestHeader(name = AUTHOR
8696
return new ResponseEntity<>(multipartResponse, OK);
8797
}
8898

99+
@PostMapping
100+
public void postResource(@RequestHeader(name = AUTHORIZATION, required = false) final String authorizationHeader,
101+
final HttpServletRequest request, final HttpServletResponse response) throws IOException {
102+
final TokenIntrospectionResult tokenIntrospectionResult = getTokenIntrospectionResultFromHeader(authorizationHeader);
103+
validateScopeAndTokenType(tokenIntrospectionResult, SCOPE_WRITE);
104+
response.setStatus(HttpServletResponse.SC_CREATED);
105+
response.setHeader(CONTENT_TYPE, request.getHeader(CONTENT_TYPE));
106+
107+
byte[] buffer = new byte[1024];
108+
try (
109+
InputStream input = request.getInputStream();
110+
OutputStream output = response.getOutputStream()) {
111+
for (int length = 0; (length = input.read(buffer)) > 0; ) {
112+
output.write(buffer, 0, length);
113+
}
114+
}
115+
response.flushBuffer();
116+
}
117+
89118
private void validateScopeAndTokenType(final TokenIntrospectionResult tokenIntrospectionResult, final String requiredScope) {
90119
scopeValidationService.validateScopeGranted(tokenIntrospectionResult.getScope(), requiredScope);
91120
tokenTypeValidationService.validateNoImplicitAuthenticationToken(tokenIntrospectionResult.getAmr());

0 commit comments

Comments
 (0)