diff --git a/dao/src/main/java/org/thingsboard/server/dao/oauth2/OAuth2ServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/oauth2/OAuth2ServiceImpl.java index e915dc8bb8..5ce6256816 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/oauth2/OAuth2ServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/oauth2/OAuth2ServiceImpl.java @@ -258,6 +258,7 @@ public class OAuth2ServiceImpl implements OAuth2Service { private void validate(OAuth2ClientsParams oAuth2ClientsParams) { validateDomainNames(oAuth2ClientsParams); + validateAdminSettingsIds(oAuth2ClientsParams); toClientRegistrationStream(oAuth2ClientsParams) .forEach(validator); @@ -281,6 +282,19 @@ public class OAuth2ServiceImpl implements OAuth2Service { } } + private void validateAdminSettingsIds(OAuth2ClientsParams oAuth2ClientsParams) { + List adminSettingsIds = oAuth2ClientsParams.getClientsDomainsParams().stream() + .map(OAuth2ClientsDomainParams::getAdminSettingsId) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + + boolean duplicateAdminSettingsIds = adminSettingsIds.stream() + .anyMatch(adminSettingsId -> Collections.frequency(adminSettingsIds, adminSettingsId) > 1); + if (duplicateAdminSettingsIds) { + throw new DataValidationException("All admin settings ids should be unique!"); + } + } + @Override public OAuth2ClientsParams getSystemOAuth2ClientsParams() { AdminSettings oauth2ClientsParamsSettings = adminSettingsService.findAdminSettingsByKey(TenantId.SYS_TENANT_ID, OAUTH2_CLIENT_REGISTRATIONS_PARAMS);