Commit 91f05282ea51b355cb2c04948919600cffb73f87

Authored by vzikratyi
1 parent 9c5b353a

Validate domains for SchemeTypes combinations

... ... @@ -119,10 +119,17 @@ public class OAuth2ServiceImpl extends AbstractEntityService implements OAuth2Se
119 119 if (StringUtils.isEmpty(domainInfo.getName())) {
120 120 throw new DataValidationException("Domain name should be specified!");
121 121 }
122   - if (StringUtils.isEmpty(domainInfo.getScheme())) {
  122 + if (domainInfo.getScheme() == null) {
123 123 throw new DataValidationException("Domain scheme should be specified!");
124 124 }
125 125 }
  126 + domainParams.getDomainInfos().stream()
  127 + .collect(Collectors.groupingBy(DomainInfo::getName))
  128 + .forEach((domainName, domainInfos) -> {
  129 + if (domainInfos.size() > 1 && domainInfos.stream().anyMatch(domainInfo -> domainInfo.getScheme() == SchemeType.MIXED)) {
  130 + throw new DataValidationException("MIXED scheme type shouldn't be combined with another scheme type!");
  131 + }
  132 + });
126 133 if (domainParams.getClientRegistrations() == null || domainParams.getClientRegistrations().isEmpty()) {
127 134 throw new DataValidationException("Client registrations should be specified!");
128 135 }
... ...
... ... @@ -22,6 +22,7 @@ import org.junit.Before;
22 22 import org.junit.Test;
23 23 import org.springframework.beans.factory.annotation.Autowired;
24 24 import org.thingsboard.server.common.data.oauth2.*;
  25 +import org.thingsboard.server.dao.exception.DataValidationException;
25 26 import org.thingsboard.server.dao.oauth2.OAuth2Service;
26 27
27 28 import java.util.*;
... ... @@ -45,6 +46,44 @@ public class BaseOAuth2ServiceTest extends AbstractServiceTest {
45 46 Assert.assertTrue(oAuth2Service.findOAuth2Params().getDomainsParams().isEmpty());
46 47 }
47 48
  49 + @Test(expected = DataValidationException.class)
  50 + public void testSaveHttpAndMixedDomainsTogether() {
  51 + OAuth2ClientsParams clientsParams = new OAuth2ClientsParams(true, Sets.newHashSet(
  52 + OAuth2ClientsDomainParams.builder()
  53 + .domainInfos(Sets.newHashSet(
  54 + DomainInfo.builder().name("first-domain").scheme(SchemeType.HTTP).build(),
  55 + DomainInfo.builder().name("first-domain").scheme(SchemeType.MIXED).build(),
  56 + DomainInfo.builder().name("third-domain").scheme(SchemeType.HTTPS).build()
  57 + ))
  58 + .clientRegistrations(Sets.newHashSet(
  59 + validClientRegistrationDto(),
  60 + validClientRegistrationDto(),
  61 + validClientRegistrationDto()
  62 + ))
  63 + .build()
  64 + ));
  65 + oAuth2Service.saveOAuth2Params(clientsParams);
  66 + }
  67 +
  68 + @Test(expected = DataValidationException.class)
  69 + public void testSaveHttpsAndMixedDomainsTogether() {
  70 + OAuth2ClientsParams clientsParams = new OAuth2ClientsParams(true, Sets.newHashSet(
  71 + OAuth2ClientsDomainParams.builder()
  72 + .domainInfos(Sets.newHashSet(
  73 + DomainInfo.builder().name("first-domain").scheme(SchemeType.HTTPS).build(),
  74 + DomainInfo.builder().name("first-domain").scheme(SchemeType.MIXED).build(),
  75 + DomainInfo.builder().name("third-domain").scheme(SchemeType.HTTPS).build()
  76 + ))
  77 + .clientRegistrations(Sets.newHashSet(
  78 + validClientRegistrationDto(),
  79 + validClientRegistrationDto(),
  80 + validClientRegistrationDto()
  81 + ))
  82 + .build()
  83 + ));
  84 + oAuth2Service.saveOAuth2Params(clientsParams);
  85 + }
  86 +
