From b9b8b49aefe122f6cb6370d5505a3346ec165eff Mon Sep 17 00:00:00 2001 From: vzikratyi Date: Tue, 30 Jun 2020 15:42:37 +0300 Subject: [PATCH] Get OAuth2Params from DB (not cache) --- .../server/dao/oauth2/OAuth2ServiceImpl.java | 38 ++++++++++++++++--- 1 file changed, 32 insertions(+), 6 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 659601deaa..ea8cd21557 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 @@ -297,10 +297,6 @@ public class OAuth2ServiceImpl implements OAuth2Service { @Override public OAuth2ClientsParams getSystemOAuth2ClientsParams() { - return clientsParams.get(TenantId.SYS_TENANT_ID); - } - - private OAuth2ClientsParams getSystemOAuth2ClientsParamsFromDb() { AdminSettings oauth2ClientsParamsSettings = adminSettingsService.findAdminSettingsByKey(TenantId.SYS_TENANT_ID, OAUTH2_CLIENT_REGISTRATIONS_PARAMS); String json = null; if (oauth2ClientsParamsSettings != null) { @@ -311,13 +307,24 @@ public class OAuth2ServiceImpl implements OAuth2Service { @Override public OAuth2ClientsParams getTenantOAuth2ClientsParams(TenantId tenantId) { - return clientsParams.get(tenantId); + ListenableFuture jsonFuture; + if (isOAuth2ClientRegistrationAllowed(tenantId)) { + jsonFuture = getOAuth2ClientsParamsAttribute(tenantId); + } else { + jsonFuture = Futures.immediateFuture(""); + } + try { + return Futures.transform(jsonFuture, this::constructOAuth2ClientsParams, MoreExecutors.directExecutor()).get(); + } catch (InterruptedException | ExecutionException e) { + log.error("Failed to read OAuth2 Clients Params from attributes!", e); + throw new RuntimeException("Failed to read OAuth2 Clients Params from attributes!", e); + } } // TODO this is just for test, maybe there's a better way to test it without exporting to interface @Override public Map getAllOAuth2ClientsParams() { - OAuth2ClientsParams systemOAuth2ClientsParams = getSystemOAuth2ClientsParamsFromDb(); + OAuth2ClientsParams systemOAuth2ClientsParams = getSystemOAuth2ClientsParams(); ListenableFuture> jsonFuture = getAllOAuth2ClientsParamsAttribute(); try { return Futures.transform(jsonFuture, @@ -370,6 +377,25 @@ public class OAuth2ServiceImpl implements OAuth2Service { } } + private ListenableFuture getOAuth2ClientsParamsAttribute(TenantId tenantId) { + ListenableFuture> attributeKvEntriesFuture; + try { + attributeKvEntriesFuture = attributesService.find(tenantId, tenantId, DataConstants.SERVER_SCOPE, + Collections.singletonList(OAUTH2_CLIENT_REGISTRATIONS_PARAMS)); + } catch (Exception e) { + log.error("Unable to read OAuth2 Clients Params from attributes!", e); + throw new IncorrectParameterException("Unable to read OAuth2 Clients Params from attributes!"); + } + return Futures.transform(attributeKvEntriesFuture, attributeKvEntries -> { + if (attributeKvEntries != null && !attributeKvEntries.isEmpty()) { + AttributeKvEntry kvEntry = attributeKvEntries.get(0); + return kvEntry.getValueAsString(); + } else { + return ""; + } + }, MoreExecutors.directExecutor()); + } + // TODO maybe it's better to load all tenants and get attribute for each one private ListenableFuture> getAllOAuth2ClientsParamsAttribute() { ListenableFuture> entityAttributeKvEntriesFuture;