This is an automated email from the ASF dual-hosted git repository.

ilgrosso pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/syncope.git


The following commit(s) were added to refs/heads/master by this push:
     new 19dbfb211c [SYNCOPE-1955] Fixing column size issues for MySQL and 
MariaDB
19dbfb211c is described below

commit 19dbfb211cbf8bc012261ce8dc388e6f450e098d
Author: Francesco Chicchiriccò <[email protected]>
AuthorDate: Fri Mar 13 14:14:38 2026 +0100

    [SYNCOPE-1955] Fixing column size issues for MySQL and MariaDB
---
 .../client/console/panels/JWKSGenerationPanel.java      |  2 ++
 .../org/apache/syncope/client/console/panels/OIDC.java  |  5 +++--
 .../core/persistence/api/entity/am/OIDCOpEntity.java    |  4 ++--
 .../core/persistence/jpa/entity/am/JPAOIDCOpEntity.java | 12 +++++++-----
 .../persistence/jpa/entity/am/JPASAML2IdPEntity.java    |  3 ++-
 .../core/persistence/jpa/inner/OIDCOpEntityTest.java    |  3 ++-
 .../persistence/neo4j/entity/am/Neo4jOIDCOpEntity.java  |  9 +++++----
 .../core/persistence/neo4j/inner/OIDCOpEntityTest.java  |  3 ++-
 .../provisioning/api/data/OIDCOpEntityDataBinder.java   |  2 +-
 .../java/data/OIDCOpEntityDataBinderImpl.java           | 17 ++++++++++-------
 10 files changed, 36 insertions(+), 24 deletions(-)

diff --git 
a/client/am/console/src/main/java/org/apache/syncope/client/console/panels/JWKSGenerationPanel.java
 
