View Javadoc

1   package org.appfuse.webapp.pages;
2   
3   import org.apache.tapestry5.Asset;
4   import org.apache.tapestry5.alerts.AlertManager;
5   import org.apache.tapestry5.annotations.*;
6   import org.apache.tapestry5.ioc.Messages;
7   import org.apache.tapestry5.ioc.annotations.Inject;
8   import org.apache.tapestry5.ioc.annotations.Symbol;
9   import org.apache.tapestry5.ioc.annotations.Value;
10  import org.apache.tapestry5.json.JSONObject;
11  import org.apache.tapestry5.services.Context;
12  import org.apache.tapestry5.services.PageRenderLinkSource;
13  import org.apache.tapestry5.services.Request;
14  import org.apache.tapestry5.services.javascript.JavaScriptSupport;
15  import org.appfuse.Constants;
16  import org.appfuse.webapp.AppFuseSymbolConstants;
17  import org.slf4j.Logger;
18  import org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter;
19  
20  import java.util.HashMap;
21  import java.util.Map;
22  
23  /**
24   * Login Page
25   *
26   * @author Serge Eby
27   * @version $Id: Login.java 5 2008-08-30 09:59:21Z serge.eby $
28   */
29  
30  
31  @Import(library = {"context:scripts/lib/plugins/jquery.cookie.js","context:scripts/login.js"})
32  public class Login {
33  
34      @Inject
35      private Logger logger;
36  
37      @Inject
38      @Symbol(AppFuseSymbolConstants.SECURITY_URL)
39      private String securityUrl;
40  
41      @Inject
42      private Request request;
43  
44      @Inject
45      private Messages messages;
46  
47      @Inject
48      private AlertManager alertManager;
49  
50      @Inject
51      private PageRenderLinkSource pageRendererLinkSource;
52  
53  
54      @Environmental
55      private JavaScriptSupport javascriptSupport;
56  
57      @Property
58      private String errorMessage;
59  
60  
61      @Inject
62      private Context context;
63  
64  
65      @Log
66      void onActivate(String loginError) {
67          if ("error".equals(loginError)) {
68              this.errorMessage = ((Exception) request
69                      .getSession(true)
70                      .getAttribute(AbstractAuthenticationProcessingFilter.SPRING_SECURITY_LAST_EXCEPTION_KEY))
71                      .getMessage();
72              logger.error(String.format("Error while attempting to login: %s",
73                      errorMessage));
74          }
75  
76      }
77  
78      String onPassivate() {
79          return errorMessage;
80      }
81  
82      void afterRender() {
83          JSONObject spec = new JSONObject();
84          String requiredUsernameError = messages.format("errors.required",
85                  messages.get("label.username"));
86          String requiredPasswordError = messages.format("errors.required",
87                  messages.get("label.password"));
88          spec.put("url", createLink(this.getClass()))
89                  .put("passwordHintLink", createLink(PasswordHint.class))
90                  .put("requiredUsername", requiredUsernameError)
91                  .put("requiredPassword", requiredPasswordError);
92  
93          // javascriptSupport.addScript("initialize(%s);", spec);
94        //  javascriptSupport.addInitializerCall("loginHint", spec);
95  
96      }
97  
98  
99      public String getSpringSecurityUrl() {
100         return request.getContextPath() + securityUrl;
101     }
102 
103     void cleanupRender() {
104         this.errorMessage = null;
105     }
106 
107     @SuppressWarnings("unchecked")
108     public boolean isRememberMeEnabled() {
109         try {
110             Map config = (HashMap) context.getAttribute(Constants.CONFIG);
111             if (config != null) {
112                 return (config.get("rememberMeEnabled") != null);
113             }
114         } catch (UnsupportedOperationException uoe) {
115             // only happens in tests
116             // getAttribute() is not supported for ContextForPageTester
117             logger.warn(uoe.getMessage());
118         }
119         return false;
120     }
121 
122     public String getSignupLink() {
123         String link = createLink(Signup.class);
124         return messages.format("login.signup", link);
125     }
126 
127 
128     private String createLink(Class clazz) {
129         return pageRendererLinkSource.createPageRenderLink(clazz).toAbsoluteURI();
130     }
131 
132 }