From 316f5a90d6d565eb6b8e9567bb5e053a4603ac5a Mon Sep 17 00:00:00 2001 From: Alex Ivanov Date: Tue, 16 May 2017 17:41:00 -0400 Subject: [PATCH 1/4] Shibboleth SSO functionality --- .../iq/dataverse/DataverseHeaderFragment.java | 25 +++++++------------ .../settings/SettingsServiceBean.java | 7 +++++- src/main/webapp/dataverse_header.xhtml | 3 ++- src/main/webapp/logout.xhtml | 24 ++++++++++++++++++ 4 files changed, 41 insertions(+), 18 deletions(-) create mode 100644 src/main/webapp/logout.xhtml diff --git a/src/main/java/edu/harvard/iq/dataverse/DataverseHeaderFragment.java b/src/main/java/edu/harvard/iq/dataverse/DataverseHeaderFragment.java index 53aea4ea674..0cdfebad095 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DataverseHeaderFragment.java +++ b/src/main/java/edu/harvard/iq/dataverse/DataverseHeaderFragment.java @@ -13,6 +13,7 @@ import static edu.harvard.iq.dataverse.util.JsfHelper.JH; import edu.harvard.iq.dataverse.util.StringUtil; import edu.harvard.iq.dataverse.util.SystemConfig; +import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; @@ -24,6 +25,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import javax.ejb.EJB; +import javax.faces.context.ExternalContext; import javax.faces.context.FacesContext; import javax.faces.view.ViewScoped; import javax.inject.Inject; @@ -222,23 +224,14 @@ private TreeNode getDataverseNode(Dataverse dataverse, TreeNode root, boolean ex return null; } */ - public String logout() { + public void logout() throws IOException { + ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext(); + dataverseSession.setUser(null); - - String redirectPage = navigationWrapper.getPageFromContext(); - try { - redirectPage = URLDecoder.decode(redirectPage, "UTF-8"); - } catch (UnsupportedEncodingException ex) { - Logger.getLogger(LoginPage.class.getName()).log(Level.SEVERE, null, ex); - redirectPage = "dataverse.xhtml&alias=" + dataverseService.findRootDataverse().getAlias(); - } - - if (StringUtils.isEmpty(redirectPage)) { - redirectPage = "dataverse.xhtml&alias=" + dataverseService.findRootDataverse().getAlias(); - } - - logger.log(Level.INFO, "Sending user to = " + redirectPage); - return redirectPage + (redirectPage.indexOf("?") == -1 ? "?" : "&") + "faces-redirect=true"; + + String safeDefaultIfKeyNotFound = "https://idp.dev-aws.qdr.org/idp/profile/Logout"; + String shibLogoutUrl = settingsService.getValueForKey(SettingsServiceBean.Key.ShibLogoutUrl, safeDefaultIfKeyNotFound); + externalContext.redirect(shibLogoutUrl); } private Boolean signupAllowed = null; diff --git a/src/main/java/edu/harvard/iq/dataverse/settings/SettingsServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/settings/SettingsServiceBean.java index caeaa3627ad..794577caec6 100644 --- a/src/main/java/edu/harvard/iq/dataverse/settings/SettingsServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/settings/SettingsServiceBean.java @@ -235,7 +235,12 @@ public enum Key { /* Whether Harvesting (OAI) service is enabled */ - OAIServerEnabled; + OAIServerEnabled, + + /** + * URL for Shibboleth Single Logout + */ + ShibLogoutUrl; @Override public String toString() { diff --git a/src/main/webapp/dataverse_header.xhtml b/src/main/webapp/dataverse_header.xhtml index 7ff37ce6430..5bae3a6f1ae 100644 --- a/src/main/webapp/dataverse_header.xhtml +++ b/src/main/webapp/dataverse_header.xhtml @@ -105,7 +105,8 @@
  • - + + #{bundle.login}
  • diff --git a/src/main/webapp/logout.xhtml b/src/main/webapp/logout.xhtml new file mode 100644 index 00000000000..8cf3066ca9e --- /dev/null +++ b/src/main/webapp/logout.xhtml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + From 5883e1eed62aedebfe24ebbc6ad19cdfaa0bfb04 Mon Sep 17 00:00:00 2001 From: Alex Ivanov Date: Wed, 17 May 2017 15:08:56 -0400 Subject: [PATCH 2/4] passive authentication support for Shibboleth --- .../settings/SettingsServiceBean.java | 4 ++ .../iq/dataverse/util/SystemConfig.java | 5 +++ src/main/webapp/dataverse_template.xhtml | 3 ++ .../webapp/resources/js/shib/isPassive.js | 42 +++++++++++++++++++ 4 files changed, 54 insertions(+) create mode 100644 src/main/webapp/resources/js/shib/isPassive.js diff --git a/src/main/java/edu/harvard/iq/dataverse/settings/SettingsServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/settings/SettingsServiceBean.java index 794577caec6..c2d6d86b6b2 100644 --- a/src/main/java/edu/harvard/iq/dataverse/settings/SettingsServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/settings/SettingsServiceBean.java @@ -237,6 +237,10 @@ Whether Harvesting (OAI) service is enabled */ OAIServerEnabled, + /** + * Whether Shibboleth passive authentication mode is enabled + */ + ShibPassiveLoginEnabled, /** * URL for Shibboleth Single Logout */ diff --git a/src/main/java/edu/harvard/iq/dataverse/util/SystemConfig.java b/src/main/java/edu/harvard/iq/dataverse/util/SystemConfig.java index 0cb29add1d9..d44d224028c 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/SystemConfig.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/SystemConfig.java @@ -639,5 +639,10 @@ public String getOAuth2CallbackUrl() { } return saneDefault; } + + public boolean isShibPassiveLoginEnabled() { + boolean defaultResponse = false; + return settingsService.isTrueForKey(SettingsServiceBean.Key.ShibPassiveLoginEnabled, defaultResponse); + } } diff --git a/src/main/webapp/dataverse_template.xhtml b/src/main/webapp/dataverse_template.xhtml index fa8b48994e5..f86b55d3045 100644 --- a/src/main/webapp/dataverse_template.xhtml +++ b/src/main/webapp/dataverse_template.xhtml @@ -77,6 +77,9 @@ + + + - - + From 63b88283e5fe3f30040b1b2dbaab42e0010f524b Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 22 May 2017 22:54:45 -0400 Subject: [PATCH 4/4] Update dataverse_template.xhtml --- src/main/webapp/dataverse_template.xhtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/webapp/dataverse_template.xhtml b/src/main/webapp/dataverse_template.xhtml index f86b55d3045..7cd37cc13cd 100644 --- a/src/main/webapp/dataverse_template.xhtml +++ b/src/main/webapp/dataverse_template.xhtml @@ -76,7 +76,7 @@ - +