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.cms.util.SimpleFreemarkerHelper;
41 import info.magnolia.context.MgnlContext;
42 import info.magnolia.init.MagnoliaConfigurationProperties;
43
44 import java.util.HashMap;
45 import java.util.Map;
46
47 import javax.inject.Inject;
48 import javax.security.auth.login.LoginException;
49 import javax.servlet.http.HttpServletRequest;
50 import javax.servlet.http.HttpServletResponse;
51
52 import org.apache.commons.lang3.ClassUtils;
53 import org.slf4j.Logger;
54 import org.slf4j.LoggerFactory;
55
56
57
58
59
60
61
62
63 public class FormClientCallback extends AbstractHttpClientCallback {
64
65 private static final Logger log = LoggerFactory.getLogger(FormClientCallback.class);
66
67 public static final String ERROR_STRING = "errorString";
68 public static final String SERVICE_CONTACT = "serviceContact";
69 private final SimpleFreemarkerHelper freemarkerHelper;
70
71 private MagnoliaConfigurationProperties configurationProperties;
72 private String loginForm;
73
74 @Inject
75 public FormClientCallback(MagnoliaConfigurationProperties configurationProperties) {
76 this.configurationProperties = configurationProperties;
77 this.freemarkerHelper = new SimpleFreemarkerHelper(getClass(), false);
78 }
79
80 @Override
81 public void handle(HttpServletRequest request, HttpServletResponse response) {
82 try {
83 if (!response.isCommitted()) {
84 response.setContentType("text/html");
85 if (null == request.getCharacterEncoding()) {
86 response.setCharacterEncoding(MIMEMapping.getContentEncodingOrDefault("text/html"));
87 }
88 }
89 freemarkerHelper.render(getLoginForm(), getTemplateContext(), response.getWriter());
90 } catch (Throwable t) {
91 log.error("exception while writing login template", t);
92 }
93 }
94
95 public String getLoginForm() {
96 return loginForm;
97 }
98
99 public void setLoginForm(String loginForm) {
100 this.loginForm = loginForm;
101 }
102
103
104
105
106 @Deprecated
107 protected Map<String, Object> getMessages() {
108 return new HashMap<>();
109 }
110
111
112
113
114
115
116
117 protected Map<String, Object> getTemplateContext() {
118 LoginResult loginResult = LoginResult.getCurrentLoginResult();
119 LoginException exception = loginResult.getLoginException();
120 Map<String, Object> tplCtx = new HashMap<String, Object>();
121 if (null != exception) {
122 final String exName = ClassUtils.getShortClassName(exception, null);
123 final Messages mm = MessagesManager.getMessages();
124 final String defaultMessage = mm.get("login.defaultError");
125 tplCtx.put(ERROR_STRING, mm.getWithDefault("login." + exName, defaultMessage));
126 }
127 tplCtx.put("loginError", Boolean.valueOf(loginResult.getStatus() == LoginResult.STATUS_FAILED));
128
129 String serviceContact = this.configurationProperties.getProperty("magnolia.service.contact");
130 if (serviceContact != null) {
131 tplCtx.put(SERVICE_CONTACT, serviceContact);
132 }
133
134 tplCtx.put("contextPath", MgnlContext.getContextPath());
135
136
137 final Map<String, Object> deprecatedMethodResult = getMessages();
138 tplCtx.putAll(deprecatedMethodResult);
139
140
141 return tplCtx;
142 }
143
144 }