3232import org .springframework .http .HttpHeaders ;
3333import org .springframework .http .HttpStatus ;
3434import org .springframework .http .ResponseEntity ;
35+ import org .springframework .security .oauth2 .common .exceptions .UnsupportedGrantTypeException ;
3536import org .springframework .stereotype .Controller ;
3637import org .springframework .web .bind .annotation .RequestBody ;
3738import org .springframework .web .bind .annotation .RequestMapping ;
@@ -61,6 +62,13 @@ public class OauthGenericCallsController extends OauthControllerBase {
6162 @ RequestMapping (value = "/oauth/token" , consumes = MediaType .APPLICATION_FORM_URLENCODED , produces = MediaType .APPLICATION_JSON )
6263 public ResponseEntity <?> obtainOauth2TokenPost (HttpServletRequest request ) throws IOException , URISyntaxException , InterruptedException {
6364 String grantType = request .getParameter ("grant_type" );
65+ if (grantType == null ) {
66+ OAuthError error = new OAuthError ();
67+ error .setErrorDescription ("grant_type is missing" );
68+ error .setError (OAuthError .UNSUPPORTED_GRANT_TYPE );
69+ error .setResponseStatus (Response .Status .BAD_REQUEST );
70+ return ResponseEntity .status (HttpStatus .BAD_REQUEST ).body (error );
71+ }
6472 if (Features .OAUTH_AUTHORIZATION_CODE_EXCHANGE .isActive () && AuthCodeExchangeForwardUtil .AUTH_SERVER_ALLOWED_GRANT_TYPES .contains (grantType )) {
6573 String clientId = request .getParameter ("client_id" );
6674 String clientSecret = request .getParameter ("client_secret" );
@@ -73,26 +81,30 @@ public ResponseEntity<?> obtainOauth2TokenPost(HttpServletRequest request) throw
7381 String requestedTokenType = request .getParameter ("requested_token_type" );
7482
7583 Response response = null ;
76-
77- switch (grantType ) {
78- case OrcidOauth2Constants .GRANT_TYPE_AUTHORIZATION_CODE :
79- response = authCodeExchangeForwardUtil .forwardAuthorizationCodeExchangeRequest (clientId , clientSecret , redirectUri , code );
80- break ;
81- case OrcidOauth2Constants .GRANT_TYPE_REFRESH_TOKEN :
82- response = authCodeExchangeForwardUtil .forwardRefreshTokenRequest (clientId , clientSecret , refreshToken , scopeList );
83- break ;
84- case OrcidOauth2Constants .GRANT_TYPE_CLIENT_CREDENTIALS :
85- response = authCodeExchangeForwardUtil .forwardClientCredentialsRequest (clientId , clientSecret , scopeList );
86- break ;
87- case IETF_EXCHANGE_GRANT_TYPE :
88- response = authCodeExchangeForwardUtil .forwardTokenExchangeRequest (clientId , clientSecret , subjectToken , subjectTokenType , requestedTokenType , scopeList );
89- break ;
84+ try {
85+ switch (grantType ) {
86+ case OrcidOauth2Constants .GRANT_TYPE_AUTHORIZATION_CODE :
87+ response = authCodeExchangeForwardUtil .forwardAuthorizationCodeExchangeRequest (clientId , clientSecret , redirectUri , code );
88+ break ;
89+ case OrcidOauth2Constants .GRANT_TYPE_REFRESH_TOKEN :
90+ response = authCodeExchangeForwardUtil .forwardRefreshTokenRequest (clientId , clientSecret , refreshToken , scopeList );
91+ break ;
92+ case OrcidOauth2Constants .GRANT_TYPE_CLIENT_CREDENTIALS :
93+ response = authCodeExchangeForwardUtil .forwardClientCredentialsRequest (clientId , clientSecret , scopeList );
94+ break ;
95+ case IETF_EXCHANGE_GRANT_TYPE :
96+ response = authCodeExchangeForwardUtil .forwardTokenExchangeRequest (clientId , clientSecret , subjectToken , subjectTokenType , requestedTokenType , scopeList );
97+ break ;
98+ }
99+ HttpHeaders responseHeaders = new HttpHeaders ();
100+ responseHeaders .set (Features .OAUTH_AUTHORIZATION_CODE_EXCHANGE .name (),
101+ "ON" );
102+ return ResponseEntity .status (response .getStatus ()).headers (responseHeaders ).body (response .getEntity ());
103+ } catch (Exception e ) {
104+ OAuthError error = OAuthErrorUtils .getOAuthError (e );
105+ HttpStatus status = HttpStatus .valueOf (error .getResponseStatus ().getStatusCode ());
106+ return ResponseEntity .status (status ).body (error );
90107 }
91-
92- HttpHeaders responseHeaders = new HttpHeaders ();
93- responseHeaders .set (Features .OAUTH_AUTHORIZATION_CODE_EXCHANGE .name (),
94- "ON" );
95- return ResponseEntity .status (response .getStatus ()).headers (responseHeaders ).body (response .getEntity ());
96108 } else {
97109 String authorization = request .getHeader ("Authorization" );
98110 Enumeration <String > paramNames = request .getParameterNames ();
0 commit comments