From 54a2f10114dc26568b3fc5d44d0d7ac7a07335af Mon Sep 17 00:00:00 2001
From: Brendan Le Ny <bleny@codelutin.com>
Date: Mon, 24 Jun 2024 15:00:09 +0200
Subject: [PATCH] Factorize URI creations

---
 .../java/sh/libre/scim/core/AbstractScimService.java | 12 ++++++++----
 .../java/sh/libre/scim/core/GroupScimService.java    | 10 ++--------
 2 files changed, 10 insertions(+), 12 deletions(-)

diff --git a/src/main/java/sh/libre/scim/core/AbstractScimService.java b/src/main/java/sh/libre/scim/core/AbstractScimService.java
index 9586a23..1d32e32 100644
--- a/src/main/java/sh/libre/scim/core/AbstractScimService.java
+++ b/src/main/java/sh/libre/scim/core/AbstractScimService.java
@@ -207,13 +207,17 @@ public abstract class AbstractScimService<RMM extends RoleMapperModel, S extends
 
     protected Meta newMetaLocation(EntityOnRemoteScimId externalId) {
         Meta meta = new Meta();
+        URI uri = getUri(type, externalId);
+        meta.setLocation(uri.toString());
+        return meta;
+    }
+
+    protected URI getUri(ScimResourceType type, EntityOnRemoteScimId externalId) {
         try {
-            URI uri = new URI("%ss/%s".formatted(type, externalId.asString()));
-            meta.setLocation(uri.toString());
+            return new URI("%s/%s".formatted(type.getEndpoint(), externalId.asString()));
         } catch (URISyntaxException e) {
-            LOGGER.warn(e);
+            throw new IllegalStateException("should never occur: can not format URI for type %s and id %s".formatted(type, externalId) , e);
         }
-        return meta;
     }
 
     protected KeycloakDao getKeycloakDao() {
diff --git a/src/main/java/sh/libre/scim/core/GroupScimService.java b/src/main/java/sh/libre/scim/core/GroupScimService.java
index 687d52a..4245b24 100644
--- a/src/main/java/sh/libre/scim/core/GroupScimService.java
+++ b/src/main/java/sh/libre/scim/core/GroupScimService.java
@@ -13,7 +13,6 @@ import org.keycloak.models.UserModel;
 import sh.libre.scim.jpa.ScimResource;
 
 import java.net.URI;
-import java.net.URISyntaxException;
 import java.util.List;
 import java.util.Optional;
 import java.util.Set;
@@ -94,13 +93,8 @@ public class GroupScimService extends AbstractScimService<GroupModel, Group> {
                 EntityOnRemoteScimId externalIdAsEntityOnRemoteScimId = groupMemberMapping.getExternalIdAsEntityOnRemoteScimId();
                 logger.debugf("found mapping for group member %s as %s", member, externalIdAsEntityOnRemoteScimId);
                 groupMember.setValue(externalIdAsEntityOnRemoteScimId.asString());
-                try {
-                    String refString = String.format("Users/%s", externalIdAsEntityOnRemoteScimId.asString());
-                    URI ref = new URI(refString);
-                    groupMember.setRef(ref.toString());
-                } catch (URISyntaxException e) {
-                    logger.warnf("bad ref uri for member " + member);
-                }
+                URI ref = getUri(ScimResourceType.USER, externalIdAsEntityOnRemoteScimId);
+                groupMember.setRef(ref.toString());
                 group.addMember(groupMember);
             } else {
                 logger.warnf("member %s not found for group %s", member, groupModel.getId());
-- 
GitLab