From: Mathieu Baudier Date: Tue, 13 Oct 2015 19:19:38 +0000 (+0000) Subject: Fix build X-Git-Tag: argeo-commons-2.1.30~100 X-Git-Url: http://git.argeo.org/?a=commitdiff_plain;h=fd15f02e9bcff9268ef4b87d7dec29b76be57862;p=lgpl%2Fargeo-commons.git Fix build git-svn-id: https://svn.argeo.org/commons/trunk@8477 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- diff --git a/org.argeo.cms/pom.xml b/org.argeo.cms/pom.xml index dc9bcb24b..3f55ed9a4 100644 --- a/org.argeo.cms/pom.xml +++ b/org.argeo.cms/pom.xml @@ -26,5 +26,11 @@ org.argeo.eclipse.ui 2.1.29-SNAPSHOT + + org.argeo.commons + org.argeo.eclipse.ui.rap + 2.1.29-SNAPSHOT + provided + \ No newline at end of file diff --git a/org.argeo.cms/src/org/argeo/cms/auth/CurrentUser.java b/org.argeo.cms/src/org/argeo/cms/auth/CurrentUser.java index 11126014f..cce34cd1f 100644 --- a/org.argeo.cms/src/org/argeo/cms/auth/CurrentUser.java +++ b/org.argeo.cms/src/org/argeo/cms/auth/CurrentUser.java @@ -48,8 +48,9 @@ public final class CurrentUser { } public static boolean isAnonymous(Subject subject) { - return getUsername(subject).equalsIgnoreCase( - AuthConstants.ROLE_ANONYMOUS); + String username = getUsername(subject); + return username == null + || username.equalsIgnoreCase(AuthConstants.ROLE_ANONYMOUS); } private static Subject currentSubject() { diff --git a/org.argeo.cms/src/org/argeo/cms/util/UserMenu.java b/org.argeo.cms/src/org/argeo/cms/util/UserMenu.java index ed8f20c0b..40861742f 100644 --- a/org.argeo.cms/src/org/argeo/cms/util/UserMenu.java +++ b/org.argeo.cms/src/org/argeo/cms/util/UserMenu.java @@ -1,70 +1,30 @@ package org.argeo.cms.util; -import static org.argeo.cms.auth.AuthConstants.LOGIN_CONTEXT_ANONYMOUS; -import static org.argeo.cms.auth.AuthConstants.LOGIN_CONTEXT_USER; - -import java.io.IOException; - -import javax.security.auth.Subject; -import javax.security.auth.callback.Callback; -import javax.security.auth.callback.CallbackHandler; -import javax.security.auth.callback.NameCallback; -import javax.security.auth.callback.PasswordCallback; -import javax.security.auth.callback.UnsupportedCallbackException; -import javax.security.auth.login.LoginContext; -import javax.security.auth.login.LoginException; - -import org.argeo.cms.CmsException; -import org.argeo.cms.CmsMsg; -import org.argeo.cms.CmsStyles; -import org.argeo.cms.CmsView; -import org.argeo.cms.auth.AuthConstants; -import org.argeo.cms.auth.CurrentUser; -import org.argeo.cms.auth.HttpRequestCallback; +import org.argeo.cms.widgets.auth.CmsLogin; import org.eclipse.rap.rwt.RWT; import org.eclipse.swt.SWT; -import org.eclipse.swt.events.MouseAdapter; -import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.ShellAdapter; import org.eclipse.swt.events.ShellEvent; -import org.eclipse.swt.events.TraverseEvent; -import org.eclipse.swt.events.TraverseListener; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; -import org.eclipse.swt.widgets.Text; /** The site-related user menu */ -public class UserMenu implements CmsStyles, CallbackHandler { - private final CmsView cmsView; +public class UserMenu extends CmsLogin { private final Shell shell; - private Text username, password; - public UserMenu(Control source, boolean autoclose) { + super(CmsUtils.getCmsView()); shell = new Shell(source.getDisplay(), SWT.NO_TRIM | SWT.BORDER | SWT.ON_TOP); shell.setData(RWT.CUSTOM_VARIANT, CMS_USER_MENU); - // cmsView = (CmsView) shell.getDisplay().getData(CmsView.KEY); - cmsView = CmsUtils.getCmsView(); - if (cmsView != null) { - String username = CurrentUser.getUsername(cmsView.getSubject()); - if (username == null - || username.equalsIgnoreCase(AuthConstants.ROLE_ANONYMOUS)) { - username = null; - anonymousUi(shell); - } else { - userUi(shell); - } - } else { + if (isAnonymous()) { anonymousUi(shell); + } else { + userUi(shell); } shell.pack(); @@ -94,118 +54,21 @@ public class UserMenu implements CmsStyles, CallbackHandler { } - protected void closeShell() { - shell.close(); - shell.dispose(); - } - - protected void userUi(Composite parent) { - parent.setLayout(CmsUtils.noSpaceGridLayout()); - Composite c = new Composite(parent, SWT.NONE); - c.setLayout(new GridLayout()); - c.setLayoutData(CmsUtils.fillAll()); - - specificUserUi(c); - - Label l = new Label(c, SWT.NONE); - l.setData(RWT.CUSTOM_VARIANT, CMS_USER_MENU_ITEM); - l.setText(CmsMsg.logout.lead()); - GridData lData = CmsUtils.fillWidth(); - lData.widthHint = 120; - l.setLayoutData(lData); - - l.addMouseListener(new MouseAdapter() { - private static final long serialVersionUID = 6444395812777413116L; - - public void mouseDown(MouseEvent e) { - logout(); - } - }); - } - - /** To be overridden */ - protected void specificUserUi(Composite parent) { - - } - - protected void anonymousUi(Composite parent) { - parent.setLayout(CmsUtils.noSpaceGridLayout()); - - // We need a composite for the traversal - Composite c = new Composite(parent, SWT.NONE); - c.setLayout(new GridLayout()); - c.setLayoutData(CmsUtils.fillAll()); - - Integer textWidth = 120; - parent.setData(RWT.CUSTOM_VARIANT, CMS_USER_MENU); - - // new Label(this, SWT.NONE).setText(CmsMsg.username.lead()); - username = new Text(c, SWT.BORDER); - username.setMessage(CmsMsg.username.lead()); - username.setData(RWT.CUSTOM_VARIANT, CMS_LOGIN_DIALOG_USERNAME); - GridData gd = CmsUtils.fillWidth(); - gd.widthHint = textWidth; - username.setLayoutData(gd); - - // new Label(this, SWT.NONE).setText(CmsMsg.password.lead()); - password = new Text(c, SWT.BORDER | SWT.PASSWORD); - password.setMessage(CmsMsg.password.lead()); - password.setData(RWT.CUSTOM_VARIANT, CMS_LOGIN_DIALOG_PASSWORD); - gd = CmsUtils.fillWidth(); - gd.widthHint = textWidth; - password.setLayoutData(gd); - - TraverseListener tl = new TraverseListener() { - private static final long serialVersionUID = -1158892811534971856L; - - public void keyTraversed(TraverseEvent e) { - if (e.detail == SWT.TRAVERSE_RETURN) - login(); - } - }; - c.addTraverseListener(tl); - username.addTraverseListener(tl); - password.addTraverseListener(tl); - parent.setTabList(new Control[] { c }); - c.setTabList(new Control[] { username, password }); - c.setFocus(); - } - + @Override protected void login() { - Subject subject = cmsView.getSubject(); - LoginContext loginContext; - try { - // - // LOGIN - // - new LoginContext(LOGIN_CONTEXT_ANONYMOUS, subject).logout(); - loginContext = new LoginContext(LOGIN_CONTEXT_USER, subject, this); - loginContext.login(); - } catch (LoginException e1) { - throw new CmsException("Cannot authenticate", e1); - } + super.login(); closeShell(); - cmsView.authChange(loginContext); } + @Override protected void logout() { closeShell(); - cmsView.logout(); - cmsView.navigateTo("~"); + super.logout(); } - @Override - public void handle(Callback[] callbacks) throws IOException, - UnsupportedCallbackException { - for (Callback callback : callbacks) { - if (callback instanceof NameCallback) - ((NameCallback) callback).setName(username.getText()); - else if (callback instanceof PasswordCallback) - ((PasswordCallback) callback).setPassword(password - .getTextChars()); - else if (callback instanceof HttpRequestCallback) - ((HttpRequestCallback) callback).setRequest(RWT.getRequest()); - } + protected void closeShell() { + shell.close(); + shell.dispose(); } public Shell getShell() { diff --git a/org.argeo.cms/src/org/argeo/cms/widgets/auth/CmsLogin.java b/org.argeo.cms/src/org/argeo/cms/widgets/auth/CmsLogin.java new file mode 100644 index 000000000..9edc2f06c --- /dev/null +++ b/org.argeo.cms/src/org/argeo/cms/widgets/auth/CmsLogin.java @@ -0,0 +1,156 @@ +package org.argeo.cms.widgets.auth; + +import static org.argeo.cms.auth.AuthConstants.LOGIN_CONTEXT_ANONYMOUS; +import static org.argeo.cms.auth.AuthConstants.LOGIN_CONTEXT_USER; + +import java.io.IOException; + +import javax.security.auth.Subject; +import javax.security.auth.callback.Callback; +import javax.security.auth.callback.CallbackHandler; +import javax.security.auth.callback.NameCallback; +import javax.security.auth.callback.PasswordCallback; +import javax.security.auth.callback.UnsupportedCallbackException; +import javax.security.auth.login.LoginContext; +import javax.security.auth.login.LoginException; + +import org.argeo.cms.CmsException; +import org.argeo.cms.CmsMsg; +import org.argeo.cms.CmsStyles; +import org.argeo.cms.CmsView; +import org.argeo.cms.auth.CurrentUser; +import org.argeo.cms.auth.HttpRequestCallback; +import org.argeo.cms.util.CmsUtils; +import org.eclipse.rap.rwt.RWT; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.MouseAdapter; +import org.eclipse.swt.events.MouseEvent; +import org.eclipse.swt.events.TraverseEvent; +import org.eclipse.swt.events.TraverseListener; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Text; + +public class CmsLogin implements CmsStyles, CallbackHandler { + private Text username, password; + private final CmsView cmsView; + + public CmsLogin(CmsView cmsView) { + this.cmsView = cmsView; + } + + protected boolean isAnonymous() { + return CurrentUser.isAnonymous(cmsView.getSubject()); + } + + protected void userUi(Composite parent) { + parent.setLayout(CmsUtils.noSpaceGridLayout()); + Composite c = new Composite(parent, SWT.NONE); + c.setLayout(new GridLayout()); + c.setLayoutData(CmsUtils.fillAll()); + + specificUserUi(c); + + Label l = new Label(c, SWT.NONE); + l.setData(RWT.CUSTOM_VARIANT, CMS_USER_MENU_ITEM); + l.setText(CmsMsg.logout.lead()); + GridData lData = CmsUtils.fillWidth(); + lData.widthHint = 120; + l.setLayoutData(lData); + + l.addMouseListener(new MouseAdapter() { + private static final long serialVersionUID = 6444395812777413116L; + + public void mouseDown(MouseEvent e) { + logout(); + } + }); + } + + /** To be overridden */ + protected void specificUserUi(Composite parent) { + + } + + protected void anonymousUi(Composite parent) { + parent.setLayout(CmsUtils.noSpaceGridLayout()); + + // We need a composite for the traversal + Composite c = new Composite(parent, SWT.NONE); + c.setLayout(new GridLayout()); + c.setLayoutData(CmsUtils.fillAll()); + + Integer textWidth = 120; + parent.setData(RWT.CUSTOM_VARIANT, CMS_USER_MENU); + + // new Label(this, SWT.NONE).setText(CmsMsg.username.lead()); + username = new Text(c, SWT.BORDER); + username.setMessage(CmsMsg.username.lead()); + username.setData(RWT.CUSTOM_VARIANT, CMS_LOGIN_DIALOG_USERNAME); + GridData gd = CmsUtils.fillWidth(); + gd.widthHint = textWidth; + username.setLayoutData(gd); + + // new Label(this, SWT.NONE).setText(CmsMsg.password.lead()); + password = new Text(c, SWT.BORDER | SWT.PASSWORD); + password.setMessage(CmsMsg.password.lead()); + password.setData(RWT.CUSTOM_VARIANT, CMS_LOGIN_DIALOG_PASSWORD); + gd = CmsUtils.fillWidth(); + gd.widthHint = textWidth; + password.setLayoutData(gd); + + TraverseListener tl = new TraverseListener() { + private static final long serialVersionUID = -1158892811534971856L; + + public void keyTraversed(TraverseEvent e) { + if (e.detail == SWT.TRAVERSE_RETURN) + login(); + } + }; + c.addTraverseListener(tl); + username.addTraverseListener(tl); + password.addTraverseListener(tl); + parent.setTabList(new Control[] { c }); + c.setTabList(new Control[] { username, password }); + c.setFocus(); + } + + protected void login() { + Subject subject = cmsView.getSubject(); + LoginContext loginContext; + try { + // + // LOGIN + // + new LoginContext(LOGIN_CONTEXT_ANONYMOUS, subject).logout(); + loginContext = new LoginContext(LOGIN_CONTEXT_USER, subject, this); + loginContext.login(); + } catch (LoginException e1) { + throw new CmsException("Cannot authenticate", e1); + } + cmsView.authChange(loginContext); + } + + protected void logout() { + cmsView.logout(); + cmsView.navigateTo("~"); + } + + @Override + public void handle(Callback[] callbacks) throws IOException, + UnsupportedCallbackException { + for (Callback callback : callbacks) { + if (callback instanceof NameCallback) + ((NameCallback) callback).setName(username.getText()); + else if (callback instanceof PasswordCallback) + ((PasswordCallback) callback).setPassword(password + .getTextChars()); + else if (callback instanceof HttpRequestCallback) + ((HttpRequestCallback) callback).setRequest(RWT.getRequest()); + } + } + +} diff --git a/org.argeo.security.ui/pom.xml b/org.argeo.security.ui/pom.xml index 286920a2f..1787538cf 100644 --- a/org.argeo.security.ui/pom.xml +++ b/org.argeo.security.ui/pom.xml @@ -26,6 +26,12 @@ org.argeo.eclipse.ui.workbench 2.1.29-SNAPSHOT + + org.argeo.commons + org.argeo.eclipse.ui.rap + 2.1.29-SNAPSHOT + provided + org.argeo.commons org.argeo.util