From e4777d9267ea5f7fe752176d54bf28880a7b2a08 Mon Sep 17 00:00:00 2001 From: vzikratyi Date: Mon, 6 Jul 2020 12:26:38 +0300 Subject: [PATCH] Fixed nullpointers, refactored, added test --- .../server/dao/oauth2/OAuth2ServiceImpl.java | 45 +++++++++++++------ .../dao/service/BaseOAuth2ServiceTest.java | 6 +++ 2 files changed, 38 insertions(+), 13 deletions(-) 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 0e9c7f8f7c..f7485461f7 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 @@ -403,16 +403,22 @@ public class OAuth2ServiceImpl implements OAuth2Service { } private OAuth2ClientsDomainParams getMergedOAuth2ClientsParams(String domainName) { - AdminSettings oauth2ClientsSettings = adminSettingsService.findAdminSettingsByKey(TenantId.SYS_TENANT_ID, constructAdminSettingsDomainKey(domainName)); - OAuth2ClientsDomainParams result; + OAuth2ClientsDomainParams result = OAuth2ClientsDomainParams.builder() + .domainName(domainName) + .clientRegistrations(new ArrayList<>()) + .build(); OAuth2ClientsParams systemOAuth2ClientsParams = getSystemOAuth2ClientsParams(); - OAuth2ClientsDomainParams systemOAuth2ClientsDomainParams = systemOAuth2ClientsParams != null ? + OAuth2ClientsDomainParams systemOAuth2ClientsDomainParams = systemOAuth2ClientsParams != null && systemOAuth2ClientsParams.getClientsDomainsParams() != null ? systemOAuth2ClientsParams.getClientsDomainsParams().stream() .filter(oAuth2ClientsDomainParams -> domainName.equals(oAuth2ClientsDomainParams.getDomainName())) .findFirst() .orElse(null) : null; + + result = mergeDomainParams(result, systemOAuth2ClientsDomainParams); + + AdminSettings oauth2ClientsSettings = adminSettingsService.findAdminSettingsByKey(TenantId.SYS_TENANT_ID, constructAdminSettingsDomainKey(domainName)); if (oauth2ClientsSettings != null) { String strEntityType = oauth2ClientsSettings.getJsonValue().get("entityType").asText(); String strEntityId = oauth2ClientsSettings.getJsonValue().get("entityId").asText(); @@ -422,20 +428,33 @@ public class OAuth2ServiceImpl implements OAuth2Service { throw new IllegalStateException("Only tenant can configure OAuth2 for certain domain!"); } TenantId tenantId = (TenantId) entityId; - result = getTenantOAuth2ClientsParams(tenantId).getClientsDomainsParams().get(0); - if (systemOAuth2ClientsDomainParams != null) { - ArrayList tenantClientRegistrations = new ArrayList<>(result.getClientRegistrations()); - tenantClientRegistrations.addAll(systemOAuth2ClientsDomainParams.getClientRegistrations()); - result = result.toBuilder() - .clientRegistrations(tenantClientRegistrations) - .build(); - } - } else { - result = systemOAuth2ClientsDomainParams; + OAuth2ClientsParams tenantOAuth2ClientsParams = getTenantOAuth2ClientsParams(tenantId); + OAuth2ClientsDomainParams tenantDomainsParams = tenantOAuth2ClientsParams != null && tenantOAuth2ClientsParams.getClientsDomainsParams() != null ? + tenantOAuth2ClientsParams.getClientsDomainsParams().stream().findFirst().orElse(null) : null; + result = mergeDomainParams(result, tenantDomainsParams); } return result; } + private OAuth2ClientsDomainParams mergeDomainParams(OAuth2ClientsDomainParams sourceParams, OAuth2ClientsDomainParams newParams){ + if (newParams == null) return sourceParams; + + OAuth2ClientsDomainParams.OAuth2ClientsDomainParamsBuilder mergedParamsBuilder = sourceParams.toBuilder(); + + if (newParams.getClientRegistrations() != null){ + List mergedClientRegistrations = sourceParams.getClientRegistrations() != null ? + sourceParams.getClientRegistrations() : new ArrayList<>(); + mergedClientRegistrations.addAll(newParams.getClientRegistrations()); + mergedParamsBuilder.clientRegistrations(mergedClientRegistrations); + } + + if (newParams.getAdminSettingsId() != null){ + mergedParamsBuilder.adminSettingsId(newParams.getAdminSettingsId()); + } + + return mergedParamsBuilder.build(); + } + private OAuth2ClientsParams constructOAuth2ClientsParams(String json) { OAuth2ClientsParams result = null; if (!StringUtils.isEmpty(json)) { diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/BaseOAuth2ServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/BaseOAuth2ServiceTest.java index 09fec5af4a..b5e8280eee 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/BaseOAuth2ServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/BaseOAuth2ServiceTest.java @@ -253,6 +253,12 @@ public class BaseOAuth2ServiceTest extends AbstractServiceTest { Assert.assertEquals(actualLabels, foundLabels); } + @Test + public void testGetEmptyOAuth2Clients() { + List oAuth2Clients = oAuth2Service.getOAuth2Clients("random-domain"); + Assert.assertTrue(oAuth2Clients.isEmpty()); + } + @Test public void testGetAllOAuth2ClientsParams() { OAuth2ClientsParams tenantClientsParams = validClientsParams();