BewareMyPower opened a new pull request #12335:
URL: https://github.com/apache/pulsar/pull/12335


   Fixes #12324
   
   ### Motivation
   
   Currently if any error happened during OAuth 2.0 authentication in C++ 
client, a runtime error would be thrown and could only be caught when creating 
an `AuthOauth` object, but could not be caught in `Client`'s method like 
`createProducer`. It's not graceful. What's worse, there's no way for Python 
client that is a wrapper of C++ client to caught this exception.
   
   ### Modifications
   
   When `ClientCredentialFlow::authenticate` returns an invalid 
`Oauth2TokenResult`, catch the `runtime_error` thrown in `Oauth2CachedToken`'s 
constructor and returns `ResultAuthenticationError` as 
`AuthOauth2::getAuthData`'s returned value. Since `getAuthData` always returns 
`ResultOk` before this PR, the related docs are also modified.
   
   Then when a CONNECT or AUTH_RESPONSE command is created, expose the result 
of `getAuthData`. If it's not `ResultOk`, close the connection and complete the 
connection's future with the result. After that, the `Client`'s API will be 
completed with the result.
   
   In addition, this PR also makes the error code of libcurl human readable by 
configuring `CURLOPT_ERRORBUFFER`.
   
   ### Verifying this change
   
   - [ ] Make sure that the change passes the CI checks.
   
   This change added tests `AuthPluginTest.testOauth2Failure` to verify when 
OAuth 2.0 authentication failed, the `createProducer` would return 
`ResultAuthenticationError` without any exception thrown.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to