]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms/src/org/argeo/cms/internal/kernel/WebCmsSessionImpl.java
Rename doAs with exception in tryAs
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / internal / kernel / WebCmsSessionImpl.java
1 package org.argeo.cms.internal.kernel;
2
3 import java.util.ArrayList;
4 import java.util.Date;
5 import java.util.Hashtable;
6 import java.util.List;
7
8 import javax.servlet.http.HttpServletRequest;
9 import javax.servlet.http.HttpSession;
10
11 import org.apache.commons.logging.Log;
12 import org.apache.commons.logging.LogFactory;
13 import org.argeo.cms.auth.WebCmsSession;
14 import org.osgi.framework.BundleContext;
15 import org.osgi.framework.FrameworkUtil;
16 import org.osgi.framework.ServiceRegistration;
17 import org.osgi.service.http.HttpContext;
18 import org.osgi.service.useradmin.Authorization;
19
20 public class WebCmsSessionImpl implements WebCmsSession {
21 private final BundleContext bc = FrameworkUtil.getBundle(getClass()).getBundleContext();
22 private final static Log log = LogFactory.getLog(WebCmsSessionImpl.class);
23
24 private final String id;
25 private final Authorization authorization;
26
27 private List<SubHttpSession> subHttpSessions = new ArrayList<>();
28
29 private ServiceRegistration<WebCmsSession> serviceRegistration;
30
31 public WebCmsSessionImpl(String sessionId, Authorization authorization) {
32 this.id = sessionId;
33 this.authorization = authorization;
34 // register as service
35 Hashtable<String, String> props = new Hashtable<>();
36 props.put(WebCmsSession.CMS_DN, authorization.getName());
37 props.put(WebCmsSession.CMS_SESSION_ID, sessionId);
38 serviceRegistration = bc.registerService(WebCmsSession.class, this, props);
39 }
40
41 public void cleanUp() {
42 for (SubHttpSession subSession : subHttpSessions)
43 subSession.cleanUp();
44 serviceRegistration.unregister();
45 }
46
47 @Override
48 public Authorization getAuthorization() {
49 return authorization;
50 }
51
52 public ServiceRegistration<WebCmsSession> getServiceRegistration() {
53 return serviceRegistration;
54 }
55
56 public void addHttpSession(HttpServletRequest request) {
57 subHttpSessions.add(new SubHttpSession(request));
58 }
59
60 public String getId() {
61 return id;
62 }
63
64 public String toString() {
65 return "CMS Session #" + id;
66 }
67
68 static class SubHttpSession {
69 private final HttpSession httpSession;
70 private final String sessionId;
71 // private final String originalURI;
72 // private final String servletPath;
73
74 private final Date start = new Date();
75
76 public SubHttpSession(HttpServletRequest request) {
77 this.httpSession = request.getSession();
78 this.sessionId = httpSession.getId();
79 // this.originalURI = request.getRequestURI();
80 // this.servletPath = request.getServletPath();
81 }
82
83 public Date getStart() {
84 return start;
85 }
86
87 public void cleanUp() {
88 try {
89 httpSession.setAttribute(HttpContext.REMOTE_USER, null);
90 httpSession.setAttribute(HttpContext.AUTHORIZATION, null);
91 // httpSession.setMaxInactiveInterval(1);
92 } catch (Exception e) {
93 log.warn("Could not clean up " + sessionId, e);
94 }
95 }
96
97 }
98 }