1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.cms.security.auth.callback;
35
36 import info.magnolia.cms.beans.config.MIMEMapping;
37 import info.magnolia.cms.i18n.Messages;
38 import info.magnolia.cms.i18n.MessagesManager;
39 import info.magnolia.cms.security.auth.login.LoginResult;
40 import info.magnolia.freemarker.FreemarkerUtil;
41 import info.magnolia.init.MagnoliaConfigurationProperties;
42
43 import java.util.HashMap;
44 import java.util.Map;
45
46 import javax.inject.Inject;
47 import javax.security.auth.login.LoginException;
48 import javax.servlet.http.HttpServletRequest;
49 import javax.servlet.http.HttpServletResponse;
50
51 import org.apache.commons.lang.ClassUtils;
52 import org.slf4j.Logger;
53 import org.slf4j.LoggerFactory;
54
55
56
57
58
59
60 public class FormClientCallback extends AbstractHttpClientCallback {
61
62 private static final Logger log = LoggerFactory.getLogger(FormClientCallback.class);
63
64 public static final String ERROR_STRING = "errorString";
65 public static final String SERVICE_CONTACT = "serviceContact";
66
67 private MagnoliaConfigurationProperties configurationProperties;
68 private String loginForm;
69
70 @Inject
71 public FormClientCallback(MagnoliaConfigurationProperties configurationProperties) {
72 this.configurationProperties = configurationProperties;
73 }
74
75 @Override
76 public void handle(HttpServletRequest request, HttpServletResponse response) {
77 try {
78 if (!response.isCommitted()) {
79 response.setContentType("text/html");
80 if (null == request.getCharacterEncoding()) {
81 response.setCharacterEncoding(MIMEMapping.getContentEncodingOrDefault("text/html"));
82 }
83 }
84 FreemarkerUtil.process(getLoginForm(), getMessages(), response.getWriter());
85 }
86 catch (Throwable t) {
87 log.error("exception while writing login template", t);
88 }
89 }
90
91 public String getLoginForm() {
92 return loginForm;
93 }
94
95 public void setLoginForm(String loginForm) {
96 this.loginForm = loginForm;
97 }
98
99
100
101
102
103
104 protected Map<String, Object> getMessages() {
105 LoginResult loginResult = LoginResult.getCurrentLoginResult();
106 LoginException exception = loginResult.getLoginException();
107 Map<String, Object> messages = new HashMap<String, Object>();
108 if (null != exception) {
109 final String exName = ClassUtils.getShortClassName(exception, null);
110 final Messages mm = MessagesManager.getMessages();
111 final String defaultMessage = mm.get("login.defaultError");
112 messages.put(ERROR_STRING, mm.getWithDefault("login." + exName, defaultMessage));
113 }
114 String serviceContact = this.configurationProperties.getProperty("magnolia.service.contact");
115 if (serviceContact != null) {
116 messages.put(SERVICE_CONTACT, serviceContact);
117 }
118 return messages;
119 }
120
121 }