CmsDeployment cmsDeployment;
- public CmsJcrDeployment() {
-// initTrackers();
- }
-
public void start() {
dataModels = new DataModels(bc);
// }
protected void registerRepositoryServlets(String alias, Repository repository) {
- // FIXME re-enable it with a proper class loader
-// registerRemotingServlet(alias, repository);
-// registerWebdavServlet(alias, repository);
+ registerRemotingServlet(alias, repository);
+ registerWebdavServlet(alias, repository);
}
protected void registerWebdavServlet(String alias, Repository repository) {
import javax.servlet.http.HttpServletRequest;
import org.apache.jackrabbit.server.SessionProvider;
-import org.argeo.api.cms.CmsSession;
-import org.argeo.api.cms.CmsLog;
import org.argeo.api.cms.CmsConstants;
+import org.argeo.api.cms.CmsLog;
+import org.argeo.api.cms.CmsSession;
+import org.argeo.cms.auth.RemoteAuthUtils;
+import org.argeo.cms.servlet.ServletHttpRequest;
import org.argeo.jcr.JcrUtils;
/**
// if (workspace == null)
// return null;
-// CmsSessionImpl cmsSession = WebCmsSessionImpl.getCmsSession(request);
- // FIXME retrieve CMS session
- CmsSession cmsSession = null;
+ CmsSession cmsSession = RemoteAuthUtils.getCmsSession(new ServletHttpRequest(request));
+ // CmsSessionImpl cmsSession = WebCmsSessionImpl.getCmsSession(request);
if (log.isTraceEnabled()) {
log.trace("Get JCR session from " + cmsSession);
}
private CmsDataSession(CmsSession cmsSession) {
this.cmsSession = cmsSession;
+ cmsSession.addOnCloseCallback((sess) -> close());
}
public Session newDataSession(String cn, String workspace, Repository repository) {
"CMS session " + cmsSession.getUuid() + " is not valid since " + cmsSession.getEnd());
}
- private void close() {
- // FIXME class this when CMS session is closed
+ protected void close() {
synchronized (this) {
// TODO check data session in use ?
for (String path : dataSessions.keySet())
import java.time.ZonedDateTime;
import java.util.Locale;
import java.util.UUID;
+import java.util.function.Consumer;
import javax.naming.ldap.LdapName;
import javax.security.auth.Subject;
UUID getUuid();
String getUserRole();
-
+
LdapName getUserDn();
String getLocalId();
String getDisplayName();
// Authorization getAuthorization();
-
+
Subject getSubject();
boolean isAnonymous();
boolean isValid();
void registerView(String uid, Object view);
+
+ void addOnCloseCallback(Consumer<CmsSession> onClose);
}
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.time.ZonedDateTime;
+import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Hashtable;
+import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
+import java.util.function.Consumer;
import javax.crypto.SecretKey;
import javax.naming.InvalidNameException;
import javax.security.auth.login.LoginException;
import javax.security.auth.x500.X500Principal;
-import org.argeo.api.cms.CmsSession;
+import org.argeo.api.cms.CmsAuth;
import org.argeo.api.cms.CmsLog;
+import org.argeo.api.cms.CmsSession;
import org.argeo.cms.security.NodeSecurityUtils;
-import org.argeo.api.cms.CmsAuth;
import org.osgi.framework.BundleContext;
import org.osgi.framework.FrameworkUtil;
import org.osgi.framework.InvalidSyntaxException;
private Map<String, Object> views = new HashMap<>();
+ private List<Consumer<CmsSession>> onCloseCallbacks = Collections.synchronizedList(new ArrayList<>());
+
public CmsSessionImpl(Subject initialSubject, Authorization authorization, Locale locale, String localSessionId) {
this.creationTime = ZonedDateTime.now();
this.locale = locale;
end = ZonedDateTime.now();
serviceRegistration.unregister();
+ for (Consumer<CmsSession> onClose : onCloseCallbacks) {
+ onClose.accept(this);
+ }
+
try {
LoginContext lc;
if (isAnonymous()) {
log.debug("Closed " + this);
}
+ @Override
+ public void addOnCloseCallback(Consumer<CmsSession> onClose) {
+ onCloseCallbacks.add(onClose);
+ }
+
public Subject getSubject() {
return Subject.getSubject(accessControlContext);
}