44import static com .onegini .examples .resourcegateway .service .ScopeValidationService .SCOPE_READ ;
55import static com .onegini .examples .resourcegateway .service .ScopeValidationService .SCOPE_WRITE ;
66import static org .springframework .http .HttpHeaders .AUTHORIZATION ;
7+ import static org .springframework .http .HttpHeaders .CONTENT_TYPE ;
78import 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-
1710import com .onegini .examples .resourcegateway .model .ApplicationDetails ;
1811import com .onegini .examples .resourcegateway .model .DecoratedUser ;
1912import com .onegini .examples .resourcegateway .model .DeviceList ;
2922import com .onegini .examples .resourcegateway .util .DecoratedUserIdBuilder ;
3023import lombok .RequiredArgsConstructor ;
3124import 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