b/client/am/console/src/main/java/org/apache/syncope/client/console/panels/JWKSGenerationPanel.java
index e59033a110..e15fa39c7d 100644
--- 
a/client/am/console/src/main/java/org/apache/syncope/client/console/panels/JWKSGenerationPanel.java
+++ 
b/client/am/console/src/main/java/org/apache/syncope/client/console/panels/JWKSGenerationPanel.java
@@ -78,6 +78,8 @@ public class JWKSGenerationPanel extends 
AbstractModalPanel<OIDCOpEntityTO> {
         try {
             jwksKeySizeM.setObject(Integer.valueOf(
                     
waConfigRestClient.get("cas.authn.oidc.jwks.core.jwks-key-size").getValues().getFirst()));
+        } catch (NumberFormatException e) {
+            LOG.error("Incorrect key size specified: {}, reverting to {}", 
jwksKeySizeM.getObject(), e);
         } catch (SyncopeClientException e) {
             LOG.error("While reading cas.authn.oidc.jwks.core.jwks-key-size", 
e);
         }
diff --git 
a/client/am/console/src/main/java/org/apache/syncope/client/console/panels/OIDC.java
 
b/client/am/console/src/main/java/org/apache/syncope/client/console/panels/OIDC.java
index 6e62635f7d..31f9d1c9a5 100644
--- 
a/client/am/console/src/main/java/org/apache/syncope/client/console/panels/OIDC.java
+++ 
b/client/am/console/src/main/java/org/apache/syncope/client/console/panels/OIDC.java
@@ -21,6 +21,7 @@ package org.apache.syncope.client.console.panels;
 import com.fasterxml.jackson.databind.json.JsonMapper;
 import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
 import java.io.IOException;
+import java.util.Base64;
 import java.util.Optional;
 import org.apache.commons.lang3.mutable.Mutable;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
@@ -103,8 +104,8 @@ public class OIDC extends Panel {
                 String pretty = null;
                 if (oidcOpEntity.get() != null) {
                     try {
-                        pretty = MAPPER.writerWithDefaultPrettyPrinter().
-                                
writeValueAsString(MAPPER.readTree(oidcOpEntity.get().getJWKS()));
+                        pretty = 
MAPPER.writerWithDefaultPrettyPrinter().writeValueAsString(
+                                
MAPPER.readTree(Base64.getDecoder().decode(oidcOpEntity.get().getJWKS())));
                     } catch (IOException e) {
                         LOG.error("Could not pretty-print", e);
                         pretty = 
Optional.ofNullable(oidcOpEntity.get()).map(OIDCOpEntityTO::getJWKS).orElse(null);
diff --git 
a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/am/OIDCOpEntity.java
 
b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/am/OIDCOpEntity.java
index c5aa01e3a8..e66e26e579 100644
--- 
a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/am/OIDCOpEntity.java
+++ 
b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/am/OIDCOpEntity.java
@@ -24,9 +24,9 @@ import org.apache.syncope.core.persistence.api.entity.Entity;
 
 public interface OIDCOpEntity extends Entity {
 
-    String getJWKS();
+    byte[] getJWKS();
 
-    void setJWKS(String jwks);
+    void setJWKS(byte[] jwks);
 
     Map<String, Set<String>> getCustomScopes();
 }
diff --git 
a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/am/JPAOIDCOpEntity.java
 
b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/am/JPAOIDCOpEntity.java
index 2df0ae1fed..b452a00305 100644
--- 
a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/am/JPAOIDCOpEntity.java
+++ 
b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/am/JPAOIDCOpEntity.java
@@ -26,9 +26,11 @@ import jakarta.persistence.Table;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
+import org.apache.commons.lang3.ArrayUtils;
 import org.apache.syncope.core.persistence.api.entity.am.OIDCOpEntity;
 import 
org.apache.syncope.core.persistence.jpa.converters.String2SetOfStringMapConverter;
 import 
org.apache.syncope.core.persistence.jpa.entity.AbstractGeneratedKeyEntity;
+import org.hibernate.Length;
 
 @Entity
 @Table(name = JPAOIDCOpEntity.TABLE)
@@ -38,22 +40,22 @@ public class JPAOIDCOpEntity extends 
AbstractGeneratedKeyEntity implements OIDCO
 
     public static final String TABLE = "OIDCOpEntity";
 
-    @Column(nullable = false)
+    @Column(nullable = false, length = Length.LONG16)
     @Lob
-    private String jwks;
+    private byte[] jwks;
 
     @Convert(converter = String2SetOfStringMapConverter.class)
     @Lob
     private Map<String, Set<String>> customScopes = new HashMap<>();
 
     @Override
-    public String getJWKS() {
+    public byte[] getJWKS() {
         return jwks;
     }
 
     @Override
-    public void setJWKS(final String jwks) {
-        this.jwks = jwks;
+    public void setJWKS(final byte[] jwks) {
+        this.jwks = ArrayUtils.clone(jwks);
     }
 
     @Override
diff --git 
a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/am/JPASAML2IdPEntity.java
 
b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/am/JPASAML2IdPEntity.java
index 8c7ee55ef6..e2f05cffb3 100644
--- 
a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/am/JPASAML2IdPEntity.java
+++ 
b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/am/JPASAML2IdPEntity.java
@@ -25,6 +25,7 @@ import jakarta.persistence.Table;
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.syncope.core.persistence.api.entity.am.SAML2IdPEntity;
 import 
org.apache.syncope.core.persistence.jpa.entity.AbstractProvidedKeyEntity;
+import org.hibernate.Length;
 
 @Entity
 @Table(name = JPASAML2IdPEntity.TABLE)
@@ -34,7 +35,7 @@ public class JPASAML2IdPEntity extends 
AbstractProvidedKeyEntity implements SAML
 
     private static final long serialVersionUID = 57352617217394093L;
 
-    @Column(nullable = false)
+    @Column(nullable = false, length = Length.LONG16)
     @Lob
     private byte[] metadata;
 
diff --git 
a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/OIDCOpEntityTest.java
 
b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/OIDCOpEntityTest.java
index 515b8390d7..83ff443b5b 100644
--- 
a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/OIDCOpEntityTest.java
+++ 
b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/OIDCOpEntityTest.java
@@ -25,6 +25,7 @@ import com.nimbusds.jose.jwk.JWKSet;
 import com.nimbusds.jose.jwk.KeyUse;
 import com.nimbusds.jose.jwk.RSAKey;
 import com.nimbusds.jose.jwk.gen.RSAKeyGenerator;
+import java.nio.charset.StandardCharsets;
 import java.util.Set;
 import java.util.UUID;
 import org.apache.syncope.core.persistence.api.dao.OIDCOpEntityDAO;
@@ -48,7 +49,7 @@ public class OIDCOpEntityTest extends AbstractTest {
                 keyUse(KeyUse.SIGNATURE).
                 keyID(UUID.randomUUID().toString()).
                 generate();
-        oidcOpEntity.setJWKS(new JWKSet(jwk).toString());
+        oidcOpEntity.setJWKS(new 
JWKSet(jwk).toString().getBytes(StandardCharsets.UTF_8));
 
         oidcOpEntity.getCustomScopes().put("scope1", Set.of("claim1", 
"claim2"));
         oidcOpEntity.getCustomScopes().put("scope2", Set.of("claim1", 
"claim3", "claim4"));
diff --git 
a/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/entity/am/Neo4jOIDCOpEntity.java
 
b/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/entity/am/Neo4jOIDCOpEntity.java
index de18a94dee..fcf53736dd 100644
--- 
a/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/entity/am/Neo4jOIDCOpEntity.java
+++ 
b/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/entity/am/Neo4jOIDCOpEntity.java
@@ -22,6 +22,7 @@ import jakarta.validation.constraints.NotNull;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
+import org.apache.commons.lang3.ArrayUtils;
 import org.apache.syncope.core.persistence.api.entity.am.OIDCOpEntity;
 import 
org.apache.syncope.core.persistence.neo4j.entity.AbstractGeneratedKeyNode;
 import org.apache.syncope.core.provisioning.api.serialization.POJOHelper;
@@ -42,7 +43,7 @@ public class Neo4jOIDCOpEntity extends 
AbstractGeneratedKeyNode implements OIDCO
     };
 
     @NotNull
-    private String jwks;
+    private byte[] jwks;
 
     private String customScopes;
 
@@ -50,13 +51,13 @@ public class Neo4jOIDCOpEntity extends 
AbstractGeneratedKeyNode implements OIDCO
     private Map<String, Set<String>> customScopesMap = new HashMap<>();
 
     @Override
-    public String getJWKS() {
+    public byte[] getJWKS() {
         return jwks;
     }
 
     @Override
-    public void setJWKS(final String jwks) {
-        this.jwks = jwks;
+    public void setJWKS(final byte[] jwks) {
+        this.jwks = ArrayUtils.clone(jwks);
     }
 
     @Override
diff --git 
a/core/persistence-neo4j/src/test/java/org/apache/syncope/core/persistence/neo4j/inner/OIDCOpEntityTest.java
 
b/core/persistence-neo4j/src/test/java/org/apache/syncope/core/persistence/neo4j/inner/OIDCOpEntityTest.java
index ec88cfc591..6fd036d0a4 100644
--- 
a/core/persistence-neo4j/src/test/java/org/apache/syncope/core/persistence/neo4j/inner/OIDCOpEntityTest.java
+++ 
b/core/persistence-neo4j/src/test/java/org/apache/syncope/core/persistence/neo4j/inner/OIDCOpEntityTest.java
@@ -25,6 +25,7 @@ import com.nimbusds.jose.jwk.JWKSet;
 import com.nimbusds.jose.jwk.KeyUse;
 import com.nimbusds.jose.jwk.RSAKey;
 import com.nimbusds.jose.jwk.gen.RSAKeyGenerator;
+import java.nio.charset.StandardCharsets;
 import java.util.Set;
 import java.util.UUID;
 import org.apache.syncope.core.persistence.api.dao.OIDCOpEntityDAO;
@@ -48,7 +49,7 @@ public class OIDCOpEntityTest extends AbstractTest {
                 keyUse(KeyUse.SIGNATURE).
                 keyID(UUID.randomUUID().toString()).
                 generate();
-        oidcOpEntity.setJWKS(new JWKSet(jwk).toString());
+        oidcOpEntity.setJWKS(new 
JWKSet(jwk).toString().getBytes(StandardCharsets.UTF_8));
 
         oidcOpEntity.getCustomScopes().put("scope1", Set.of("claim1", 
"claim2"));
         oidcOpEntity.getCustomScopes().put("scope2", Set.of("claim1", 
"claim3", "claim4"));
diff --git 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/OIDCOpEntityDataBinder.java
 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/OIDCOpEntityDataBinder.java
index 20e9479e48..a2ac8530a7 100644
--- 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/OIDCOpEntityDataBinder.java
+++ 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/OIDCOpEntityDataBinder.java
@@ -53,7 +53,7 @@ public interface OIDCOpEntityDataBinder {
         }
     }
 
-    String generateJWKS(String jwksKeyId, String jwksType, int jwksKeySize);
+    byte[] generateJWKS(String jwksKeyId, String jwksType, int jwksKeySize);
 
     OIDCOpEntityTO getOIDCOpEntityTO(OIDCOpEntity oidcOpEntity);
 
diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/OIDCOpEntityDataBinderImpl.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/OIDCOpEntityDataBinderImpl.java
index 732d22946b..8dcd0cfb1c 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/OIDCOpEntityDataBinderImpl.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/OIDCOpEntityDataBinderImpl.java
@@ -18,7 +18,9 @@
  */
 package org.apache.syncope.core.provisioning.java.data;
 
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
+import java.util.Base64;
 import java.util.List;
 import java.util.Locale;
 import org.apache.syncope.common.lib.SyncopeClientException;
@@ -94,7 +96,7 @@ public class OIDCOpEntityDataBinderImpl implements 
OIDCOpEntityDataBinder {
     }
 
     @Override
-    public String generateJWKS(final String jwksKeyId, final String jwksType, 
final int jwksKeySize) {
+    public byte[] generateJWKS(final String jwksKeyId, final String jwksType, 
final int jwksKeySize) {
         List<PublicJsonWebKey> keys = new ArrayList<>();
         try {
             keys.add(generate(jwksKeyId, jwksType, jwksKeySize, Use.SIGNATURE, 
JsonWebKeyLifecycleState.CURRENT));
@@ -124,14 +126,16 @@ public class OIDCOpEntityDataBinderImpl implements 
OIDCOpEntityDataBinder {
         jwksKeySizeConfig.setValues(List.of(String.valueOf(jwksKeySize)));
         waConfigDAO.save(jwksKeySizeConfig);
 
-        return new 
JsonWebKeySet(keys).toJson(JsonWebKey.OutputControlLevel.INCLUDE_PRIVATE);
+        return new JsonWebKeySet(keys).
+                toJson(JsonWebKey.OutputControlLevel.INCLUDE_PRIVATE).
+                getBytes(StandardCharsets.UTF_8);
     }
 
     @Override
     public OIDCOpEntityTO getOIDCOpEntityTO(final OIDCOpEntity oidcOpEntity) {
         OIDCOpEntityTO oidcOpEntityTO = new OIDCOpEntityTO();
         oidcOpEntityTO.setKey(oidcOpEntity.getKey());
-        oidcOpEntityTO.setJWKS(oidcOpEntity.getJWKS());
+        
oidcOpEntityTO.setJWKS(Base64.getEncoder().encodeToString(oidcOpEntity.getJWKS()));
         
oidcOpEntityTO.getCustomScopes().putAll(oidcOpEntity.getCustomScopes());
 
         return oidcOpEntityTO;
@@ -139,10 +143,9 @@ public class OIDCOpEntityDataBinderImpl implements 
OIDCOpEntityDataBinder {
 
     @Override
     public void update(final OIDCOpEntity oidcOpEntity, final OIDCOpEntityTO 
oidcOpEntityTO) {
-        oidcOpEntity.setJWKS(oidcOpEntityTO.getJWKS());
-        if (oidcOpEntity.getJWKS() == null) {
-            oidcOpEntity.setJWKS(generateJWKS("syncope", "RSA", 2048));
-        }
+        oidcOpEntity.setJWKS(oidcOpEntityTO.getJWKS() == null
+                ? generateJWKS("syncope", "RSA", 2048)
+                : Base64.getDecoder().decode(oidcOpEntityTO.getJWKS()));
 
         oidcOpEntity.getCustomScopes().clear();
         
oidcOpEntity.getCustomScopes().putAll(oidcOpEntityTO.getCustomScopes());

Reply via email to