projects
/
lgpl
/
argeo-commons.git
/ commitdiff
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
ae37862
)
Reactivate JCR webdav and remote servlets
author
Mathieu Baudier <mbaudier@argeo.org>
Tue, 8 Feb 2022 07:45:20 +0000
(08:45 +0100)
committer
Mathieu Baudier <mbaudier@argeo.org>
Tue, 8 Feb 2022 07:45:20 +0000
(08:45 +0100)
jcr/org.argeo.cms.jcr/src/org/argeo/cms/jcr/internal/CmsJcrDeployment.java
patch
|
blob
|
history
jcr/org.argeo.cms.jcr/src/org/argeo/cms/jcr/internal/servlet/CmsSessionProvider.java
patch
|
blob
|
history
org.argeo.api.cms/src/org/argeo/api/cms/CmsSession.java
patch
|
blob
|
history
org.argeo.cms/src/org/argeo/cms/internal/auth/CmsSessionImpl.java
patch
|
blob
|
history
diff --git
a/jcr/org.argeo.cms.jcr/src/org/argeo/cms/jcr/internal/CmsJcrDeployment.java
b/jcr/org.argeo.cms.jcr/src/org/argeo/cms/jcr/internal/CmsJcrDeployment.java
index 340d137824849b28917838e4aab5e43a15e378c1..16f5979d736304caad7833a607730c4db91d6537 100644
(file)
--- a/
jcr/org.argeo.cms.jcr/src/org/argeo/cms/jcr/internal/CmsJcrDeployment.java
+++ b/
jcr/org.argeo.cms.jcr/src/org/argeo/cms/jcr/internal/CmsJcrDeployment.java
@@
-74,10
+74,6
@@
public class CmsJcrDeployment {
CmsDeployment cmsDeployment;
CmsDeployment cmsDeployment;
- public CmsJcrDeployment() {
-// initTrackers();
- }
-
public void start() {
dataModels = new DataModels(bc);
public void start() {
dataModels = new DataModels(bc);
@@
-390,9
+386,8
@@
public class CmsJcrDeployment {
// }
protected void registerRepositoryServlets(String alias, Repository repository) {
// }
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) {
}
protected void registerWebdavServlet(String alias, Repository repository) {
diff --git
a/jcr/org.argeo.cms.jcr/src/org/argeo/cms/jcr/internal/servlet/CmsSessionProvider.java
b/jcr/org.argeo.cms.jcr/src/org/argeo/cms/jcr/internal/servlet/CmsSessionProvider.java
index 0f27fd005dca58aa2f17eea8d95ed59f40702159..4e067eea25a01653e1e7a0fbb318687628497091 100644
(file)
--- a/
jcr/org.argeo.cms.jcr/src/org/argeo/cms/jcr/internal/servlet/CmsSessionProvider.java
+++ b/
jcr/org.argeo.cms.jcr/src/org/argeo/cms/jcr/internal/servlet/CmsSessionProvider.java
@@
-17,9
+17,11
@@
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import org.apache.jackrabbit.server.SessionProvider;
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.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;
/**
import org.argeo.jcr.JcrUtils;
/**
@@
-46,9
+48,8
@@
public class CmsSessionProvider implements SessionProvider, Serializable {
// if (workspace == null)
// return null;
// 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);
}
if (log.isTraceEnabled()) {
log.trace("Get JCR session from " + cmsSession);
}
@@
-80,6
+81,7
@@
public class CmsSessionProvider implements SessionProvider, Serializable {
private CmsDataSession(CmsSession cmsSession) {
this.cmsSession = cmsSession;
private CmsDataSession(CmsSession cmsSession) {
this.cmsSession = cmsSession;
+ cmsSession.addOnCloseCallback((sess) -> close());
}
public Session newDataSession(String cn, String workspace, Repository repository) {
}
public Session newDataSession(String cn, String workspace, Repository repository) {
@@
-160,8
+162,7
@@
public class CmsSessionProvider implements SessionProvider, Serializable {
"CMS session " + cmsSession.getUuid() + " is not valid since " + cmsSession.getEnd());
}
"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())
synchronized (this) {
// TODO check data session in use ?
for (String path : dataSessions.keySet())
diff --git
a/org.argeo.api.cms/src/org/argeo/api/cms/CmsSession.java
b/org.argeo.api.cms/src/org/argeo/api/cms/CmsSession.java
index 18d53cee88a1daa2ba2c391ad1034ab5b022eadc..ea9d10ba24d1573ed74df47bf9049e07969f7ed1 100644
(file)
--- a/
org.argeo.api.cms/src/org/argeo/api/cms/CmsSession.java
+++ b/
org.argeo.api.cms/src/org/argeo/api/cms/CmsSession.java
@@
-3,6
+3,7
@@
package org.argeo.api.cms;
import java.time.ZonedDateTime;
import java.util.Locale;
import java.util.UUID;
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;
import javax.naming.ldap.LdapName;
import javax.security.auth.Subject;
@@
-16,14
+17,14
@@
public interface CmsSession {
UUID getUuid();
String getUserRole();
UUID getUuid();
String getUserRole();
-
+
LdapName getUserDn();
String getLocalId();
String getDisplayName();
// Authorization getAuthorization();
LdapName getUserDn();
String getLocalId();
String getDisplayName();
// Authorization getAuthorization();
-
+
Subject getSubject();
boolean isAnonymous();
Subject getSubject();
boolean isAnonymous();
@@
-37,4
+38,6
@@
public interface CmsSession {
boolean isValid();
void registerView(String uid, Object view);
boolean isValid();
void registerView(String uid, Object view);
+
+ void addOnCloseCallback(Consumer<CmsSession> onClose);
}
}
diff --git
a/org.argeo.cms/src/org/argeo/cms/internal/auth/CmsSessionImpl.java
b/org.argeo.cms/src/org/argeo/cms/internal/auth/CmsSessionImpl.java
index b0824e84bb1924835d0232c1691a7609d8de1807..aa3a6ad17dd3e61fa4bd4dc751c6533a2a1f8b4a 100644
(file)
--- a/
org.argeo.cms/src/org/argeo/cms/internal/auth/CmsSessionImpl.java
+++ b/
org.argeo.cms/src/org/argeo/cms/internal/auth/CmsSessionImpl.java
@@
-5,13
+5,17
@@
import java.security.AccessControlContext;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.time.ZonedDateTime;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.time.ZonedDateTime;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Hashtable;
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.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.crypto.SecretKey;
import javax.naming.InvalidNameException;
@@
-21,10
+25,10
@@
import javax.security.auth.login.LoginContext;
import javax.security.auth.login.LoginException;
import javax.security.auth.x500.X500Principal;
import javax.security.auth.login.LoginException;
import javax.security.auth.x500.X500Principal;
-import org.argeo.api.cms.Cms
Session
;
+import org.argeo.api.cms.Cms
Auth
;
import org.argeo.api.cms.CmsLog;
import org.argeo.api.cms.CmsLog;
+import org.argeo.api.cms.CmsSession;
import org.argeo.cms.security.NodeSecurityUtils;
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;
import org.osgi.framework.BundleContext;
import org.osgi.framework.FrameworkUtil;
import org.osgi.framework.InvalidSyntaxException;
@@
-54,6
+58,8
@@
public class CmsSessionImpl implements CmsSession, Serializable {
private Map<String, Object> views = new HashMap<>();
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;
public CmsSessionImpl(Subject initialSubject, Authorization authorization, Locale locale, String localSessionId) {
this.creationTime = ZonedDateTime.now();
this.locale = locale;
@@
-92,6
+98,10
@@
public class CmsSessionImpl implements CmsSession, Serializable {
end = ZonedDateTime.now();
serviceRegistration.unregister();
end = ZonedDateTime.now();
serviceRegistration.unregister();
+ for (Consumer<CmsSession> onClose : onCloseCallbacks) {
+ onClose.accept(this);
+ }
+
try {
LoginContext lc;
if (isAnonymous()) {
try {
LoginContext lc;
if (isAnonymous()) {
@@
-108,6
+118,11
@@
public class CmsSessionImpl implements CmsSession, Serializable {
log.debug("Closed " + this);
}
log.debug("Closed " + this);
}
+ @Override
+ public void addOnCloseCallback(Consumer<CmsSession> onClose) {
+ onCloseCallbacks.add(onClose);
+ }
+
public Subject getSubject() {
return Subject.getSubject(accessControlContext);
}
public Subject getSubject() {
return Subject.getSubject(accessControlContext);
}