X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Facr%2FCmsContentRepository.java;h=15b893bb3d3ade0aab47e084fd0ace6316511910;hb=5724ab347ddfba8f2b21cdcc2fa0b8e1e2b4e527;hp=474e07232d68d2bdae08eb3e456672b4010a2aad;hpb=d2bca81ff63496bf1d879f4cbcd6a531f598e69c;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/acr/CmsContentRepository.java b/org.argeo.cms/src/org/argeo/cms/acr/CmsContentRepository.java index 474e07232..15b893bb3 100644 --- a/org.argeo.cms/src/org/argeo/cms/acr/CmsContentRepository.java +++ b/org.argeo.cms/src/org/argeo/cms/acr/CmsContentRepository.java @@ -5,6 +5,7 @@ import java.util.HashMap; import java.util.Locale; import java.util.Map; +import javax.security.auth.Subject; import javax.security.auth.login.LoginContext; import javax.security.auth.login.LoginException; @@ -15,9 +16,9 @@ import org.argeo.api.cms.CmsSession; import org.argeo.api.cms.CmsState; import org.argeo.api.cms.DataAdminPrincipal; import org.argeo.api.uuid.UuidFactory; -import org.argeo.cms.auth.CurrentUser; +import org.argeo.cms.CurrentUser; import org.argeo.cms.internal.runtime.CmsContextImpl; -import org.argeo.util.CurrentSubject; +import org.argeo.cms.util.CurrentSubject; /** * Multi-session {@link ProvidedRepository}, integrated with a CMS. @@ -42,8 +43,11 @@ public class CmsContentRepository extends AbstractContentRepository { @Override public ContentSession get(Locale locale) { - if (!CmsSession.hasCmsSession(CurrentSubject.current())) { - if (DataAdminPrincipal.isDataAdmin(CurrentSubject.current())) { + Subject subject = CurrentSubject.current(); + if (subject == null) + throw new IllegalStateException("Caller must be authenticated"); + if (!CmsSession.hasCmsSession(subject)) { + if (DataAdminPrincipal.isDataAdmin(subject)) { // TODO open multiple data admin sessions? return getSystemSession(); } @@ -53,7 +57,7 @@ public class CmsContentRepository extends AbstractContentRepository { CmsSession cmsSession = CurrentUser.getCmsSession(); CmsContentSession contentSession = userSessions.get(cmsSession); if (contentSession == null) { - final CmsContentSession newContentSession = new CmsContentSession(this, cmsSession.getUuid(), + final CmsContentSession newContentSession = new CmsContentSession(this, cmsSession.uuid(), cmsSession.getSubject(), locale, uuidFactory); cmsSession.addOnCloseCallback((c) -> { newContentSession.close();