From ce617daefd36d22cc20f0a565a4876b1f49ecfa8 Mon Sep 17 00:00:00 2001
From: Hugo Renard <hugo.renard@protonmail.com>
Date: Wed, 23 Mar 2022 14:13:48 +0100
Subject: [PATCH] update users when their role changes

---
 .../scim/event/ScimEventListenerProvider.java  | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/src/main/java/sh/libre/scim/event/ScimEventListenerProvider.java b/src/main/java/sh/libre/scim/event/ScimEventListenerProvider.java
index 2a48ec6..58d791c 100644
--- a/src/main/java/sh/libre/scim/event/ScimEventListenerProvider.java
+++ b/src/main/java/sh/libre/scim/event/ScimEventListenerProvider.java
@@ -91,6 +91,24 @@ public class ScimEventListenerProvider implements EventListenerProvider {
                 dispatcher.run((client) -> client.replace(UserAdapter.class, user));
             }
         }
+        if (event.getResourceType() == ResourceType.REALM_ROLE_MAPPING) {
+            Pattern pattern = Pattern.compile("^(.+)/(.+)/role-mappings");
+            Matcher matcher = pattern.matcher(event.getResourcePath());
+            if (matcher.find()) {
+                var type = matcher.group(1);
+                var id = matcher.group(2);
+                LOGGER.infof("%s %s %s roles", event.getOperationType(), type, id);
+                if (type.equals("users")) {
+                    var user = getUser(id);
+                    dispatcher.run((client) -> client.replace(UserAdapter.class, user));
+                } else if (type.equals("groups")) {
+                    var group = getGroup(id);
+                    session.users().getGroupMembersStream(session.getContext().getRealm(), group).forEach(user -> {
+                        dispatcher.run((client) -> client.replace(UserAdapter.class, user));
+                    });
+                }
+            }
+        }
     }
 
     private UserModel getUser(String id) {
-- 
GitLab