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