diff --git a/application/src/main/data/upgrade/3.1.1/schema_update.sql b/application/src/main/data/upgrade/3.1.1/schema_update.sql index f0dfbe1ae3..aa6b59617b 100644 --- a/application/src/main/data/upgrade/3.1.1/schema_update.sql +++ b/application/src/main/data/upgrade/3.1.1/schema_update.sql @@ -18,6 +18,7 @@ DROP TABLE IF EXISTS oauth2_client_registration; CREATE TABLE IF NOT EXISTS oauth2_client_registration ( id uuid NOT NULL CONSTRAINT oauth2_client_registration_pkey PRIMARY KEY, + enabled boolean, created_time bigint NOT NULL, additional_info varchar, domain_name varchar(255), 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 9b1fc12dd5..1932a77bef 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 @@ -34,6 +34,7 @@ import java.util.List; @NoArgsConstructor public class OAuth2ClientRegistration extends SearchTextBasedWithAdditionalInfo implements HasName { + private boolean enabled; private String domainName; private String redirectUriTemplate; private OAuth2MapperConfig mapperConfig; @@ -51,6 +52,7 @@ public class OAuth2ClientRegistration extends SearchTextBasedWithAdditionalInfo< public OAuth2ClientRegistration(OAuth2ClientRegistration clientRegistration) { super(clientRegistration); + this.enabled = clientRegistration.enabled; this.domainName = clientRegistration.domainName; this.redirectUriTemplate = clientRegistration.redirectUriTemplate; this.mapperConfig = clientRegistration.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 index b42571b2d6..7eb29f9068 100644 --- 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 @@ -29,5 +29,6 @@ import java.util.Objects; @NoArgsConstructor @AllArgsConstructor public class OAuth2ClientsParams { + private boolean enabled; private List oAuth2DomainDtos; } \ No newline at end of file diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/ModelConstants.java b/dao/src/main/java/org/thingsboard/server/dao/model/ModelConstants.java index b9d75ab6d0..f6d599cefc 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/ModelConstants.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/ModelConstants.java @@ -358,6 +358,7 @@ public class ModelConstants { * OAuth2 client registration constants. */ public static final String OAUTH2_TENANT_ID_PROPERTY = TENANT_ID_PROPERTY; + public static final String OAUTH2_ENABLED_PROPERTY = "enabled"; public static final String OAUTH2_CLIENT_REGISTRATION_COLUMN_FAMILY_NAME = "oauth2_client_registration"; public static final String OAUTH2_CLIENT_REGISTRATION_TEMPLATE_COLUMN_FAMILY_NAME = "oauth2_client_registration_template"; public static final String OAUTH2_TEMPLATE_PROVIDER_ID_PROPERTY = "provider_id"; diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/OAuth2ClientRegistrationEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/OAuth2ClientRegistrationEntity.java index 72e8abe4e6..c34e2a9793 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/OAuth2ClientRegistrationEntity.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/OAuth2ClientRegistrationEntity.java @@ -38,6 +38,8 @@ import java.util.UUID; @Table(name = ModelConstants.OAUTH2_CLIENT_REGISTRATION_COLUMN_FAMILY_NAME) public class OAuth2ClientRegistrationEntity extends BaseSqlEntity { + @Column(name = ModelConstants.OAUTH2_ENABLED_PROPERTY) + private Boolean enabled; @Column(name = ModelConstants.OAUTH2_DOMAIN_NAME_PROPERTY) private String domainName; @Column(name = ModelConstants.OAUTH2_CLIENT_ID_PROPERTY) @@ -109,6 +111,7 @@ public class OAuth2ClientRegistrationEntity extends BaseSqlEntity toClientRegistrations(OAuth2ClientsParams oAuth2Params) { return oAuth2Params.getOAuth2DomainDtos().stream() .flatMap(domainParams -> domainParams.getClientRegistrations().stream() - .map(clientRegistrationDto -> OAuth2Utils.toClientRegistration(domainParams.getDomainName(), - domainParams.getRedirectUriTemplate(), clientRegistrationDto) + .map(clientRegistrationDto -> OAuth2Utils.toClientRegistration(oAuth2Params.isEnabled(), + domainParams.getDomainName(), + domainParams.getRedirectUriTemplate(), + clientRegistrationDto) )) .collect(Collectors.toList()); } public static OAuth2ClientsParams toOAuth2Params(List clientRegistrations) { Map domainParamsMap = new HashMap<>(); + boolean enabled = true; for (OAuth2ClientRegistration clientRegistration : clientRegistrations) { + enabled = clientRegistration.isEnabled(); String domainName = clientRegistration.getDomainName(); OAuth2ClientsDomainParams domainParams = domainParamsMap.computeIfAbsent(domainName, key -> new OAuth2ClientsDomainParams(domainName, clientRegistration.getRedirectUriTemplate(), new ArrayList<>()) @@ -53,7 +57,7 @@ public class OAuth2Utils { domainParams.getClientRegistrations() .add(toClientRegistrationDto(clientRegistration)); } - return new OAuth2ClientsParams(new ArrayList<>(domainParamsMap.values())); + return new OAuth2ClientsParams(enabled, new ArrayList<>(domainParamsMap.values())); } public static ClientRegistrationDto toClientRegistrationDto(OAuth2ClientRegistration oAuth2ClientRegistration) { @@ -76,10 +80,12 @@ public class OAuth2Utils { .build(); } - public static OAuth2ClientRegistration toClientRegistration(String domainName, String redirectUriTemplate, + private static OAuth2ClientRegistration toClientRegistration(boolean enabled, String domainName, + String redirectUriTemplate, ClientRegistrationDto clientRegistrationDto) { OAuth2ClientRegistration clientRegistration = new OAuth2ClientRegistration(); clientRegistration.setId(clientRegistrationDto.getId()); + clientRegistration.setEnabled(enabled); clientRegistration.setCreatedTime(clientRegistrationDto.getCreatedTime()); clientRegistration.setDomainName(domainName); clientRegistration.setRedirectUriTemplate(redirectUriTemplate); diff --git a/dao/src/main/resources/sql/schema-entities-hsql.sql b/dao/src/main/resources/sql/schema-entities-hsql.sql index ca92bfcf4f..a78d619361 100644 --- a/dao/src/main/resources/sql/schema-entities-hsql.sql +++ b/dao/src/main/resources/sql/schema-entities-hsql.sql @@ -293,6 +293,7 @@ CREATE TABLE IF NOT EXISTS ts_kv_dictionary ( CREATE TABLE IF NOT EXISTS oauth2_client_registration ( id uuid NOT NULL CONSTRAINT oauth2_client_registration_pkey PRIMARY KEY, + enabled boolean, created_time bigint NOT NULL, additional_info varchar, domain_name varchar(255), diff --git a/dao/src/main/resources/sql/schema-entities.sql b/dao/src/main/resources/sql/schema-entities.sql index d441e0cfd0..3a53f4166e 100644 --- a/dao/src/main/resources/sql/schema-entities.sql +++ b/dao/src/main/resources/sql/schema-entities.sql @@ -318,6 +318,7 @@ CREATE TABLE IF NOT EXISTS ts_kv_dictionary CREATE TABLE IF NOT EXISTS oauth2_client_registration ( id uuid NOT NULL CONSTRAINT oauth2_client_registration_pkey PRIMARY KEY, + enabled boolean, created_time bigint NOT NULL, additional_info varchar, domain_name varchar(255), 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 80df39cbdf..c96ba1f99d 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,7 +86,9 @@ public class BaseOAuth2ServiceTest extends AbstractServiceTest { public void testGetOAuth2Clients() { String testDomainName = "test_domain"; OAuth2ClientRegistration first = validClientRegistration(testDomainName); + first.setEnabled(true); OAuth2ClientRegistration second = validClientRegistration(testDomainName); + second.setEnabled(true); oAuth2Service.saveOAuth2Params(OAuth2Utils.toOAuth2Params(Collections.singletonList(first))); oAuth2Service.saveOAuth2Params(OAuth2Utils.toOAuth2Params(Collections.singletonList(second))); @@ -153,7 +155,7 @@ public class BaseOAuth2ServiceTest extends AbstractServiceTest { } private OAuth2ClientRegistration validClientRegistration() { - return validClientRegistration("domainName"); + return validClientRegistration(UUID.randomUUID().toString()); } private OAuth2ClientRegistration validClientRegistration(String domainName) { @@ -166,23 +168,23 @@ public class BaseOAuth2ServiceTest extends AbstractServiceTest { .type(MapperType.CUSTOM) .custom( OAuth2CustomMapperConfig.builder() - .url("localhost:8082") + .url("UUID.randomUUID().toString()") .build() ) .build() ); - clientRegistration.setClientId("clientId"); - clientRegistration.setClientSecret("clientSecret"); - clientRegistration.setAuthorizationUri("authorizationUri"); - clientRegistration.setAccessTokenUri("tokenUri"); - clientRegistration.setRedirectUriTemplate("redirectUriTemplate"); - clientRegistration.setScope(Arrays.asList("scope1", "scope2")); - clientRegistration.setUserInfoUri("userInfoUri"); - clientRegistration.setUserNameAttributeName("userNameAttributeName"); - clientRegistration.setJwkSetUri("jwkSetUri"); - clientRegistration.setClientAuthenticationMethod("clientAuthenticationMethod"); - clientRegistration.setLoginButtonLabel("loginButtonLabel"); - clientRegistration.setLoginButtonIcon("loginButtonIcon"); + clientRegistration.setClientId(UUID.randomUUID().toString()); + clientRegistration.setClientSecret(UUID.randomUUID().toString()); + clientRegistration.setAuthorizationUri(UUID.randomUUID().toString()); + clientRegistration.setAccessTokenUri(UUID.randomUUID().toString()); + clientRegistration.setRedirectUriTemplate(UUID.randomUUID().toString()); + clientRegistration.setScope(Arrays.asList(UUID.randomUUID().toString(), UUID.randomUUID().toString())); + clientRegistration.setUserInfoUri(UUID.randomUUID().toString()); + clientRegistration.setUserNameAttributeName(UUID.randomUUID().toString()); + clientRegistration.setJwkSetUri(UUID.randomUUID().toString()); + clientRegistration.setClientAuthenticationMethod(UUID.randomUUID().toString()); + clientRegistration.setLoginButtonLabel(UUID.randomUUID().toString()); + clientRegistration.setLoginButtonIcon(UUID.randomUUID().toString()); clientRegistration.setAdditionalInfo(mapper.createObjectNode().put(UUID.randomUUID().toString(), UUID.randomUUID().toString())); return clientRegistration; }