diff --git a/dspace-api/src/main/java/org/dspace/authenticate/IPAuthentication.java b/dspace-api/src/main/java/org/dspace/authenticate/IPAuthentication.java index 4c9a25acdb..99e19ef94a 100755 --- a/dspace-api/src/main/java/org/dspace/authenticate/IPAuthentication.java +++ b/dspace-api/src/main/java/org/dspace/authenticate/IPAuthentication.java @@ -195,6 +195,10 @@ public class IPAuthentication implements AuthenticationMethod public int[] getSpecialGroups(Context context, HttpServletRequest request) throws SQLException { + if (request == null) + { + return new int[0]; + } List groupIDs = new ArrayList(); String addr = request.getRemoteAddr(); diff --git a/dspace-api/src/main/java/org/dspace/authenticate/ShibAuthentication.java b/dspace-api/src/main/java/org/dspace/authenticate/ShibAuthentication.java index fc069a8e77..a98f953079 100644 --- a/dspace-api/src/main/java/org/dspace/authenticate/ShibAuthentication.java +++ b/dspace-api/src/main/java/org/dspace/authenticate/ShibAuthentication.java @@ -71,6 +71,10 @@ public class ShibAuthentication implements AuthenticationMethod public int authenticate(Context context, String username, String password, String realm, HttpServletRequest request) throws SQLException { + if (request == null) + { + return BAD_ARGS; + } log.info("Shibboleth login started..."); java.util.Enumeration names = request.getHeaderNames(); @@ -218,7 +222,7 @@ public class ShibAuthentication implements AuthenticationMethod public int[] getSpecialGroups(Context context, HttpServletRequest request) { // no user logged in or user not logged from shibboleth - if (context.getCurrentUser() == null + if (request == null || context.getCurrentUser() == null || request.getSession().getAttribute("shib.authenticated") == null) { return new int[0]; diff --git a/dspace-api/src/main/java/org/dspace/authenticate/X509Authentication.java b/dspace-api/src/main/java/org/dspace/authenticate/X509Authentication.java index d28b5d6612..bea219f65f 100755 --- a/dspace-api/src/main/java/org/dspace/authenticate/X509Authentication.java +++ b/dspace-api/src/main/java/org/dspace/authenticate/X509Authentication.java @@ -496,6 +496,10 @@ public class X509Authentication implements AuthenticationMethod public int[] getSpecialGroups(Context context, HttpServletRequest request) throws SQLException { + if (request == null) + { + return new int[0]; + } Boolean authenticated = false; HttpSession session = request.getSession(false); diff --git a/dspace-sword/dspace-sword-api/src/main/java/org/dspace/sword/SWORDAuthenticator.java b/dspace-sword/dspace-sword-api/src/main/java/org/dspace/sword/SWORDAuthenticator.java index 92d0ed478e..f036cad318 100644 --- a/dspace-sword/dspace-sword-api/src/main/java/org/dspace/sword/SWORDAuthenticator.java +++ b/dspace-sword/dspace-sword-api/src/main/java/org/dspace/sword/SWORDAuthenticator.java @@ -262,6 +262,15 @@ public class SWORDAuthenticator { authenticated = true; sc.setAuthenticated(ep); + // Set any special groups - invoke the authentication mgr. + int[] groupIDs = AuthenticationManager.getSpecialGroups(context, null); + + for (int i = 0; i < groupIDs.length; i++) + { + context.setSpecialGroup(groupIDs[i]); + log.debug("Adding Special Group id="+String.valueOf(groupIDs[i])); + } + sc.setAuthenticatorContext(context); sc.setContext(context); } @@ -283,6 +292,14 @@ public class SWORDAuthenticator sc.setOnBehalfOf(epObo); Context oboContext = this.constructContext(ip); oboContext.setCurrentUser(epObo); + // Set any special groups - invoke the authentication mgr. + int[] groupIDs = AuthenticationManager.getSpecialGroups(oboContext, null); + + for (int i = 0; i < groupIDs.length; i++) + { + oboContext.setSpecialGroup(groupIDs[i]); + log.debug("Adding Special Group id="+String.valueOf(groupIDs[i])); + } sc.setContext(oboContext); } else diff --git a/dspace/CHANGES b/dspace/CHANGES index 5b7661dbcd..6a78f82d35 100644 --- a/dspace/CHANGES +++ b/dspace/CHANGES @@ -113,6 +113,7 @@ - [DS-260] Template item some times has owningCollection filled and some times not - [DS-309] Shiboleth default roles are applied also to anonymous user and user logged-in with other methods - [DS-270] Make delegate admin permissions configurable + - [DS-436] SWORD Authenticator doesn't support the special groups infrastructure (Tim Donohue) - [DS-218] Cannot add/remove email subscriptions from Profile page in XMLUI