X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms.e4%2Fsrc%2Forg%2Fargeo%2Fcms%2Fe4%2Faddons%2FAuthAddon.java;h=3d57e1659934ca429e35b602f3b69860e4e21ca9;hb=b71546ddc74d6ca49d252806aafd491c75dfe1fb;hp=6f03139ca4d6aaa96c8359ee86d5660c39a6254c;hpb=54fb8849152a3d91f7ba52aeeffb236f5e70fbdf;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms.e4/src/org/argeo/cms/e4/addons/AuthAddon.java b/org.argeo.cms.e4/src/org/argeo/cms/e4/addons/AuthAddon.java index 6f03139ca..3d57e1659 100644 --- a/org.argeo.cms.e4/src/org/argeo/cms/e4/addons/AuthAddon.java +++ b/org.argeo.cms.e4/src/org/argeo/cms/e4/addons/AuthAddon.java @@ -1,9 +1,14 @@ package org.argeo.cms.e4.addons; +import java.security.AccessController; import java.util.Iterator; import javax.annotation.PostConstruct; +import javax.security.auth.Subject; +import javax.servlet.http.HttpServletRequest; +import org.argeo.api.cms.CmsLog; +import org.argeo.cms.CmsException; import org.argeo.cms.auth.CurrentUser; import org.eclipse.e4.ui.model.application.MApplication; import org.eclipse.e4.ui.model.application.ui.MElementContainer; @@ -13,19 +18,23 @@ import org.eclipse.e4.ui.model.application.ui.basic.MTrimmedWindow; import org.eclipse.e4.ui.model.application.ui.basic.MWindow; public class AuthAddon { + private final static CmsLog log = CmsLog.getLog(AuthAddon.class); + public final static String AUTH = "auth."; @PostConstruct void init(MApplication application) { Iterator windows = application.getChildren().iterator(); + boolean atLeastOneTopLevelWindowVisible = false; windows: while (windows.hasNext()) { MWindow window = windows.next(); // main window boolean windowVisible = process(window); if (!windowVisible) { - windows.remove(); +// windows.remove(); continue windows; } + atLeastOneTopLevelWindowVisible = true; // trim bars if (window instanceof MTrimmedWindow) { Iterator trimBars = ((MTrimmedWindow) window).getTrimBars().iterator(); @@ -37,6 +46,11 @@ public class AuthAddon { } } } + + if (!atLeastOneTopLevelWindowVisible) { + log.warn("No top-level window is authorized for user " + CurrentUser.getUsername() + ", logging out.."); + logout(); + } } protected boolean process(MUIElement element) { @@ -74,4 +88,17 @@ public class AuthAddon { return true; } + + protected void logout() { + Subject subject = Subject.getSubject(AccessController.getContext()); + try { + CurrentUser.logoutCmsSession(subject); + } catch (Exception e) { + throw new CmsException("Cannot log out", e); + } + HttpServletRequest request = org.argeo.eclipse.ui.specific.UiContext.getHttpRequest(); + if (request != null) + request.getSession().setMaxInactiveInterval(0); + } + }