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