]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms/src/org/argeo/cms/auth/AnonymousLoginModule.java
Store UI context data in CMS View.
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / auth / AnonymousLoginModule.java
1 package org.argeo.cms.auth;
2
3 import java.util.Locale;
4 import java.util.Map;
5
6 import javax.security.auth.Subject;
7 import javax.security.auth.callback.CallbackHandler;
8 import javax.security.auth.login.LoginException;
9 import javax.security.auth.spi.LoginModule;
10 import javax.servlet.http.HttpServletRequest;
11
12 import org.apache.commons.logging.Log;
13 import org.apache.commons.logging.LogFactory;
14 import org.osgi.framework.BundleContext;
15 import org.osgi.framework.FrameworkUtil;
16 import org.osgi.service.useradmin.Authorization;
17 import org.osgi.service.useradmin.UserAdmin;
18
19 /** Anonymous CMS user */
20 public class AnonymousLoginModule implements LoginModule {
21 private final static Log log = LogFactory.getLog(AnonymousLoginModule.class);
22
23 private Subject subject;
24 private Map<String, Object> sharedState = null;
25
26 // private state
27 private BundleContext bc;
28
29 @SuppressWarnings("unchecked")
30 @Override
31 public void initialize(Subject subject, CallbackHandler callbackHandler, Map<String, ?> sharedState,
32 Map<String, ?> options) {
33 this.subject = subject;
34 this.sharedState = (Map<String, Object>) sharedState;
35 try {
36 bc = FrameworkUtil.getBundle(AnonymousLoginModule.class).getBundleContext();
37 assert bc != null;
38 } catch (Exception e) {
39 throw new IllegalStateException("Cannot initialize login module", e);
40 }
41 }
42
43 @Override
44 public boolean login() throws LoginException {
45 return true;
46 }
47
48 @Override
49 public boolean commit() throws LoginException {
50 UserAdmin userAdmin = bc.getService(bc.getServiceReference(UserAdmin.class));
51 Authorization authorization = userAdmin.getAuthorization(null);
52 HttpServletRequest request = (HttpServletRequest) sharedState.get(CmsAuthUtils.SHARED_STATE_HTTP_REQUEST);
53 Locale locale = Locale.getDefault();
54 if (request != null)
55 locale = request.getLocale();
56 CmsAuthUtils.addAuthorization(subject, authorization);
57 CmsAuthUtils.registerSessionAuthorization(request, subject, authorization, locale);
58 if (log.isTraceEnabled())
59 log.trace("Anonymous logged in to CMS: " + subject);
60 return true;
61 }
62
63 @Override
64 public boolean abort() throws LoginException {
65 return true;
66 }
67
68 @Override
69 public boolean logout() throws LoginException {
70 if (log.isTraceEnabled())
71 log.trace("Logging out anonymous from CMS... " + subject);
72 CmsAuthUtils.cleanUp(subject);
73 return true;
74 }
75 }