From d0b4f902f34d5d63685eab1b66b88de26b8ed43d Mon Sep 17 00:00:00 2001 From: Rafal Podles Date: Thu, 12 Dec 2024 12:53:54 +0100 Subject: [PATCH] fix: change field size for client --- .../4.2.27-change-client-column-size.yml | 169 ++++++++++++++++++ .../src/main/resources/liquibase/master.yml | 2 + .../management/api/DeviceRepositoryTest.java | 10 ++ .../oauth2/api/AccessTokenRepositoryTest.java | 17 +- .../api/AuthorizationCodeRepositoryTest.java | 17 +- .../api/CibaAuthRequestRepositoryTest.java | 13 ++ ...hedAuthorizationRequestRepositoryTest.java | 16 ++ .../api/RefreshTokenRepositoryTest.java | 16 +- .../api/ScopeApprovalRepositoryTest.java | 40 +++++ 9 files changed, 296 insertions(+), 4 deletions(-) create mode 100644 gravitee-am-repository/gravitee-am-repository-jdbc/src/main/resources/liquibase/changelogs/v4_2_27/4.2.27-change-client-column-size.yml create mode 100644 gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/oauth2/api/ScopeApprovalRepositoryTest.java diff --git a/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/resources/liquibase/changelogs/v4_2_27/4.2.27-change-client-column-size.yml b/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/resources/liquibase/changelogs/v4_2_27/4.2.27-change-client-column-size.yml new file mode 100644 index 00000000000..c84a5d49cb6 --- /dev/null +++ b/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/resources/liquibase/changelogs/v4_2_27/4.2.27-change-client-column-size.yml @@ -0,0 +1,169 @@ +# Change client column from 64 to 255 characters. +databaseChangeLog: + - changeSet: + id: 4.2.27-change-client-column-size-remove-indexes # MSSQL SERVER needs to first remove index before changing type + author: GraviteeSource Team + dbms: mssql + changes: + # device + - dropIndex: + tableName: devices + indexName: idx_devices_domain_client_user + # scope_approvals + - dropIndex: + indexName: idx_scope_approvals_domain_client_user_scope + tableName: scope_approvals + + #access_tokens + - dropIndex: + indexName: idx_access_tokens_client + tableName: access_tokens + - dropIndex: + indexName: idx_access_tokens_domain_client_subject + tableName: access_tokens + + #refresh_tokens + - dropIndex: + indexName: idx_refresh_tokens_client + tableName: refresh_tokens + - dropIndex: + indexName: idx_refresh_tokens_domain_client_subject + tableName: refresh_tokens + + - changeSet: + id: 4.2.27-change-client-column-size + author: GraviteeSource Team + changes: + #devices + - dropIndex: + tableName: devices + indexName: idx_devices_domain_client_user_remember_device_device_id + - modifyDataType: + tableName: devices + columnName: client + newDataType: VARCHAR(255) + - createIndex: # removed index for reference type to be able to change data type of client and not exceed max index length + columns: + - column: + name: reference_id + - column: + name: client + - column: + name: user_id + - column: + name: device_identifier_id + - column: + name: device_id + indexName: idx_devices_domain_client_user_remember_device_device_id + tableName: devices + unique: false + + # scope_approvals + - modifyDataType: + tableName: scope_approvals + columnName: client_id + newDataType: VARCHAR(255) + + #access_tokens + - modifyDataType: + tableName: access_tokens + columnName: client + newDataType: VARCHAR(255) + + #refresh_tokens + - modifyDataType: + tableName: refresh_tokens + columnName: client + newDataType: VARCHAR(255) + + #authorization_codes + - modifyDataType: + tableName: authorization_codes + columnName: client_id + newDataType: VARCHAR(255) + + #pushed_authorization_requests + - modifyDataType: + tableName: pushed_authorization_requests + columnName: client + newDataType: VARCHAR(255) + + #ciba_auth_requests + - modifyDataType: + tableName: ciba_auth_requests + columnName: client + newDataType: VARCHAR(255) + + - changeSet: + id: 4.2.27-change-client-column-size-recreate-indexes # recreating indexes for MS SQL SERVER + author: GraviteeSource Team + dbms: mssql + changes: + # device + - createIndex: + columns: + - column: + name: reference_id + - column: + name: reference_type + - column: + name: client + - column: + name: user_id + indexName: idx_devices_domain_client_user + tableName: devices + unique: false + # scope_approvals + - createIndex: + columns: + - column: + name: domain + - column: + name: client_id + - column: + name: user_id + - column: + name: scope + indexName: idx_scope_approvals_domain_client_user_scope + tableName: scope_approvals + unique: true + + #access_tokens + - createIndex: + columns: + - column: + name: client + indexName: idx_access_tokens_client + tableName: access_tokens + unique: false + - createIndex: + columns: + - column: + name: domain + - column: + name: client + - column: + name: subject + indexName: idx_access_tokens_domain_client_subject + tableName: access_tokens + unique: false + + #refresh_tokens + - createIndex: + columns: + - column: + name: client + indexName: idx_refresh_tokens_client + tableName: refresh_tokens + unique: false + - createIndex: + columns: + - column: + name: domain + - column: + name: client + - column: + name: subject + indexName: idx_refresh_tokens_domain_client_subject + tableName: refresh_tokens + unique: false \ No newline at end of file diff --git a/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/resources/liquibase/master.yml b/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/resources/liquibase/master.yml index 31625101fba..4bfcdfa102f 100644 --- a/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/resources/liquibase/master.yml +++ b/gravitee-am-repository/gravitee-am-repository-jdbc/src/main/resources/liquibase/master.yml @@ -121,3 +121,5 @@ databaseChangeLog: - file: liquibase/changelogs/v4_1_0/4.1.35-update-web-credential-index.yml - include: - file: liquibase/changelogs/v4_2_0/4.2.0-update-applications-table.yml + - include: + - file: liquibase/changelogs/v4_2_27/4.2.27-change-client-column-size.yml diff --git a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/DeviceRepositoryTest.java b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/DeviceRepositoryTest.java index 833716adb9a..c4cdbab9678 100644 --- a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/DeviceRepositoryTest.java +++ b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/management/api/DeviceRepositoryTest.java @@ -251,4 +251,14 @@ public void testDelete() throws TechnicalException { testObserver.assertNoValues(); testObserver.assertNoErrors(); } + + @Test + public void createWithLongClient(){ + Device device = buildDevice(); + device.setClient("very-long-client-very-long-client-very-long-client-very-long-client-very-long-client-very-long-client"); + TestObserver deviceTestObserver = repository.create(device).test().awaitDone(10, TimeUnit.SECONDS); + deviceTestObserver.awaitDone(10, TimeUnit.SECONDS); + deviceTestObserver.assertComplete(); + deviceTestObserver.assertNoErrors(); + } } diff --git a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/oauth2/api/AccessTokenRepositoryTest.java b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/oauth2/api/AccessTokenRepositoryTest.java index d852502670b..760867bc18a 100644 --- a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/oauth2/api/AccessTokenRepositoryTest.java +++ b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/oauth2/api/AccessTokenRepositoryTest.java @@ -25,7 +25,6 @@ import java.util.concurrent.TimeUnit; -import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; /** @@ -65,6 +64,22 @@ public void shouldFindToken() { observer.assertNoErrors(); } + @Test + public void shouldCreateWithLongClientId() { + AccessToken token = new AccessToken(); + token.setId(RandomString.generate()); + token.setToken("my-token"); + token.setClient("very-long-client-very-long-client-very-long-client-very-long-client-very-long-client-very-long-client"); + + TestObserver observer = accessTokenRepository + .create(token).test(); + + observer.awaitDone(10, TimeUnit.SECONDS); + + observer.assertComplete(); + observer.assertNoErrors(); + } + @Test public void shouldDeleteByToken() { AccessToken token = new AccessToken(); diff --git a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/oauth2/api/AuthorizationCodeRepositoryTest.java b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/oauth2/api/AuthorizationCodeRepositoryTest.java index a9ec037ecfc..da1b4380560 100644 --- a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/oauth2/api/AuthorizationCodeRepositoryTest.java +++ b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/oauth2/api/AuthorizationCodeRepositoryTest.java @@ -17,8 +17,6 @@ import io.gravitee.am.repository.oauth2.AbstractOAuthTest; import io.gravitee.am.repository.oauth2.model.AuthorizationCode; -import io.reactivex.rxjava3.core.Maybe; -import io.reactivex.rxjava3.core.Completable; import io.reactivex.rxjava3.observers.TestObserver; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -83,4 +81,19 @@ public void shouldRemoveCode() throws InterruptedException { deletionValidationObserver.assertNoValues(); } + @Test + public void shouldCreateWithLongClientId() { + AuthorizationCode authorizationCode = new AuthorizationCode(); + authorizationCode.setId("test"); + authorizationCode.setCode("test"); + authorizationCode.setClientId("very-long-client-very-long-client-very-long-client-very-long-client-very-long-client-very-long-client"); + + TestObserver observer = authorizationCodeRepository + .create(authorizationCode).test(); + + observer.awaitDone(10, TimeUnit.SECONDS); + observer.assertComplete(); + observer.assertNoErrors(); + } + } diff --git a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/oauth2/api/CibaAuthRequestRepositoryTest.java b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/oauth2/api/CibaAuthRequestRepositoryTest.java index d51061f6f83..255e5f00dd3 100644 --- a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/oauth2/api/CibaAuthRequestRepositoryTest.java +++ b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/oauth2/api/CibaAuthRequestRepositoryTest.java @@ -173,5 +173,18 @@ public void shouldDelete() { observer.assertNoErrors(); } + @Test + public void shouldCreateWithLongClientName() { + final String id = RandomString.generate(); + CibaAuthRequest authRequest = buildCibaAuthRequest(id); + authRequest.setClientId("very-long-client-very-long-client-very-long-client-very-long-client-very-long-client-very-long-client"); + + TestObserver observer = repository.create(authRequest).test(); + + observer.awaitDone(10, TimeUnit.SECONDS); + observer.assertComplete(); + observer.assertNoErrors(); + } + } diff --git a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/oauth2/api/PushedAuthorizationRequestRepositoryTest.java b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/oauth2/api/PushedAuthorizationRequestRepositoryTest.java index 41a324066de..f46b21fb457 100644 --- a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/oauth2/api/PushedAuthorizationRequestRepositoryTest.java +++ b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/oauth2/api/PushedAuthorizationRequestRepositoryTest.java @@ -92,5 +92,21 @@ public void shouldDelete() { observer.assertNoErrors(); } + @Test + public void shouldCreateWithLongClientName() { + PushedAuthorizationRequest par = new PushedAuthorizationRequest(); + final String id = RandomString.generate(); + par.setId(id); + par.setDomain("domain"); + par.setClient("very-long-client-very-long-client-very-long-client-very-long-client-very-long-client-very-long-client"); + final LinkedMultiValueMap parameters = new LinkedMultiValueMap<>(); + parameters.add("key", "value"); + par.setParameters(parameters); + + TestObserver observer = repository.create(par).test(); + observer.awaitDone(10, TimeUnit.SECONDS); + observer.assertComplete(); + observer.assertNoErrors(); + } } diff --git a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/oauth2/api/RefreshTokenRepositoryTest.java b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/oauth2/api/RefreshTokenRepositoryTest.java index 619efc2d6b0..a4cb3fe2ebc 100644 --- a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/oauth2/api/RefreshTokenRepositoryTest.java +++ b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/oauth2/api/RefreshTokenRepositoryTest.java @@ -25,7 +25,6 @@ import java.util.concurrent.TimeUnit; -import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; /** @@ -135,4 +134,19 @@ public void shouldDeleteByDomainIdAndUserId() { assertNotNull(refreshTokenRepository.findByToken("my-token2").blockingGet()); } + @Test + public void shouldCreateWithLongClientId() { + RefreshToken token = new RefreshToken(); + token.setId(RandomString.generate()); + token.setToken("my-token"); + token.setClient("very-long-client-very-long-client-very-long-client-very-long-client-very-long-client-very-long-client"); + + TestObserver observer = refreshTokenRepository + .create(token).test(); + + observer.awaitDone(10, TimeUnit.SECONDS); + observer.assertComplete(); + observer.assertNoErrors(); + } + } diff --git a/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/oauth2/api/ScopeApprovalRepositoryTest.java b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/oauth2/api/ScopeApprovalRepositoryTest.java new file mode 100644 index 00000000000..9aca0d73e78 --- /dev/null +++ b/gravitee-am-repository/gravitee-am-repository-tests/src/test/java/io/gravitee/am/repository/oauth2/api/ScopeApprovalRepositoryTest.java @@ -0,0 +1,40 @@ +/** + * Copyright (C) 2015 The Gravitee team (http://gravitee.io) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.gravitee.am.repository.oauth2.api; + +import io.gravitee.am.model.oauth2.ScopeApproval; +import io.gravitee.am.repository.oauth2.AbstractOAuthTest; +import io.reactivex.rxjava3.observers.TestObserver; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.concurrent.TimeUnit; + +public class ScopeApprovalRepositoryTest extends AbstractOAuthTest { + @Autowired + private ScopeApprovalRepository scopeApprovalRepository; + @Test + public void shouldCreateWithLongClientName(){ + ScopeApproval scopeApproval = new ScopeApproval(); + scopeApproval.setScope("Test"); + scopeApproval.setStatus(ScopeApproval.ApprovalStatus.APPROVED); + scopeApproval.setClientId("very-long-client-very-long-client-very-long-client-very-long-client-very-long-client-very-long-client"); + TestObserver testObserver = scopeApprovalRepository.create(scopeApproval).test(); + testObserver.awaitDone(10, TimeUnit.SECONDS); + testObserver.assertComplete(); + testObserver.assertNoErrors(); + } +}