48 87 @Test
49 88 public void testCreateAndFindParams() {
50 89 OAuth2ClientsParams clientsParams = createDefaultClientsParams();
... ... @@ -178,7 +217,7 @@ public class BaseOAuth2ServiceTest extends AbstractServiceTest {
178 217 Assert.assertTrue(nonExistentDomainClients.isEmpty());
179 218
180 219 List<OAuth2ClientInfo> firstDomainHttpClients = oAuth2Service.getOAuth2Clients("http", "first-domain");
181   - Assert.assertEquals(firstDomainHttpClients.size(), firstDomainHttpClients.size());
  220 + Assert.assertEquals(firstGroupClientInfos.size(), firstDomainHttpClients.size());
182 221 firstGroupClientInfos.forEach(firstGroupClientInfo -> {
183 222 Assert.assertTrue(
184 223 firstDomainHttpClients.stream().anyMatch(clientInfo ->
... ... @@ -191,7 +230,7 @@ public class BaseOAuth2ServiceTest extends AbstractServiceTest {
191 230 Assert.assertTrue(firstDomainHttpsClients.isEmpty());
192 231
193 232 List<OAuth2ClientInfo> fourthDomainHttpClients = oAuth2Service.getOAuth2Clients("http", "fourth-domain");
194   - Assert.assertEquals(fourthDomainHttpClients.size(), secondGroupClientInfos.size());
  233 + Assert.assertEquals(secondGroupClientInfos.size(), fourthDomainHttpClients.size());
195 234 secondGroupClientInfos.forEach(secondGroupClientInfo -> {
196 235 Assert.assertTrue(
197 236 fourthDomainHttpClients.stream().anyMatch(clientInfo ->
... ... @@ -200,7 +239,7 @@ public class BaseOAuth2ServiceTest extends AbstractServiceTest {
200 239 );
201 240 });
202 241 List<OAuth2ClientInfo> fourthDomainHttpsClients = oAuth2Service.getOAuth2Clients("https", "fourth-domain");
203   - Assert.assertEquals(fourthDomainHttpsClients.size(), secondGroupClientInfos.size());
  242 + Assert.assertEquals(secondGroupClientInfos.size(), fourthDomainHttpsClients.size());
204 243 secondGroupClientInfos.forEach(secondGroupClientInfo -> {
205 244 Assert.assertTrue(
206 245 fourthDomainHttpsClients.stream().anyMatch(clientInfo ->
... ... @@ -210,7 +249,7 @@ public class BaseOAuth2ServiceTest extends AbstractServiceTest {
210 249 });
211 250
212 251 List<OAuth2ClientInfo> secondDomainHttpClients = oAuth2Service.getOAuth2Clients("http", "second-domain");
213   - Assert.assertEquals(secondDomainHttpClients.size(), firstGroupClientInfos.size() + secondGroupClientInfos.size());
  252 + Assert.assertEquals(firstGroupClientInfos.size() + secondGroupClientInfos.size(), secondDomainHttpClients.size());
214 253 firstGroupClientInfos.forEach(firstGroupClientInfo -> {
215 254 Assert.assertTrue(
216 255 secondDomainHttpClients.stream().anyMatch(clientInfo ->
... ... @@ -227,7 +266,7 @@ public class BaseOAuth2ServiceTest extends AbstractServiceTest {
227 266 });
228 267
229 268 List<OAuth2ClientInfo> secondDomainHttpsClients = oAuth2Service.getOAuth2Clients("https", "second-domain");
230   - Assert.assertEquals(secondDomainHttpsClients.size(), firstGroupClientInfos.size() + thirdGroupClientInfos.size());
  269 + Assert.assertEquals(firstGroupClientInfos.size() + thirdGroupClientInfos.size(), secondDomainHttpsClients.size());
231 270 firstGroupClientInfos.forEach(firstGroupClientInfo -> {
232 271 Assert.assertTrue(
233 272 secondDomainHttpsClients.stream().anyMatch(clientInfo ->
... ... @@ -245,6 +284,56 @@ public class BaseOAuth2ServiceTest extends AbstractServiceTest {
245 284 }
246 285
247 286 @Test
  287 + public void testGetOAuth2ClientsForHttpAndHttps() {
  288 + Set<ClientRegistrationDto> firstGroup = Sets.newHashSet(
  289 + validClientRegistrationDto(),
  290 + validClientRegistrationDto(),
  291 + validClientRegistrationDto(),
  292 + validClientRegistrationDto()
  293 + );
  294 + OAuth2ClientsParams clientsParams = new OAuth2ClientsParams(true, Sets.newHashSet(
  295 + OAuth2ClientsDomainParams.builder()
  296 + .domainInfos(Sets.newHashSet(
  297 + DomainInfo.builder().name("first-domain").scheme(SchemeType.HTTP).build(),
  298 + DomainInfo.builder().name("second-domain").scheme(SchemeType.MIXED).build(),
  299 + DomainInfo.builder().name("first-domain").scheme(SchemeType.HTTPS).build()
  300 + ))
  301 + .clientRegistrations(firstGroup)
  302 + .build()
  303 + ));
  304 +
  305 + oAuth2Service.saveOAuth2Params(clientsParams);
  306 + OAuth2ClientsParams foundClientsParams = oAuth2Service.findOAuth2Params();
  307 + Assert.assertNotNull(foundClientsParams);
  308 + Assert.assertEquals(clientsParams, foundClientsParams);
  309 +
  310 + List<OAuth2ClientInfo> firstGroupClientInfos = firstGroup.stream()
  311 + .map(clientRegistrationDto -> new OAuth2ClientInfo(
  312 + clientRegistrationDto.getLoginButtonLabel(), clientRegistrationDto.getLoginButtonIcon(), null))
  313 + .collect(Collectors.toList());
  314 +
  315 + List<OAuth2ClientInfo> firstDomainHttpClients = oAuth2Service.getOAuth2Clients("http", "first-domain");
  316 + Assert.assertEquals(firstGroupClientInfos.size(), firstDomainHttpClients.size());
  317 + firstGroupClientInfos.forEach(firstGroupClientInfo -> {
  318 + Assert.assertTrue(
  319 + firstDomainHttpClients.stream().anyMatch(clientInfo ->
  320 + clientInfo.getIcon().equals(firstGroupClientInfo.getIcon())
  321 + && clientInfo.getName().equals(firstGroupClientInfo.getName()))
  322 + );
  323 + });
  324 +
  325 + List<OAuth2ClientInfo> firstDomainHttpsClients = oAuth2Service.getOAuth2Clients("https", "first-domain");
  326 + Assert.assertEquals(firstGroupClientInfos.size(), firstDomainHttpsClients.size());
  327 + firstGroupClientInfos.forEach(firstGroupClientInfo -> {
  328 + Assert.assertTrue(
  329 + firstDomainHttpsClients.stream().anyMatch(clientInfo ->
  330 + clientInfo.getIcon().equals(firstGroupClientInfo.getIcon())
  331 + && clientInfo.getName().equals(firstGroupClientInfo.getName()))
  332 + );
  333 + });
  334 + }
  335 +
  336 + @Test
248 337 public void testGetDisabledOAuth2Clients() {
249 338 OAuth2ClientsParams clientsParams = new OAuth2ClientsParams(true, Sets.newHashSet(
250 339 OAuth2ClientsDomainParams.builder()
... ...