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 a9eebe460474560b07b08bf8aa7eef72b60f5250..3303cbfa642f7111cb864e4b36f00b17cc07002c 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() == null || user.getSamlToken().isEmpty(); + } + return false; } @Override