private Response process ( MultivaluedMap < String , String > parameters , String clientId , String clientSecret , String [ ] clientCertificatePath ) { // Extra properties to associate with an access token. Property [ ] properties = mSpi . getProperties ( ) ; String clientCertificate = null ; if ( clientCertificatePath != null && clientCertificatePath . length > 0 ) { // The first one is the client's certificate. clientCertificate = clientCertificatePath [ 0 ] ; // if we have more in the path, pass them along separately without the first one if ( clientCertificatePath . length > 1 ) { clientCertificatePath = Arrays . copyOfRange ( clientCertificatePath , 1 , clientCertificatePath . length ) ; } } // Call Authlete's /api/auth/token API. TokenResponse response = getApiCaller ( ) . callToken ( parameters , clientId , clientSecret , properties , clientCertificate , clientCertificatePath ) ; // 'action' in the response denotes the next action which // this service implementation should take. Action action = response . getAction ( ) ; // The content of the response to the client application. String content = response . getResponseContent ( ) ; // Dispatch according to the action. switch ( action ) { case INVALID_CLIENT : // 401 Unauthorized return ResponseUtil . unauthorized ( content , CHALLENGE ) ; case INTERNAL_SERVER_ERROR : // 500 Internal Server Error return ResponseUtil . internalServerError ( content ) ; case BAD_REQUEST : // 400 Bad Request return ResponseUtil . badRequest ( content ) ; case PASSWORD : // Process the token request whose flow is "Resource Owner Password Credentials". return handlePassword ( response ) ; case OK : // 200 OK return ResponseUtil . ok ( content ) ; default : // This never happens. throw getApiCaller ( ) . unknownAction ( "/api/auth/token" , action ) ; } }
Process the parameters of the token request .