Mercurial > hg > LGDataverses
comparison src/main/java/edu/harvard/iq/dataverse/LoginPage.java @ 10:a50cf11e5178
Rewrite LGDataverse completely upgrading to dataverse4.0
| author | Zoe Hong <zhong@mpiwg-berlin.mpg.de> |
|---|---|
| date | Tue, 08 Sep 2015 17:00:21 +0200 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 9:5926d6419569 | 10:a50cf11e5178 |
|---|---|
| 1 package edu.harvard.iq.dataverse; | |
| 2 | |
| 3 import static edu.harvard.iq.dataverse.util.JsfHelper.JH; | |
| 4 | |
| 5 import java.io.UnsupportedEncodingException; | |
| 6 import java.net.URLDecoder; | |
| 7 import java.util.Iterator; | |
| 8 import java.util.LinkedList; | |
| 9 import java.util.List; | |
| 10 import java.util.logging.Level; | |
| 11 import java.util.logging.Logger; | |
| 12 | |
| 13 import javax.ejb.EJB; | |
| 14 import javax.faces.application.FacesMessage; | |
| 15 import javax.faces.event.AjaxBehaviorEvent; | |
| 16 import javax.faces.view.ViewScoped; | |
| 17 import javax.inject.Inject; | |
| 18 import javax.inject.Named; | |
| 19 | |
| 20 import edu.harvard.iq.dataverse.authorization.AuthenticationProvider; | |
| 21 import edu.harvard.iq.dataverse.authorization.AuthenticationProviderDisplayInfo; | |
| 22 import edu.harvard.iq.dataverse.authorization.AuthenticationRequest; | |
| 23 import edu.harvard.iq.dataverse.authorization.AuthenticationResponse; | |
| 24 import edu.harvard.iq.dataverse.authorization.AuthenticationServiceBean; | |
| 25 import edu.harvard.iq.dataverse.authorization.CredentialsAuthenticationProvider; | |
| 26 import edu.harvard.iq.dataverse.authorization.exceptions.AuthenticationFailedException; | |
| 27 import edu.harvard.iq.dataverse.authorization.providers.builtin.BuiltinUserServiceBean; | |
| 28 import edu.harvard.iq.dataverse.authorization.users.AuthenticatedUser; | |
| 29 import edu.harvard.iq.dataverse.settings.SettingsServiceBean; | |
| 30 import edu.harvard.iq.dataverse.util.JsfHelper; | |
| 31 | |
| 32 /** | |
| 33 * | |
| 34 * @author xyang | |
| 35 * @author Michael Bar-Sinai | |
| 36 */ | |
| 37 @ViewScoped | |
| 38 @Named("LoginPage") | |
| 39 public class LoginPage implements java.io.Serializable { | |
| 40 private static final Logger logger = Logger.getLogger(LoginPage.class.getName()); | |
| 41 public static class FilledCredential { | |
| 42 CredentialsAuthenticationProvider.Credential credential; | |
| 43 String value; | |
| 44 | |
| 45 public FilledCredential() { | |
| 46 } | |
| 47 | |
| 48 public FilledCredential(CredentialsAuthenticationProvider.Credential credential, String value) { | |
| 49 this.credential = credential; | |
| 50 this.value = value; | |
| 51 } | |
| 52 | |
| 53 public CredentialsAuthenticationProvider.Credential getCredential() { | |
| 54 return credential; | |
| 55 } | |
| 56 | |
| 57 public void setCredential(CredentialsAuthenticationProvider.Credential credential) { | |
| 58 this.credential = credential; | |
| 59 } | |
| 60 | |
| 61 public String getValue() { | |
| 62 return value; | |
| 63 } | |
| 64 | |
| 65 public void setValue(String value) { | |
| 66 this.value = value; | |
| 67 } | |
| 68 | |
| 69 } | |
| 70 | |
| 71 public enum EditMode {LOGIN, SUCCESS, FAILED}; | |
| 72 | |
| 73 @Inject DataverseSession session; | |
| 74 | |
| 75 @EJB | |
| 76 DataverseServiceBean dataverseService; | |
| 77 | |
| 78 @EJB | |
| 79 BuiltinUserServiceBean dataverseUserService; | |
| 80 | |
| 81 @EJB | |
| 82 UserServiceBean userService; | |
| 83 | |
| 84 @EJB | |
| 85 AuthenticationServiceBean authSvc; | |
| 86 | |
| 87 @EJB | |
| 88 SettingsServiceBean settingsService; | |
| 89 | |
| 90 private String credentialsAuthProviderId; | |
| 91 | |
| 92 private List<FilledCredential> filledCredentials; | |
| 93 | |
| 94 private String redirectPage = "dataverse.xhtml"; | |
| 95 | |
| 96 public void init() { | |
| 97 Iterator<String> credentialsIterator = authSvc.getAuthenticationProviderIdsOfType( CredentialsAuthenticationProvider.class ).iterator(); | |
| 98 if ( credentialsIterator.hasNext() ) { | |
| 99 setCredentialsAuthProviderId(credentialsIterator.next()); | |
| 100 } | |
| 101 resetFilledCredentials(null); | |
| 102 } | |
| 103 | |
| 104 public boolean isAuthenticationProvidersAvailable() { | |
| 105 return ! authSvc.getAuthenticationProviderIds().isEmpty(); | |
| 106 } | |
| 107 | |
| 108 public List<AuthenticationProviderDisplayInfo> listCredentialsAuthenticationProviders() { | |
| 109 List<AuthenticationProviderDisplayInfo> infos = new LinkedList<>(); | |
| 110 for ( String id : authSvc.getAuthenticationProviderIdsOfType( CredentialsAuthenticationProvider.class ) ) { | |
| 111 AuthenticationProvider authenticationProvider = authSvc.getAuthenticationProvider(id); | |
| 112 infos.add( authenticationProvider.getInfo()); | |
| 113 } | |
| 114 return infos; | |
| 115 } | |
| 116 | |
| 117 public List<AuthenticationProviderDisplayInfo> listAuthenticationProviders() { | |
| 118 List<AuthenticationProviderDisplayInfo> infos = new LinkedList<>(); | |
| 119 for ( String id : authSvc.getAuthenticationProviderIds() ) { | |
| 120 AuthenticationProvider authenticationProvider = authSvc.getAuthenticationProvider(id); | |
| 121 infos.add( authenticationProvider.getInfo()); | |
| 122 } | |
| 123 return infos; | |
| 124 } | |
| 125 | |
| 126 public CredentialsAuthenticationProvider selectedCredentialsProvider() { | |
| 127 return (CredentialsAuthenticationProvider) authSvc.getAuthenticationProvider(getCredentialsAuthProviderId()); | |
| 128 } | |
| 129 | |
| 130 public boolean validatePassword(String username, String password) { | |
| 131 return false; | |
| 132 } | |
| 133 | |
| 134 public String login() { | |
| 135 | |
| 136 AuthenticationRequest authReq = new AuthenticationRequest(); | |
| 137 List<FilledCredential> filledCredentialsList = getFilledCredentials(); | |
| 138 if ( filledCredentialsList == null ) { | |
| 139 logger.info("Credential list is null!"); | |
| 140 return null; | |
| 141 } | |
| 142 | |
| 143 logger.info("Credential list:" + filledCredentialsList); | |
| 144 | |
| 145 for ( FilledCredential fc : filledCredentialsList ) { | |
| 146 if(fc.getValue()==null || fc.getValue().isEmpty()){ | |
| 147 JH.addMessage(FacesMessage.SEVERITY_ERROR, "Please enter a "+fc.getCredential().getTitle()); | |
| 148 } | |
| 149 authReq.putCredential(fc.getCredential().getTitle(), fc.getValue()); | |
| 150 } | |
| 151 authReq.setIpAddress( session.getUser().getRequestMetadata().getIpAddress() ); | |
| 152 try { | |
| 153 AuthenticatedUser r = authSvc.authenticate(credentialsAuthProviderId, authReq); | |
| 154 logger.log(Level.FINE, "User authenticated: {0}", r.getEmail()); | |
| 155 session.setUser(r); | |
| 156 | |
| 157 if ("dataverse.xhtml".equals(redirectPage)) { | |
| 158 redirectPage = redirectPage + "&alias=" + dataverseService.findRootDataverse().getAlias(); | |
| 159 } | |
| 160 | |
| 161 try { | |
| 162 redirectPage = URLDecoder.decode(redirectPage, "UTF-8"); | |
| 163 } catch (UnsupportedEncodingException ex) { | |
| 164 Logger.getLogger(LoginPage.class.getName()).log(Level.SEVERE, null, ex); | |
| 165 redirectPage = "dataverse.xhtml&alias=" + dataverseService.findRootDataverse().getAlias(); | |
| 166 } | |
| 167 | |
| 168 logger.log(Level.FINE, "Sending user to = {0}", redirectPage); | |
| 169 | |
| 170 return redirectPage + (!redirectPage.contains("?") ? "?" : "&") + "faces-redirect=true"; | |
| 171 | |
| 172 | |
| 173 } catch (AuthenticationFailedException ex) { | |
| 174 AuthenticationResponse response = ex.getResponse(); | |
| 175 switch ( response.getStatus() ) { | |
| 176 case FAIL: | |
| 177 JsfHelper.addErrorMessage(JH.localize("login.invaliduserpassword")); | |
| 178 return null; | |
| 179 case ERROR: | |
| 180 JsfHelper.addErrorMessage(JH.localize("login.error")); | |
| 181 logger.log( Level.WARNING, "Error logging in: " + response.getMessage(), response.getError() ); | |
| 182 return null; | |
| 183 case BREAKOUT: | |
| 184 return response.getMessage(); | |
| 185 default: | |
| 186 JsfHelper.addErrorMessage("INTERNAL ERROR"); | |
| 187 return null; | |
| 188 } | |
| 189 } | |
| 190 | |
| 191 } | |
| 192 | |
| 193 public String getCredentialsAuthProviderId() { | |
| 194 return credentialsAuthProviderId; | |
| 195 } | |
| 196 | |
| 197 public void resetFilledCredentials( AjaxBehaviorEvent event) { | |
| 198 if ( selectedCredentialsProvider()==null ) return; | |
| 199 | |
| 200 filledCredentials = new LinkedList<>(); | |
| 201 for ( CredentialsAuthenticationProvider.Credential c : selectedCredentialsProvider().getRequiredCredentials() ) { | |
| 202 filledCredentials.add( new FilledCredential(c, "")); | |
| 203 } | |
| 204 } | |
| 205 | |
| 206 public void setCredentialsAuthProviderId(String authProviderId) { | |
| 207 this.credentialsAuthProviderId = authProviderId; | |
| 208 } | |
| 209 | |
| 210 public List<FilledCredential> getFilledCredentials() { | |
| 211 return filledCredentials; | |
| 212 } | |
| 213 | |
| 214 public void setFilledCredentials(List<FilledCredential> filledCredentials) { | |
| 215 this.filledCredentials = filledCredentials; | |
| 216 } | |
| 217 | |
| 218 public boolean isMultipleProvidersAvailable() { | |
| 219 return authSvc.getAuthenticationProviderIds().size()>1; | |
| 220 } | |
| 221 | |
| 222 public String getRedirectPage() { | |
| 223 return redirectPage; | |
| 224 } | |
| 225 | |
| 226 public void setRedirectPage(String redirectPage) { | |
| 227 this.redirectPage = redirectPage; | |
| 228 } | |
| 229 | |
| 230 } |
