Skip to content

Commit 7e1dfac

Browse files
committed
fix credentials cast + some better code
1 parent f8b19e5 commit 7e1dfac

File tree

4 files changed

+24
-12
lines changed

4 files changed

+24
-12
lines changed

src/Access/AccessTokenProcessor.cpp

+21-9
Original file line numberDiff line numberDiff line change
@@ -173,17 +173,22 @@ bool GoogleAccessTokenProcessor::resolveAndValidate(const TokenCredentials & cre
173173
{
174174
auto groups_response = getObjectFromURI(get_groups_uri, token);
175175

176-
if (!groups_response.contains("memberships")) {
176+
if (!groups_response.contains("memberships") || !groups_response["memberships"].is<picojson::array>())
177+
{
177178
LOG_TRACE(getLogger("AccessTokenProcessor"),
178179
"{}: Failed to get Google groups: invalid content in response from server", name);
179180
return true;
180181
}
181182

182-
picojson::array groups_array = groups_response["memberships"].get<picojson::array>();
183-
184-
/// TODO: check for invalid JSON, LOG something meaningful
185-
for (const auto & group: groups_array)
183+
for (const auto & group: groups_response["memberships"].get<picojson::array>())
186184
{
185+
if (!group.is<picojson::object>())
186+
{
187+
LOG_TRACE(getLogger("AccessTokenProcessor"),
188+
"{}: Failed to get Google groups: invalid content in response from server", name);
189+
continue;
190+
}
191+
187192
auto group_data = group.get<picojson::object>();
188193
String group_name = getValueByKey(group_data["groupKey"].get<picojson::object>(), "id");
189194
external_groups_names.insert(group_name);
@@ -267,22 +272,29 @@ bool AzureAccessTokenProcessor::resolveAndValidate(const TokenCredentials & cred
267272
{
268273
auto groups_response = getObjectFromURI(get_groups_uri, token);
269274

270-
if (!groups_response.contains("value")) {
275+
if (!groups_response.contains("value") || !groups_response["value"].is<picojson::array>())
276+
{
271277
LOG_TRACE(getLogger("AccessTokenProcessor"),
272278
"{}: Failed to get Azure groups: invalid content in response from server", name);
273279
return true;
274280
}
275281

276282
picojson::array groups_array = groups_response["value"].get<picojson::array>();
277283

278-
/// TODO: check for invalid JSON
279284
for (const auto & group: groups_array)
280285
{
286+
/// Got some invalid response. Ignore this, log this.
287+
if (!group.is<picojson::object >())
288+
{
289+
LOG_TRACE(getLogger("AccessTokenProcessor"),
290+
"{}: Failed to get Azure groups: invalid content in response from server", name);
291+
continue;
292+
}
293+
281294
auto group_data = group.get<picojson::object>();
282295
String group_name = getValueByKey(group_data, "id");
283296
external_groups_names.insert(group_name);
284-
LOG_TRACE(getLogger("AccessTokenProcessor"),
285-
"{}: User {}: new external group {}", name, credentials.getUserName(), group_name);
297+
LOG_TRACE(getLogger("AccessTokenProcessor"), "{}: User {}: new external group {}", name, credentials.getUserName(), group_name);
286298
}
287299
}
288300
catch (const Exception & e)

src/Access/ExternalAuthenticators.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -717,7 +717,7 @@ bool ExternalAuthenticators::checkAccessTokenCredentials(const TokenCredentials
717717
{
718718
cache_entry.expires_at = default_expiration_ts;
719719
}
720-
LOG_TRACE(getLogger("AccessTokenAuthentication"), "Cache entry for user {} added", cached_entry_iter->second.user_name);
720+
LOG_TRACE(getLogger("AccessTokenAuthentication"), "Cache entry for user {} added", cache_entry.user_name);
721721

722722
access_token_cache[credentials.getToken()] = cache_entry;
723723
LOG_DEBUG(getLogger("AccessTokenAuthentication"), "Authenticated user {} with access token by {}", credentials.getUserName(), it.first);

src/Access/IAccessStorage.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -536,7 +536,7 @@ std::optional<AuthResult> IAccessStorage::authenticateImpl(
536536
bool allow_no_password,
537537
bool allow_plaintext_password) const
538538
{
539-
if (!typeid_cast<const TokenCredentials &>(credentials).isReady())
539+
if (typeid_cast<const TokenCredentials *>(&credentials) && !typeid_cast<const TokenCredentials *>(&credentials)->isReady())
540540
throw Exception(ErrorCodes::AUTHENTICATION_FAILED, "Could not resolve username from token");
541541

542542
if (auto id = find<User>(credentials.getUserName()))

src/Access/TokenAccessStorage.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ String TokenAccessStorage::getStorageParamsJSON() const
173173
std::lock_guard lock(mutex);
174174
Poco::JSON::Object params_json;
175175

176-
params_json.set("processor", provider_name);
176+
params_json.set("provider", provider_name);
177177

178178
Poco::JSON::Array common_role_names_json;
179179
for (const auto & role : common_role_names)

0 commit comments

Comments
 (0)