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 javax.servlet.http.HttpServletResponse;
37 import javax.servlet.http.HttpServletRequest;
38 import javax.security.auth.login.LoginException;
39
40 import java.util.HashMap;
41 import java.util.Map;
42
43 import info.magnolia.freemarker.FreemarkerUtil;
44 import info.magnolia.cms.beans.config.MIMEMapping;
45 import info.magnolia.cms.i18n.MessagesManager;
46 import info.magnolia.cms.i18n.Messages;
47 import info.magnolia.cms.security.auth.login.LoginResult;
48
49 import org.slf4j.Logger;
50 import org.slf4j.LoggerFactory;
51 import org.apache.commons.lang.ClassUtils;
52
53
54
55
56
57 public class FormClientCallback extends AbstractHttpClientCallback {
58
59 private static final Logger log = LoggerFactory.getLogger(FormClientCallback.class);
60
61 public static final String ERROR_STRING = "errorString";
62
63 private String loginForm;
64
65 public void doCallback(HttpServletRequest request, HttpServletResponse response) {
66 try {
67 if (!response.isCommitted()) {
68 response.setContentType("text/html");
69 if (null == request.getCharacterEncoding()) {
70 response.setCharacterEncoding(MIMEMapping.getContentEncodingOrDefault("text/html"));
71 }
72 }
73 FreemarkerUtil.process(getLoginForm(), getMessages(), response.getWriter());
74 }
75 catch (Throwable t) {
76 log.error("exception while writing login template", t);
77 }
78 }
79
80 public String getLoginForm() {
81 return loginForm;
82 }
83
84 public void setLoginForm(String loginForm) {
85 this.loginForm = loginForm;
86 }
87
88
89
90
91
92
93 protected Map<String, String> getMessages() {
94 LoginResult loginResult = LoginResult.getCurrentLoginResult();
95 LoginException exception = loginResult.getLoginException();
96 Map<String, String> messages = new HashMap<String, String>();
97 if (null != exception) {
98 final String exName = ClassUtils.getShortClassName(exception, null);
99 final Messages mm = MessagesManager.getMessages();
100 final String defaultMessage = mm.get("login.defaultError");
101 messages.put(ERROR_STRING, mm.getWithDefault("login." + exName, defaultMessage));
102 }
103 return messages;
104 }
105
106 }