From 14939c27e61a17480cb46688233cd695a55aa492 Mon Sep 17 00:00:00 2001 From: vzikratyi Date: Tue, 15 Sep 2020 17:31:55 +0300 Subject: [PATCH] Added 'deleteByDomain' for OAuth2Service --- .../server/controller/OAuth2Controller.java | 24 +++++++++++++++++++ .../server/dao/oauth2/OAuth2Service.java | 2 ++ .../oauth2/OAuth2ClientRegistrationDao.java | 2 ++ .../server/dao/oauth2/OAuth2ServiceImpl.java | 12 +++++++++- .../JpaOAuth2ClientRegistrationDao.java | 5 ++++ .../OAuth2ClientRegistrationRepository.java | 2 ++ .../dao/service/BaseOAuth2ServiceTest.java | 14 +++++++++++ 7 files changed, 60 insertions(+), 1 deletion(-) diff --git a/application/src/main/java/org/thingsboard/server/controller/OAuth2Controller.java b/application/src/main/java/org/thingsboard/server/controller/OAuth2Controller.java index da510fe84e..bf010ce383 100644 --- a/application/src/main/java/org/thingsboard/server/controller/OAuth2Controller.java +++ b/application/src/main/java/org/thingsboard/server/controller/OAuth2Controller.java @@ -47,6 +47,7 @@ import java.util.List; @Slf4j public class OAuth2Controller extends BaseController { private static final String CLIENT_REGISTRATION_ID = "clientRegistrationId"; + private static final String DOMAIN = "domain"; private static final String CLIENT_REGISTRATION_TEMPLATE_ID = "clientRegistrationTemplateId"; @RequestMapping(value = "/noauth/oauth2Clients", method = RequestMethod.POST) @@ -131,6 +132,29 @@ public class OAuth2Controller extends BaseController { } } + + @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')") + @RequestMapping(value = "/oauth2/config/domain/{domain}", method = RequestMethod.DELETE) + @ResponseStatus(value = HttpStatus.OK) + public void deleteClientRegistrationForDomain(@PathVariable(DOMAIN) String domain) throws ThingsboardException { + checkParameter(DOMAIN, domain); + try { + oAuth2Service.deleteClientRegistrationsByDomain(getCurrentUser().getTenantId(), domain); + + logEntityAction(emptyId(EntityType.OAUTH2_CLIENT_REGISTRATION), null, + null, + ActionType.DELETED, null, domain); + + } catch (Exception e) { + logEntityAction(emptyId(EntityType.OAUTH2_CLIENT_REGISTRATION), + null, + null, + ActionType.DELETED, e, domain); + + throw handleException(e); + } + } + @PreAuthorize("hasAnyAuthority('SYS_ADMIN')") @RequestMapping(value = "/oauth2/config/template/{clientRegistrationTemplateId}", method = RequestMethod.DELETE) @ResponseStatus(value = HttpStatus.OK) 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 c8da37e9e5..5ad706cf77 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 @@ -38,5 +38,7 @@ public interface OAuth2Service { void deleteClientRegistrationById(TenantId tenantId, OAuth2ClientRegistrationId id); + void deleteClientRegistrationsByDomain(TenantId tenantId, String domain); + boolean isOAuth2ClientRegistrationAllowed(TenantId tenantId); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/oauth2/OAuth2ClientRegistrationDao.java b/dao/src/main/java/org/thingsboard/server/dao/oauth2/OAuth2ClientRegistrationDao.java index d5cded18d3..8152e9a8db 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/oauth2/OAuth2ClientRegistrationDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/oauth2/OAuth2ClientRegistrationDao.java @@ -28,5 +28,7 @@ public interface OAuth2ClientRegistrationDao extends Dao findByDomainName(String domainName); + int removeByTenantIdAndDomainName(UUID tenantId, String domainName); + int removeByTenantId(UUID tenantId); } 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 d6a22b3c6b..7522008c06 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 @@ -100,11 +100,21 @@ public class OAuth2ServiceImpl extends AbstractEntityService implements OAuth2Se @Override public void deleteClientRegistrationById(TenantId tenantId, OAuth2ClientRegistrationId id) { - log.trace("Executing deleteClientRegistrationById [{}]", id); + log.trace("Executing deleteClientRegistrationById [{}], [{}]", tenantId, id); + validateId(tenantId, INCORRECT_TENANT_ID + tenantId); validateId(id, INCORRECT_CLIENT_REGISTRATION_ID + id); clientRegistrationDao.removeById(tenantId, id.getId()); } + @Override + @Transactional + public void deleteClientRegistrationsByDomain(TenantId tenantId, String domain) { + log.trace("Executing deleteClientRegistrationsByDomain [{}], [{}]", tenantId, domain); + validateId(tenantId, INCORRECT_TENANT_ID + tenantId); + validateString(domain, INCORRECT_DOMAIN_NAME + domain); + clientRegistrationDao.removeByTenantIdAndDomainName(tenantId.getId(), domain); + } + @Override public boolean isOAuth2ClientRegistrationAllowed(TenantId tenantId) { log.trace("Executing isOAuth2ClientRegistrationAllowed [{}]", tenantId); diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/oauth2/JpaOAuth2ClientRegistrationDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/oauth2/JpaOAuth2ClientRegistrationDao.java index ef10245e19..d5e17ac635 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/oauth2/JpaOAuth2ClientRegistrationDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/oauth2/JpaOAuth2ClientRegistrationDao.java @@ -67,6 +67,11 @@ public class JpaOAuth2ClientRegistrationDao extends JpaAbstractDao findAllByDomainName(String domainName); + int deleteByTenantIdAndDomainName(UUID tenantId, String domainName); + int deleteByTenantId(UUID tenantId); } 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 d9165b08b8..34b10c2af9 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 @@ -215,6 +215,20 @@ public class BaseOAuth2ServiceTest extends AbstractServiceTest { Assert.assertEquals(0, oAuth2Service.findClientRegistrationsByTenantId(tenantId).size()); } + @Test + public void testDeleteTenantDomainOAuth2ClientRegistrations() { + oAuth2Service.saveClientRegistration(validClientRegistration(tenantId, "domain1")); + oAuth2Service.saveClientRegistration(validClientRegistration(tenantId, "domain1")); + oAuth2Service.saveClientRegistration(validClientRegistration(tenantId, "domain2")); + oAuth2Service.saveClientRegistration(validClientRegistration(TenantId.SYS_TENANT_ID, "domain2")); + Assert.assertEquals(4, oAuth2Service.findAllClientRegistrations().size()); + Assert.assertEquals(3, oAuth2Service.findClientRegistrationsByTenantId(tenantId).size()); + + oAuth2Service.deleteClientRegistrationsByDomain(tenantId, "domain1"); + Assert.assertEquals(2, oAuth2Service.findAllClientRegistrations().size()); + Assert.assertEquals(1, oAuth2Service.findClientRegistrationsByTenantId(tenantId).size()); + } + private void updateTenantAllowOAuth2Setting(Boolean allowOAuth2) throws IOException { Tenant tenant = tenantService.findTenantById(tenantId); if (allowOAuth2 == null) {