Skip to content

Commit

Permalink
[C++] Support configuring optional scope field for OAuth2 authenticat…
Browse files Browse the repository at this point in the history
…ion (#12305)

It's a C++ client catchup for #11931.

- Add a `scope_` field to `ClientCredentialFlow` and load it from `ParamMap` object whose key is `scope`.
- Refactor `ClientCredentialFlow` to simplify code and make it testable:
  - Use only one constructor instead of two overloaded constructors that might look confused
  - Add a `generateJsonBody` public method for generating JSON body for post fields in `authenticate` so that it can be tested.
  - Add a `KeyFile` class like what Java client does to load client id and client secret from `ParamMap` or file.

- [x] Make sure that the change passes the CI checks.

This change added test `AuthPluginTest.testOauth2RequestBody` for the cases that scope exists or doesn't exist.

(cherry picked from commit 44dcc04)
  • Loading branch information
BewareMyPower authored and codelipenghui committed Oct 11, 2021
1 parent 12712b0 commit 8b55470
Showing 1 changed file with 8 additions and 0 deletions.
8 changes: 8 additions & 0 deletions pulsar-client-cpp/lib/auth/AuthOauth2.cc
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,14 @@ bool Oauth2CachedToken::isExpired() { return expiresAt_ < currentTimeMillis(); }
Oauth2Flow::Oauth2Flow() {}
Oauth2Flow::~Oauth2Flow() {}

// ClientCredentialFlow
static std::string readFromFile(const std::string& credentialsFilePath) {
std::ifstream input(credentialsFilePath);
std::stringstream buffer;
buffer << input.rdbuf();
return buffer.str();
}

KeyFile KeyFile::fromParamMap(ParamMap& params) {
const auto it = params.find("private_key");
if (it != params.cend()) {
Expand Down

0 comments on commit 8b55470

Please sign in to comment.