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 }