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
58 public class FormClientCallback extends AbstractHttpClientCallback {
59
60 private static final Logger log = LoggerFactory.getLogger(FormClientCallback.class);
61
62 public static final String ERROR_STRING = "errorString";
63
64 private String loginForm;
65
66 public void doCallback(HttpServletRequest request, HttpServletResponse response) {
67 try {
68 if (!response.isCommitted()) {
69 response.setContentType("text/html");
70 if (null == request.getCharacterEncoding()) {
71 response.setCharacterEncoding(MIMEMapping.getContentEncodingOrDefault("text/html"));
72 }
73 }
74 FreemarkerUtil.process(getLoginForm(), getMessages(), response.getWriter());
75 }
76 catch (Throwable t) {
77 log.error("exception while writing login template", t);
78 }
79 }
80
81 public String getLoginForm() {
82 return loginForm;
83 }
84
85 public void setLoginForm(String loginForm) {
86 this.loginForm = loginForm;
87 }
88
89
90
91
92
93
94 protected Map<String, String> getMessages() {
95 LoginResult loginResult = LoginResult.getCurrentLoginResult();
96 LoginException exception = loginResult.getLoginException();
97 Map<String, String> messages = new HashMap<String, String>();
98 if (null != exception) {
99 final String exName = ClassUtils.getShortClassName(exception, null);
100 final Messages mm = MessagesManager.getMessages();
101 final String defaultMessage = mm.get("login.defaultError");
102 messages.put(ERROR_STRING, mm.getWithDefault("login." + exName, defaultMessage));
103 }
104 return messages;
105 }
106
107 }