X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;ds=sidebyside;f=swt%2Forg.argeo.cms.e4%2Fsrc%2Forg%2Fargeo%2Fcms%2Fe4%2Faddons%2FAuthAddon.java;fp=swt%2Forg.argeo.cms.e4%2Fsrc%2Forg%2Fargeo%2Fcms%2Fe4%2Faddons%2FAuthAddon.java;h=0000000000000000000000000000000000000000;hb=b464b0ecfbb99f98d8305f12fdfc9092427179d6;hp=66a5ec8c77089a38c1c92375668dd9bffa0d0cbd;hpb=656302dff1b85fb0bc60328506b0f9cd07c26424;p=lgpl%2Fargeo-commons.git diff --git a/swt/org.argeo.cms.e4/src/org/argeo/cms/e4/addons/AuthAddon.java b/swt/org.argeo.cms.e4/src/org/argeo/cms/e4/addons/AuthAddon.java deleted file mode 100644 index 66a5ec8c7..000000000 --- a/swt/org.argeo.cms.e4/src/org/argeo/cms/e4/addons/AuthAddon.java +++ /dev/null @@ -1,106 +0,0 @@ -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.CurrentUser; -import org.argeo.cms.swt.CmsException; -import org.eclipse.e4.ui.model.application.MApplication; -import org.eclipse.e4.ui.model.application.ui.MElementContainer; -import org.eclipse.e4.ui.model.application.ui.MUIElement; -import org.eclipse.e4.ui.model.application.ui.basic.MTrimBar; -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(); - continue windows; - } - atLeastOneTopLevelWindowVisible = true; - // trim bars - if (window instanceof MTrimmedWindow) { - Iterator trimBars = ((MTrimmedWindow) window).getTrimBars().iterator(); - while (trimBars.hasNext()) { - MTrimBar trimBar = trimBars.next(); - if (!process(trimBar)) { - trimBars.remove(); - } - } - } - } - - if (!atLeastOneTopLevelWindowVisible) { - log.warn("No top-level window is authorized for user " + CurrentUser.getUsername() + ", logging out.."); - logout(); - } - } - - protected boolean process(MUIElement element) { - for (String tag : element.getTags()) { - if (tag.startsWith(AUTH)) { - String role = tag.substring(AUTH.length(), tag.length()); - if (!CurrentUser.isInRole(role)) { - element.setVisible(false); - element.setToBeRendered(false); - return false; - } - } - } - - // children - if (element instanceof MElementContainer) { - @SuppressWarnings("unchecked") - MElementContainer container = (MElementContainer) element; - Iterator children = container.getChildren().iterator(); - while (children.hasNext()) { - MUIElement child = children.next(); - boolean visible = process(child); - if (!visible) - children.remove(); - } - - for (Object child : container.getChildren()) { - if (child instanceof MUIElement) { - boolean visible = process((MUIElement) child); - if (!visible) - container.getChildren().remove(child); - } - } - } - - 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); - } - - // FIXME make it more generic - HttpServletRequest request = org.argeo.eclipse.ui.specific.UiContext.getHttpRequest(); - if (request != null) - request.getSession().setMaxInactiveInterval(0); - } - -}