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
25
26
27
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
94
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
116
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 }