diff --git a/application/src/main/data/upgrade/3.1.0/schema_update.sql b/application/src/main/data/upgrade/3.1.0/schema_update.sql index 06daa9541c..76c3efcdfa 100644 --- a/application/src/main/data/upgrade/3.1.0/schema_update.sql +++ b/application/src/main/data/upgrade/3.1.0/schema_update.sql @@ -21,7 +21,6 @@ CREATE TABLE IF NOT EXISTS oauth2_client_registration ( created_time bigint NOT NULL, additional_info varchar, tenant_id uuid, - registration_id varchar(255), domain_name varchar(255), client_id varchar(255), client_secret varchar(255), @@ -48,6 +47,5 @@ CREATE TABLE IF NOT EXISTS oauth2_client_registration ( basic_always_full_screen boolean, custom_url varchar(255), custom_username varchar(255), - custom_password varchar(255), - CONSTRAINT oauth2_registration_id_unq_key UNIQUE (registration_id) + custom_password varchar(255) ); \ No newline at end of file diff --git a/application/src/main/java/org/thingsboard/server/controller/BaseController.java b/application/src/main/java/org/thingsboard/server/controller/BaseController.java index 3757223fda..1a2a54b1d1 100644 --- a/application/src/main/java/org/thingsboard/server/controller/BaseController.java +++ b/application/src/main/java/org/thingsboard/server/controller/BaseController.java @@ -540,7 +540,7 @@ public abstract class BaseController { OAuth2ClientRegistration checkOAuth2ClientRegistrationId(OAuth2ClientRegistrationId clientRegistrationId, Operation operation) throws ThingsboardException { try { validateId(clientRegistrationId, "Incorrect oAuth2ClientRegistrationId " + clientRegistrationId); - OAuth2ClientRegistration clientRegistration = oAuth2Service.findClientRegistrationById(getCurrentUser().getTenantId(), clientRegistrationId); + OAuth2ClientRegistration clientRegistration = oAuth2Service.findClientRegistration(clientRegistrationId.getId()); checkNotNull(clientRegistration); accessControlService.checkPermission(getCurrentUser(), Resource.OAUTH2_CONFIGURATION, operation, clientRegistrationId, clientRegistration); return clientRegistration; diff --git a/application/src/main/java/org/thingsboard/server/service/security/auth/oauth2/Oauth2AuthenticationSuccessHandler.java b/application/src/main/java/org/thingsboard/server/service/security/auth/oauth2/Oauth2AuthenticationSuccessHandler.java index e3d21b448d..9274e08939 100644 --- a/application/src/main/java/org/thingsboard/server/service/security/auth/oauth2/Oauth2AuthenticationSuccessHandler.java +++ b/application/src/main/java/org/thingsboard/server/service/security/auth/oauth2/Oauth2AuthenticationSuccessHandler.java @@ -36,6 +36,7 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; +import java.util.UUID; @Component(value = "oauth2AuthenticationSuccessHandler") public class Oauth2AuthenticationSuccessHandler extends SimpleUrlAuthenticationSuccessHandler { @@ -65,7 +66,7 @@ public class Oauth2AuthenticationSuccessHandler extends SimpleUrlAuthenticationS try { OAuth2AuthenticationToken token = (OAuth2AuthenticationToken) authentication; - OAuth2ClientRegistration clientRegistration = oAuth2Service.findClientRegistrationByRegistrationId(token.getAuthorizedClientRegistrationId()); + OAuth2ClientRegistration clientRegistration = oAuth2Service.findClientRegistration(UUID.fromString(token.getAuthorizedClientRegistrationId())); OAuth2ClientMapper mapper = oauth2ClientMapperProvider.getOAuth2ClientMapperByType(clientRegistration.getMapperConfig().getType()); SecurityUser securityUser = mapper.getOrCreateUserByClientPrincipal(token, clientRegistration.getTenantId(), clientRegistration.getMapperConfig()); 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 6d4be61dc7..c8da37e9e5 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 @@ -30,9 +30,7 @@ public interface OAuth2Service { List findClientRegistrationsByTenantId(TenantId tenantId); - OAuth2ClientRegistration findClientRegistrationByRegistrationId(String registrationId); - - OAuth2ClientRegistration findClientRegistrationById(TenantId tenantId, OAuth2ClientRegistrationId id); + OAuth2ClientRegistration findClientRegistration(UUID id); List findAllClientRegistrations(); 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 a0a7dcc48b..1da7942b17 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 @@ -32,7 +32,6 @@ import java.util.List; public class OAuth2ClientRegistration extends BaseData implements HasTenantId, HasName { private TenantId tenantId; - private String registrationId; private String domainName; private String redirectUriTemplate; private OAuth2MapperConfig mapperConfig; @@ -51,7 +50,6 @@ public class OAuth2ClientRegistration extends BaseData { - OAuth2ClientRegistration findByRegistrationId(String registrationId); - List findAll(); List findByTenantId(UUID tenantId); List findByDomainName(String domainName); - boolean removeByRegistrationId(String registrationId); - 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 f06d906e7c..535378c9a8 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 @@ -46,7 +46,6 @@ import static org.thingsboard.server.dao.service.Validator.validateString; public class OAuth2ServiceImpl extends AbstractEntityService implements OAuth2Service { public static final String INCORRECT_TENANT_ID = "Incorrect tenantId "; public static final String INCORRECT_CLIENT_REGISTRATION_ID = "Incorrect clientRegistrationId "; - public static final String INCORRECT_REGISTRATION_ID = "Incorrect registrationId "; public static final String INCORRECT_DOMAIN_NAME = "Incorrect domainName "; @Autowired @@ -68,18 +67,7 @@ public class OAuth2ServiceImpl extends AbstractEntityService implements OAuth2Se public OAuth2ClientRegistration saveClientRegistration(OAuth2ClientRegistration clientRegistration) { log.trace("Executing saveClientRegistration [{}]", clientRegistration); clientRegistrationValidator.validate(clientRegistration, OAuth2ClientRegistration::getTenantId); - OAuth2ClientRegistration savedClientRegistration; - try { - savedClientRegistration = clientRegistrationDao.save(clientRegistration.getTenantId(), clientRegistration); - } catch (Exception t) { - ConstraintViolationException e = extractConstraintViolationException(t).orElse(null); - if (e != null && e.getConstraintName() != null && e.getConstraintName().equalsIgnoreCase("oauth2_registration_id_unq_key")) { - throw new DataValidationException("Client registration with such registrationId already exists!"); - } else { - throw t; - } - } - return savedClientRegistration; + return clientRegistrationDao.save(clientRegistration.getTenantId(), clientRegistration); } @Override @@ -90,17 +78,10 @@ public class OAuth2ServiceImpl extends AbstractEntityService implements OAuth2Se } @Override - public OAuth2ClientRegistration findClientRegistrationByRegistrationId(String registrationId) { - log.trace("Executing findClientRegistrationByRegistrationId [{}]", registrationId); - validateString(registrationId, INCORRECT_REGISTRATION_ID + registrationId); - return clientRegistrationDao.findByRegistrationId(registrationId); - } - - @Override - public OAuth2ClientRegistration findClientRegistrationById(TenantId tenantId, OAuth2ClientRegistrationId id) { - log.trace("Executing findClientRegistrationById [{}]", id); + public OAuth2ClientRegistration findClientRegistration(UUID id) { + log.trace("Executing findClientRegistration [{}]", id); validateId(id, INCORRECT_CLIENT_REGISTRATION_ID + id); - return clientRegistrationDao.findById(tenantId, id.getId()); + return clientRegistrationDao.findById(null, id); } @Override @@ -138,7 +119,7 @@ public class OAuth2ServiceImpl extends AbstractEntityService implements OAuth2Se } } - private DataValidator clientRegistrationValidator = + private final DataValidator clientRegistrationValidator = new DataValidator() { @Override @@ -151,9 +132,6 @@ public class OAuth2ServiceImpl extends AbstractEntityService implements OAuth2Se @Override protected void validateDataImpl(TenantId tenantId, OAuth2ClientRegistration clientRegistration) { - if (StringUtils.isEmpty(clientRegistration.getRegistrationId())) { - throw new DataValidationException("Registration ID should be specified!"); - } if (StringUtils.isEmpty(clientRegistration.getDomainName())) { throw new DataValidationException("Domain name should be specified!"); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/oauth2/OAuth2Utils.java b/dao/src/main/java/org/thingsboard/server/dao/oauth2/OAuth2Utils.java index 7ccad60bd7..948c894540 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/oauth2/OAuth2Utils.java +++ b/dao/src/main/java/org/thingsboard/server/dao/oauth2/OAuth2Utils.java @@ -29,7 +29,7 @@ public class OAuth2Utils { public static OAuth2ClientInfo toClientInfo(OAuth2ClientRegistration clientRegistration) { OAuth2ClientInfo client = new OAuth2ClientInfo(); client.setName(clientRegistration.getLoginButtonLabel()); - client.setUrl(String.format(OAUTH2_AUTHORIZATION_PATH_TEMPLATE, clientRegistration.getRegistrationId())); + client.setUrl(String.format(OAUTH2_AUTHORIZATION_PATH_TEMPLATE, clientRegistration.getUuidId().toString())); client.setIcon(clientRegistration.getLoginButtonIcon()); return client; } 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 d40fb060dc..ef10245e19 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 @@ -45,12 +45,6 @@ public class JpaOAuth2ClientRegistrationDao extends JpaAbstractDao entity = repository.findByRegistrationId(registrationId); - return DaoUtil.getData(entity); - } - @Override public List findAll() { Iterable entities = repository.findAll(); @@ -73,12 +67,6 @@ public class JpaOAuth2ClientRegistrationDao extends JpaAbstractDao { - Optional findByRegistrationId(String registrationId); - List findAllByTenantId(UUID tenantId); List findAllByDomainName(String domainName); - int deleteByRegistrationId(String registrationId); - int deleteByTenantId(UUID tenantId); - - boolean existsByRegistrationId(String registrationId); } diff --git a/dao/src/main/resources/sql/schema-entities-hsql.sql b/dao/src/main/resources/sql/schema-entities-hsql.sql index bb38f27aef..711ab8037e 100644 --- a/dao/src/main/resources/sql/schema-entities-hsql.sql +++ b/dao/src/main/resources/sql/schema-entities-hsql.sql @@ -296,7 +296,6 @@ CREATE TABLE IF NOT EXISTS oauth2_client_registration ( created_time bigint NOT NULL, additional_info varchar, tenant_id uuid, - registration_id varchar(255), domain_name varchar(255), client_id varchar(255), client_secret varchar(255), @@ -323,6 +322,5 @@ CREATE TABLE IF NOT EXISTS oauth2_client_registration ( basic_always_full_screen boolean, custom_url varchar(255), custom_username varchar(255), - custom_password varchar(255), - CONSTRAINT oauth2_registration_id_unq_key UNIQUE (registration_id) + custom_password varchar(255) ); diff --git a/dao/src/main/resources/sql/schema-entities.sql b/dao/src/main/resources/sql/schema-entities.sql index 441b676647..84bfaea563 100644 --- a/dao/src/main/resources/sql/schema-entities.sql +++ b/dao/src/main/resources/sql/schema-entities.sql @@ -311,7 +311,6 @@ CREATE TABLE IF NOT EXISTS oauth2_client_registration ( created_time bigint NOT NULL, additional_info varchar, tenant_id uuid, - registration_id varchar(255), domain_name varchar(255), client_id varchar(255), client_secret varchar(255), @@ -338,8 +337,7 @@ CREATE TABLE IF NOT EXISTS oauth2_client_registration ( basic_always_full_screen boolean, custom_url varchar(255), custom_username varchar(255), - custom_password varchar(255), - CONSTRAINT oauth2_registration_id_unq_key UNIQUE (registration_id) + custom_password varchar(255) ); CREATE OR REPLACE PROCEDURE cleanup_events_by_ttl(IN ttl bigint, IN debug_ttl bigint, INOUT deleted bigint) 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 a0e430fdcd..d9165b08b8 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 @@ -86,18 +86,10 @@ public class BaseOAuth2ServiceTest extends AbstractServiceTest { Assert.assertTrue(oAuth2Service.isOAuth2ClientRegistrationAllowed(tenantId)); } - @Test(expected = DataValidationException.class) - public void testSaveDuplicateRegistrationId() { - OAuth2ClientRegistration first = validClientRegistration("duplicated_reg_id", TenantId.SYS_TENANT_ID); - OAuth2ClientRegistration second = validClientRegistration("duplicated_reg_id", tenantId); - - oAuth2Service.saveClientRegistration(first); - oAuth2Service.saveClientRegistration(second); - } @Test public void testCreateNewSystemParams() { - OAuth2ClientRegistration clientRegistration = validClientRegistration(UUID.randomUUID().toString(), TenantId.SYS_TENANT_ID); + OAuth2ClientRegistration clientRegistration = validClientRegistration(TenantId.SYS_TENANT_ID); OAuth2ClientRegistration savedClientRegistration = oAuth2Service.saveClientRegistration(clientRegistration); Assert.assertNotNull(savedClientRegistration); @@ -109,7 +101,7 @@ public class BaseOAuth2ServiceTest extends AbstractServiceTest { @Test public void testFindSystemParamsByTenant() { - OAuth2ClientRegistration clientRegistration = validClientRegistration(UUID.randomUUID().toString(), TenantId.SYS_TENANT_ID); + OAuth2ClientRegistration clientRegistration = validClientRegistration(TenantId.SYS_TENANT_ID); oAuth2Service.saveClientRegistration(clientRegistration); List clientRegistrationsByTenantId = oAuth2Service.findClientRegistrationsByTenantId(TenantId.SYS_TENANT_ID); @@ -124,7 +116,7 @@ public class BaseOAuth2ServiceTest extends AbstractServiceTest { @Test public void testCreateNewTenantParams() { - OAuth2ClientRegistration clientRegistration = validClientRegistration(UUID.randomUUID().toString(), tenantId); + OAuth2ClientRegistration clientRegistration = validClientRegistration(tenantId); OAuth2ClientRegistration savedClientRegistration = oAuth2Service.saveClientRegistration(clientRegistration); Assert.assertNotNull(savedClientRegistration); @@ -136,7 +128,7 @@ public class BaseOAuth2ServiceTest extends AbstractServiceTest { @Test public void testFindTenantParams() { - OAuth2ClientRegistration clientRegistration = validClientRegistration(UUID.randomUUID().toString(), tenantId); + OAuth2ClientRegistration clientRegistration = validClientRegistration(tenantId); oAuth2Service.saveClientRegistration(clientRegistration); List clientRegistrationsByTenantId = oAuth2Service.findClientRegistrationsByTenantId(tenantId); @@ -151,8 +143,8 @@ public class BaseOAuth2ServiceTest extends AbstractServiceTest { @Test public void testGetClientRegistrationWithTenant() { - OAuth2ClientRegistration tenantClientRegistration = validClientRegistration(UUID.randomUUID().toString(), tenantId); - OAuth2ClientRegistration sysAdminClientRegistration = validClientRegistration(UUID.randomUUID().toString(), TenantId.SYS_TENANT_ID); + OAuth2ClientRegistration tenantClientRegistration = validClientRegistration(tenantId); + OAuth2ClientRegistration sysAdminClientRegistration = validClientRegistration(TenantId.SYS_TENANT_ID); OAuth2ClientRegistration savedTenantClientRegistration = oAuth2Service.saveClientRegistration(tenantClientRegistration); OAuth2ClientRegistration savedSysAdminClientRegistration = oAuth2Service.saveClientRegistration(sysAdminClientRegistration); @@ -163,22 +155,16 @@ public class BaseOAuth2ServiceTest extends AbstractServiceTest { Assert.assertEquals(savedSysAdminClientRegistration, oAuth2Service.findClientRegistrationsByTenantId(TenantId.SYS_TENANT_ID).get(0)); Assert.assertEquals(savedTenantClientRegistration, - oAuth2Service.findClientRegistrationByRegistrationId(savedTenantClientRegistration.getRegistrationId())); - Assert.assertEquals(savedSysAdminClientRegistration, - oAuth2Service.findClientRegistrationByRegistrationId(savedSysAdminClientRegistration.getRegistrationId())); - - Assert.assertEquals(savedTenantClientRegistration, - oAuth2Service.findClientRegistrationById(tenantId, savedTenantClientRegistration.getId())); + oAuth2Service.findClientRegistration(savedTenantClientRegistration.getUuidId())); Assert.assertEquals(savedSysAdminClientRegistration, - oAuth2Service.findClientRegistrationById(TenantId.SYS_TENANT_ID, savedSysAdminClientRegistration.getId())); - + oAuth2Service.findClientRegistration(savedSysAdminClientRegistration.getUuidId())); } @Test public void testGetOAuth2Clients() { String testDomainName = "test_domain"; - OAuth2ClientRegistration tenantClientRegistration = validClientRegistration(testDomainName, UUID.randomUUID().toString(), tenantId); - OAuth2ClientRegistration sysAdminClientRegistration = validClientRegistration(testDomainName, UUID.randomUUID().toString(), TenantId.SYS_TENANT_ID); + OAuth2ClientRegistration tenantClientRegistration = validClientRegistration(tenantId, testDomainName); + OAuth2ClientRegistration sysAdminClientRegistration = validClientRegistration(TenantId.SYS_TENANT_ID, testDomainName); oAuth2Service.saveClientRegistration(tenantClientRegistration); oAuth2Service.saveClientRegistration(sysAdminClientRegistration); @@ -195,8 +181,8 @@ public class BaseOAuth2ServiceTest extends AbstractServiceTest { @Test public void testGetEmptyOAuth2Clients() { String testDomainName = "test_domain"; - OAuth2ClientRegistration tenantClientRegistration = validClientRegistration(testDomainName, UUID.randomUUID().toString(), tenantId); - OAuth2ClientRegistration sysAdminClientRegistration = validClientRegistration(testDomainName, UUID.randomUUID().toString(), TenantId.SYS_TENANT_ID); + OAuth2ClientRegistration tenantClientRegistration = validClientRegistration(tenantId, testDomainName); + OAuth2ClientRegistration sysAdminClientRegistration = validClientRegistration(TenantId.SYS_TENANT_ID, testDomainName); oAuth2Service.saveClientRegistration(tenantClientRegistration); oAuth2Service.saveClientRegistration(sysAdminClientRegistration); List oAuth2Clients = oAuth2Service.getOAuth2Clients("random-domain"); @@ -205,8 +191,8 @@ public class BaseOAuth2ServiceTest extends AbstractServiceTest { @Test public void testDeleteOAuth2ClientRegistration() { - OAuth2ClientRegistration tenantClientRegistration = validClientRegistration(UUID.randomUUID().toString(), tenantId); - OAuth2ClientRegistration sysAdminClientRegistration = validClientRegistration(UUID.randomUUID().toString(), TenantId.SYS_TENANT_ID); + OAuth2ClientRegistration tenantClientRegistration = validClientRegistration(tenantId); + OAuth2ClientRegistration sysAdminClientRegistration = validClientRegistration(TenantId.SYS_TENANT_ID); OAuth2ClientRegistration savedTenantRegistration = oAuth2Service.saveClientRegistration(tenantClientRegistration); OAuth2ClientRegistration savedSysAdminRegistration = oAuth2Service.saveClientRegistration(sysAdminClientRegistration); @@ -218,9 +204,9 @@ public class BaseOAuth2ServiceTest extends AbstractServiceTest { @Test public void testDeleteTenantOAuth2ClientRegistrations() { - oAuth2Service.saveClientRegistration(validClientRegistration(UUID.randomUUID().toString(), tenantId)); - oAuth2Service.saveClientRegistration(validClientRegistration(UUID.randomUUID().toString(), tenantId)); - oAuth2Service.saveClientRegistration(validClientRegistration(UUID.randomUUID().toString(), tenantId)); + oAuth2Service.saveClientRegistration(validClientRegistration(tenantId)); + oAuth2Service.saveClientRegistration(validClientRegistration(tenantId)); + oAuth2Service.saveClientRegistration(validClientRegistration(tenantId)); Assert.assertEquals(3, oAuth2Service.findAllClientRegistrations().size()); Assert.assertEquals(3, oAuth2Service.findClientRegistrationsByTenantId(tenantId).size()); @@ -240,14 +226,13 @@ public class BaseOAuth2ServiceTest extends AbstractServiceTest { } } - private OAuth2ClientRegistration validClientRegistration(String registrationId, TenantId tenantId) { - return validClientRegistration("domainName", registrationId, tenantId); + private OAuth2ClientRegistration validClientRegistration(TenantId tenantId) { + return validClientRegistration(tenantId, "domainName"); } - private OAuth2ClientRegistration validClientRegistration(String domainName, String registrationId, TenantId tenantId) { + private OAuth2ClientRegistration validClientRegistration(TenantId tenantId, String domainName) { OAuth2ClientRegistration clientRegistration = new OAuth2ClientRegistration(); clientRegistration.setTenantId(tenantId); - clientRegistration.setRegistrationId(registrationId); clientRegistration.setDomainName(domainName); clientRegistration.setMapperConfig( OAuth2MapperConfig.builder()