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