From 5ab75c9b7a8404071c39bab63259a9d4d95b88b1 Mon Sep 17 00:00:00 2001
From: pkazimierowski <pkazimierowski@man.poznan.pl>
Date: Wed, 9 Apr 2025 09:01:21 +0200
Subject: [PATCH 1/2] extended conditions for saml token

---
 .../service/impl/OidcUserServiceImpl.java     | 26 +++++++------------
 1 file changed, 10 insertions(+), 16 deletions(-)

diff --git a/src/main/java/net/geant/nmaas/portal/service/impl/OidcUserServiceImpl.java b/src/main/java/net/geant/nmaas/portal/service/impl/OidcUserServiceImpl.java
index a9eebe460..6b6b264f5 100644
--- a/src/main/java/net/geant/nmaas/portal/service/impl/OidcUserServiceImpl.java
+++ b/src/main/java/net/geant/nmaas/portal/service/impl/OidcUserServiceImpl.java
@@ -51,14 +51,15 @@ public class OidcUserServiceImpl implements OidcUserService {
                 .existsBySamlToken(oidcUserSub);
         boolean existUserByUsernameAsSamlToken = userService
                 .existsBySamlToken(oidcUserPreferredUsername);
-        boolean existUserByEmail = userService
-                .existsByEmail(oidcUserEmail);
+        boolean existsUserBySamlTokenAsEmail = userService
+                .existsBySamlToken(oidcUserEmail);
 
         if (existUserBySamlToken) {
             return userService
                     .findBySamlToken(oidcUserSub)
                     .orElseThrow();
-        } else if (existUserByUsernameAsSamlToken) {
+        } else if (existUserByUsernameAsSamlToken
+                || existsUserBySamlTokenAsEmail) {
             User user = userService
                     .findBySamlToken(oidcUserPreferredUsername)
                     .orElseThrow();
@@ -71,7 +72,7 @@ public class OidcUserServiceImpl implements OidcUserService {
                         + oidcUserPreferredUsername
                         + " does not match internal user ");
             }
-        }  else {
+        } else {
             return registerNewUser(oidcUser);
         }
     }
@@ -116,20 +117,13 @@ public class OidcUserServiceImpl implements OidcUserService {
     @Override
     public boolean externalUserRequiredLinking(OidcUser oidcUser) {
 
-        String oidcUserSub = oidcUser.getAttribute("sub");
         String oidcUserEmail = oidcUser.getAttribute("email");
-        String oidcUserPreferredUsername = oidcUser.getAttribute("preferred_username");
-
-        boolean existUserBySamlToken = userService
-                .existsBySamlToken(oidcUserSub);
-        boolean existUserByUsernameAsSamlToken = userService
-                .existsBySamlToken(oidcUserPreferredUsername);
-        boolean existUserByEmail = userService
-                .existsByEmail(oidcUserEmail);
 
-        if(existUserBySamlToken || existUserByUsernameAsSamlToken) {
-            return false;
-        }else return existUserByEmail;
+        if(userService.existsByEmail(oidcUserEmail)){
+            User user = userService.findByEmail(oidcUserEmail);
+            return user.getSamlToken().isEmpty();
+        }
+        return false;
     }
 
     @Override
-- 
GitLab


From e8bb7c9aab720cdb5aa93c7fa32914349473d4cf Mon Sep 17 00:00:00 2001
From: pkazimierowski <pkazimierowski@man.poznan.pl>
Date: Wed, 9 Apr 2025 09:13:31 +0200
Subject: [PATCH 2/2] fixed condition

---
 .../geant/nmaas/portal/service/impl/OidcUserServiceImpl.java    | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/main/java/net/geant/nmaas/portal/service/impl/OidcUserServiceImpl.java b/src/main/java/net/geant/nmaas/portal/service/impl/OidcUserServiceImpl.java
index 6b6b264f5..3303cbfa6 100644
--- a/src/main/java/net/geant/nmaas/portal/service/impl/OidcUserServiceImpl.java
+++ b/src/main/java/net/geant/nmaas/portal/service/impl/OidcUserServiceImpl.java
@@ -121,7 +121,7 @@ public class OidcUserServiceImpl implements OidcUserService {
 
         if(userService.existsByEmail(oidcUserEmail)){
             User user = userService.findByEmail(oidcUserEmail);
-            return user.getSamlToken().isEmpty();
+            return user.getSamlToken() == null || user.getSamlToken().isEmpty();
         }
         return false;
     }
-- 
GitLab