diff --git a/application/src/main/java/org/thingsboard/server/controller/AuthController.java b/application/src/main/java/org/thingsboard/server/controller/AuthController.java index 9f6c6f3b44..2cf9e5d86b 100644 --- a/application/src/main/java/org/thingsboard/server/controller/AuthController.java +++ b/application/src/main/java/org/thingsboard/server/controller/AuthController.java @@ -337,11 +337,12 @@ public class AuthController extends BaseController { } } + // TODO ask why POST @RequestMapping(value = "/noauth/oauth2Clients", method = RequestMethod.POST) @ResponseBody - public List getOAuth2Clients() throws ThingsboardException { + public List getOAuth2Clients(HttpServletRequest request) throws ThingsboardException { try { - return oauth2Service.getOAuth2Clients(); + return oauth2Service.getOAuth2Clients(request.getServerName()); } catch (Exception e) { throw handleException(e); } diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/oauth2/OAuth2Service.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/oauth2/OAuth2Service.java index 1eef5fb948..81a1abbc47 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/oauth2/OAuth2Service.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/oauth2/OAuth2Service.java @@ -26,25 +26,18 @@ import java.util.List; public interface OAuth2Service { OAuth2ClientRegistration getClientRegistration(String registrationId); - List getOAuth2Clients(); + List getOAuth2Clients(String domainName); List getSystemOAuth2ClientRegistrations(TenantId tenantId); List getTenantOAuth2ClientRegistrations(TenantId tenantId); - List getCustomerOAuth2ClientRegistrations(TenantId tenantId, CustomerId customerId); - OAuth2ClientRegistration saveSystemOAuth2ClientRegistration(OAuth2ClientRegistration clientRegistration); - OAuth2ClientRegistration saveTenantOAuth2ClientRegistration(TenantId tenantId, OAuth2ClientRegistration clientRegistration); - - OAuth2ClientRegistration saveCustomerOAuth2ClientRegistration(TenantId tenantId, CustomerId customerId, OAuth2ClientRegistration clientRegistration); - - void deleteDomainOAuth2ClientRegistrationByEntityId(TenantId tenantId, EntityId entityId); - - boolean isOAuth2ClientRegistrationAllowed(TenantId tenantId, EntityId entityId); + OAuth2ClientRegistration saveTenantOAuth2ClientRegistration(TenantId tenantId, String domainName, OAuth2ClientRegistration clientRegistration); - boolean isCustomerOAuth2ClientRegistrationAllowed(TenantId tenantId); + void deleteDomainOAuth2ClientRegistrationByTenant(TenantId tenantId); + boolean isOAuth2ClientRegistrationAllowed(TenantId tenantId); } diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/oauth2/OAuth2ClientRegistration.java b/common/data/src/main/java/org/thingsboard/server/common/data/oauth2/OAuth2ClientRegistration.java index 84c95df84c..a9fe5ed060 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/oauth2/OAuth2ClientRegistration.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/oauth2/OAuth2ClientRegistration.java @@ -4,10 +4,13 @@ import lombok.*; import org.thingsboard.server.common.data.BaseData; import org.thingsboard.server.common.data.id.OAuth2IntegrationId; -@EqualsAndHashCode(callSuper = true) +@EqualsAndHashCode @Data @ToString(exclude = {"clientSecret"}) -public class OAuth2ClientRegistration extends BaseData { +@Builder(toBuilder = true) +@NoArgsConstructor +@AllArgsConstructor +public class OAuth2ClientRegistration { private String registrationId; private OAuth2MapperConfig mapperConfig; @@ -25,33 +28,4 @@ public class OAuth2ClientRegistration extends BaseData { private String clientName; private String loginButtonLabel; private String loginButtonIcon; - - public OAuth2ClientRegistration() { - super(); - } - - public OAuth2ClientRegistration(OAuth2IntegrationId id) { - super(id); - } - - @Builder(toBuilder = true) - public OAuth2ClientRegistration(OAuth2IntegrationId id, String registrationId, String clientId, String clientSecret, String authorizationUri, String tokenUri, String redirectUriTemplate, String scope, String authorizationGrantType, String userInfoUri, String userNameAttributeName, String jwkSetUri, String clientAuthenticationMethod, String clientName, String loginButtonLabel, String loginButtonIcon, OAuth2MapperConfig mapperConfig) { - super(id); - this.registrationId = registrationId; - this.clientId = clientId; - this.clientSecret = clientSecret; - this.authorizationUri = authorizationUri; - this.tokenUri = tokenUri; - this.redirectUriTemplate = redirectUriTemplate; - this.scope = scope; - this.authorizationGrantType = authorizationGrantType; - this.userInfoUri = userInfoUri; - this.userNameAttributeName = userNameAttributeName; - this.jwkSetUri = jwkSetUri; - this.clientAuthenticationMethod = clientAuthenticationMethod; - this.clientName = clientName; - this.loginButtonLabel = loginButtonLabel; - this.loginButtonIcon = loginButtonIcon; - this.mapperConfig = mapperConfig; - } } diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/oauth2/OAuth2ClientsParams.java b/common/data/src/main/java/org/thingsboard/server/common/data/oauth2/OAuth2ClientsParams.java new file mode 100644 index 0000000000..1adcd51f3b --- /dev/null +++ b/common/data/src/main/java/org/thingsboard/server/common/data/oauth2/OAuth2ClientsParams.java @@ -0,0 +1,18 @@ +package org.thingsboard.server.common.data.oauth2; + +import lombok.*; + +import java.util.List; + +@EqualsAndHashCode +@Data +@ToString +@Builder(toBuilder = true) +@NoArgsConstructor +@AllArgsConstructor +public class OAuth2ClientsParams { + private String domainName; + private String adminSettingsId; + + private List clientRegistrations; +} \ No newline at end of file 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 18a390e783..6ce4ae1599 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 @@ -17,12 +17,13 @@ package org.thingsboard.server.dao.oauth2; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; import org.thingsboard.server.common.data.AdminSettings; +import org.thingsboard.server.common.data.id.AdminSettingsId; import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.TenantId; @@ -32,8 +33,7 @@ import org.thingsboard.server.dao.settings.AdminSettingsService; import java.util.Collections; import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.Stream; +import java.util.UUID; @Slf4j @Service @@ -42,6 +42,7 @@ public class OAuth2ServiceImpl implements OAuth2Service { private static final ObjectMapper mapper = new ObjectMapper(); private static final String OAUTH2_CLIENT_REGISTRATIONS_PARAMS = "oauth2ClientRegistrationsParams"; + private static final String OAUTH2_CLIENT_REGISTRATIONS_DOMAIN_NAME_PREFIX = "oauth2ClientRegistrationsDomainNamePrefix"; private static final String OAUTH2_AUTHORIZATION_PATH_TEMPLATE = "/oauth2/authorization/%s"; @@ -49,7 +50,7 @@ public class OAuth2ServiceImpl implements OAuth2Service { private AdminSettingsService adminSettingsService; @Override - public List getOAuth2Clients() { + public List getOAuth2Clients(String domainName) { return Collections.emptyList(); } @@ -63,11 +64,6 @@ public class OAuth2ServiceImpl implements OAuth2Service { return null; } - @Override - public List getCustomerOAuth2ClientRegistrations(TenantId tenantId, CustomerId customerId) { - return null; - } - @Override public OAuth2ClientRegistration saveSystemOAuth2ClientRegistration(OAuth2ClientRegistration clientRegistration) { // TODO check by registration ID in entities @@ -93,28 +89,19 @@ public class OAuth2ServiceImpl implements OAuth2Service { } @Override - public OAuth2ClientRegistration saveTenantOAuth2ClientRegistration(TenantId tenantId, OAuth2ClientRegistration clientRegistration) { + public OAuth2ClientRegistration saveTenantOAuth2ClientRegistration(TenantId tenantId, String domainName, OAuth2ClientRegistration clientRegistration) { + // TODO ask what if tenant saves config for several different domain names, do we need to check it // TODO check by registration ID in system return null; } @Override - public OAuth2ClientRegistration saveCustomerOAuth2ClientRegistration(TenantId tenantId, CustomerId customerId, OAuth2ClientRegistration clientRegistration) { - return null; - } - - @Override - public void deleteDomainOAuth2ClientRegistrationByEntityId(TenantId tenantId, EntityId entityId) { + public void deleteDomainOAuth2ClientRegistrationByTenant(TenantId tenantId) { } @Override - public boolean isOAuth2ClientRegistrationAllowed(TenantId tenantId, EntityId entityId) { - return false; - } - - @Override - public boolean isCustomerOAuth2ClientRegistrationAllowed(TenantId tenantId) { + public boolean isOAuth2ClientRegistrationAllowed(TenantId tenantId) { return false; } @@ -122,4 +109,14 @@ public class OAuth2ServiceImpl implements OAuth2Service { public OAuth2ClientRegistration getClientRegistration(String registrationId) { return null; } + + private String constructClientRegistrationsKey(String domainName) { + String clientRegistrationsKey; + if (StringUtils.isEmpty(domainName)) { + clientRegistrationsKey = OAUTH2_CLIENT_REGISTRATIONS_PARAMS; + } else { + clientRegistrationsKey = OAUTH2_CLIENT_REGISTRATIONS_DOMAIN_NAME_PREFIX + "_" + domainName; + } + return clientRegistrationsKey; + } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantServiceImpl.java index 33407db373..a6cfdee8c2 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantServiceImpl.java @@ -33,6 +33,7 @@ import org.thingsboard.server.dao.device.DeviceService; import org.thingsboard.server.dao.entity.AbstractEntityService; import org.thingsboard.server.dao.entityview.EntityViewService; import org.thingsboard.server.dao.exception.DataValidationException; +import org.thingsboard.server.dao.oauth2.OAuth2Service; import org.thingsboard.server.dao.rule.RuleChainService; import org.thingsboard.server.dao.service.DataValidator; import org.thingsboard.server.dao.service.PaginatedRemover; @@ -78,6 +79,9 @@ public class TenantServiceImpl extends AbstractEntityService implements TenantSe @Autowired private RuleChainService ruleChainService; + @Autowired + private OAuth2Service oAuth2Service; + @Override public Tenant findTenantById(TenantId tenantId) { log.trace("Executing findTenantById [{}]", tenantId); @@ -104,6 +108,7 @@ public class TenantServiceImpl extends AbstractEntityService implements TenantSe public void deleteTenant(TenantId tenantId) { log.trace("Executing deleteTenant [{}]", tenantId); Validator.validateId(tenantId, INCORRECT_TENANT_ID + tenantId); + oAuth2Service.deleteDomainOAuth2ClientRegistrationByTenant(tenantId); customerService.deleteCustomersByTenantId(tenantId); widgetsBundleService.deleteWidgetsBundlesByTenantId(tenantId); dashboardService.deleteDashboardsByTenantId(tenantId);