Browse Source

Refactored OAuth2Service

pull/3557/head
vzikratyi 6 years ago
parent
commit
8590bcb709
  1. 64
      dao/src/main/java/org/thingsboard/server/dao/oauth2/OAuth2ServiceImpl.java

64
dao/src/main/java/org/thingsboard/server/dao/oauth2/OAuth2ServiceImpl.java

@ -114,7 +114,6 @@ public class OAuth2ServiceImpl implements OAuth2Service {
validate(oAuth2ClientsParams); validate(oAuth2ClientsParams);
validateRegistrationIdUniqueness(oAuth2ClientsParams, TenantId.SYS_TENANT_ID); validateRegistrationIdUniqueness(oAuth2ClientsParams, TenantId.SYS_TENANT_ID);
clientRegistrationSaveLock.lock(); clientRegistrationSaveLock.lock();
try { try {
validateRegistrationIdUniqueness(oAuth2ClientsParams, TenantId.SYS_TENANT_ID); validateRegistrationIdUniqueness(oAuth2ClientsParams, TenantId.SYS_TENANT_ID);
@ -190,8 +189,8 @@ public class OAuth2ServiceImpl implements OAuth2Service {
); );
if (existentOAuth2ClientsSettingsById == null) { if (existentOAuth2ClientsSettingsById == null) {
log.error("Admin setting ID is already set in login white labeling object, but doesn't exist in the database"); log.error("Admin setting ID is already set in OAuth2 Client Params object, but doesn't exist in the database");
throw new IllegalStateException("Admin setting ID is already set in login white labeling object, but doesn't exist in the database"); throw new IllegalStateException("Admin setting ID is already set in OAuth2 Client Params object, but doesn't exist in the database");
} }
if (!existentOAuth2ClientsSettingsById.getKey().equals(selectedDomainSettingsKey)) { if (!existentOAuth2ClientsSettingsById.getKey().equals(selectedDomainSettingsKey)) {
@ -234,28 +233,27 @@ public class OAuth2ServiceImpl implements OAuth2Service {
} }
private void validateRegistrationIdUniqueness(OAuth2ClientsParams inputOAuth2ClientsParams, TenantId tenantId) { private void validateRegistrationIdUniqueness(OAuth2ClientsParams inputOAuth2ClientsParams, TenantId tenantId) {
long distinctRegistrationIds = toClientRegistrationStream(inputOAuth2ClientsParams) List<String> registrationIds = toClientRegistrationStream(inputOAuth2ClientsParams)
.map(OAuth2ClientRegistration::getRegistrationId) .map(OAuth2ClientRegistration::getRegistrationId)
.distinct() .collect(Collectors.toList());
.count();
long actualRegistrationIds = toClientRegistrationStream(inputOAuth2ClientsParams).count(); boolean regIdDuplicates = registrationIds.stream()
if (distinctRegistrationIds != actualRegistrationIds) { .anyMatch(registrationId -> Collections.frequency(registrationIds, registrationId) > 1);
if (regIdDuplicates) {
throw new DataValidationException("All registration IDs should be unique!"); throw new DataValidationException("All registration IDs should be unique!");
} }
toClientRegistrationStream(inputOAuth2ClientsParams) getAllOAuth2ClientsParams().forEach((paramsTenantId, oAuth2ClientsParams) -> {
.map(OAuth2ClientRegistration::getRegistrationId) if (tenantId.equals(paramsTenantId)) return;
.forEach(registrationId -> { Set<String> duplicatedRegistrationIds = toClientRegistrationStream(oAuth2ClientsParams)
getAllOAuth2ClientsParams().forEach((paramsTenantId, oAuth2ClientsParams) -> { .map(OAuth2ClientRegistration::getRegistrationId)
boolean registrationExists = toClientRegistrationStream(oAuth2ClientsParams) .filter(registrationIds::contains)
.map(OAuth2ClientRegistration::getRegistrationId) .collect(Collectors.toSet());
.anyMatch(registrationId::equals); if (!duplicatedRegistrationIds.isEmpty()) {
if (registrationExists && !tenantId.equals(paramsTenantId)) { log.error("RegistrationIds [{}] are already registered in the system!", duplicatedRegistrationIds);
log.error("Current registrationId [{}] already registered in the system!", registrationId); throw new IncorrectParameterException("RegistrationIds [" + duplicatedRegistrationIds + "] are already registered in the system!");
throw new IncorrectParameterException("Current registrationId [" + registrationId + "] already registered in the system!"); }
} });
});
});
} }
private void validate(OAuth2ClientsParams oAuth2ClientsParams) { private void validate(OAuth2ClientsParams oAuth2ClientsParams) {
@ -266,19 +264,19 @@ public class OAuth2ServiceImpl implements OAuth2Service {
} }
private void validateDomainNames(OAuth2ClientsParams oAuth2ClientsParams) { private void validateDomainNames(OAuth2ClientsParams oAuth2ClientsParams) {
oAuth2ClientsParams.getClientsDomainsParams() List<String> domainNames = oAuth2ClientsParams.getClientsDomainsParams().stream()
.forEach(oAuth2ClientsDomainParams -> {
if (StringUtils.isEmpty(oAuth2ClientsDomainParams.getDomainName())) {
throw new DataValidationException("Domain name should be specified!");
}
});
long distinctDomainNames = oAuth2ClientsParams.getClientsDomainsParams().stream()
.map(OAuth2ClientsDomainParams::getDomainName) .map(OAuth2ClientsDomainParams::getDomainName)
.distinct() .collect(Collectors.toList());
.count();
long actualDomainNames = oAuth2ClientsParams.getClientsDomainsParams().size(); domainNames.forEach(domainName -> {
if (distinctDomainNames != actualDomainNames) { if (StringUtils.isEmpty(domainName)) {
throw new DataValidationException("Domain name should be specified!");
}
});
boolean duplicateDomainNames = domainNames.stream()
.anyMatch(domainName -> Collections.frequency(domainNames, domainName) > 1);
if (duplicateDomainNames) {
throw new DataValidationException("All domain names should be unique!"); throw new DataValidationException("All domain names should be unique!");
} }
} }

Loading…
Cancel
Save