X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;ds=inline;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Futil%2FUserMenu.java;h=1c35600012d9c47e33d031e376bb1d98d627310f;hb=93a457cf047cebb0170abd0f37a9b4291a2ae3e9;hp=10964c717d0b26d82147b2c6c0bba1e4f2c0ba55;hpb=12eea11c00cc3cd27327b91638b8b4ca4cd1e015;p=lgpl%2Fargeo-commons.git
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 10964c717..1c3560001 100644
--- a/org.argeo.cms/src/org/argeo/cms/util/UserMenu.java
+++ b/org.argeo.cms/src/org/argeo/cms/util/UserMenu.java
@@ -11,7 +11,7 @@ import javax.security.auth.callback.UnsupportedCallbackException;
import javax.security.auth.login.LoginContext;
import javax.security.auth.login.LoginException;
-import org.argeo.ArgeoException;
+import org.argeo.cms.CmsException;
import org.argeo.cms.CmsMsg;
import org.argeo.cms.CmsSession;
import org.argeo.cms.CmsStyles;
@@ -27,11 +27,11 @@ 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.Shell;
import org.eclipse.swt.widgets.Text;
-import org.springframework.security.core.context.SecurityContextHolder;
/** The site-related user menu */
public class UserMenu extends Shell implements CmsStyles, CallbackHandler {
@@ -42,9 +42,13 @@ public class UserMenu extends Shell implements CmsStyles, CallbackHandler {
super(source.getDisplay(), SWT.NO_TRIM | SWT.BORDER | SWT.ON_TOP);
setData(RWT.CUSTOM_VARIANT, CMS_USER_MENU);
- String username = SecurityContextHolder.getContext()
- .getAuthentication().getName();
- if (username.equals("anonymous")) {
+ // Authentication authentication = SecurityContextHolder.getContext()
+ // .getAuthentication();
+ // if (authentication == null)
+ // throw new CmsException("No authentication available");
+
+ String username = CurrentUserUtils.getUsername();
+ if (username.equalsIgnoreCase(KernelHeader.ROLE_ANONYMOUS)) {
username = null;
anonymousUi();
} else {
@@ -69,18 +73,23 @@ public class UserMenu extends Shell implements CmsStyles, CallbackHandler {
}
protected void userUi() {
- setLayout(new GridLayout());
-
- String username = SecurityContextHolder.getContext()
- .getAuthentication().getName();
-
- Label l = new Label(this, SWT.NONE);
- l.setData(RWT.CUSTOM_VARIANT, CMS_USER_MENU_ITEM);
- l.setData(RWT.MARKUP_ENABLED, true);
- l.setLayoutData(CmsUtils.fillWidth());
- l.setText("" + username + "");
-
- l = new Label(this, SWT.NONE);
+ setLayout(CmsUtils.noSpaceGridLayout());
+ Composite c = new Composite(this, SWT.NONE);
+ c.setLayout(new GridLayout());
+ c.setLayoutData(CmsUtils.fillAll());
+
+ // String username = SecurityContextHolder.getContext()
+ // .getAuthentication().getName();
+ //
+ // Label l = new Label(c, SWT.NONE);
+ // l.setData(RWT.CUSTOM_VARIANT, CMS_USER_MENU_ITEM);
+ // l.setData(RWT.MARKUP_ENABLED, true);
+ // l.setLayoutData(CmsUtils.fillWidth());
+ // l.setText("" + username + "");
+
+ 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();
@@ -96,20 +105,39 @@ public class UserMenu extends Shell implements CmsStyles, CallbackHandler {
});
}
+ // protected String getUsername() {
+ // // String username = SecurityContextHolder.getContext()
+ // // .getAuthentication().getName();
+ // return CurrentUserUtils.getUsername();
+ // }
+
+ /** To be overridden */
+ protected void specificUserUi(Composite parent) {
+
+ }
+
protected void anonymousUi() {
- Integer textWidth = 150;
+ setLayout(CmsUtils.noSpaceGridLayout());
+
+ // We need a composite for the traversal
+ Composite c = new Composite(this, SWT.NONE);
+ c.setLayout(new GridLayout());
+ c.setLayoutData(CmsUtils.fillAll());
+
+ Integer textWidth = 120;
setData(RWT.CUSTOM_VARIANT, CMS_USER_MENU);
- setLayout(new GridLayout(2, false));
- new Label(this, SWT.NONE).setText(CmsMsg.username.lead());
- username = new Text(this, SWT.BORDER);
+ // 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(this, SWT.BORDER | SWT.PASSWORD);
+ // 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;
@@ -123,8 +151,12 @@ public class UserMenu extends Shell implements CmsStyles, CallbackHandler {
login();
}
};
+ c.addTraverseListener(tl);
username.addTraverseListener(tl);
password.addTraverseListener(tl);
+ setTabList(new Control[] { c });
+ c.setTabList(new Control[] { username, password });
+ c.setFocus();
}
protected void login() {
@@ -141,7 +173,13 @@ public class UserMenu extends Shell implements CmsStyles, CallbackHandler {
KernelHeader.LOGIN_CONTEXT_USER, subject, this);
loginContext.login();
} catch (LoginException e1) {
- throw new ArgeoException("Cannot authenticate anonymous", e1);
+ try {
+ new ArgeoLoginContext(KernelHeader.LOGIN_CONTEXT_ANONYMOUS,
+ subject).login();
+ } catch (LoginException e) {
+ throw new CmsException("Cannot authenticate anonymous", e1);
+ }
+ throw new CmsException("Cannot authenticate", e1);
}
close();
dispose();
@@ -161,10 +199,11 @@ public class UserMenu extends Shell implements CmsStyles, CallbackHandler {
new ArgeoLoginContext(KernelHeader.LOGIN_CONTEXT_ANONYMOUS, subject)
.login();
} catch (LoginException e1) {
- throw new ArgeoException("Cannot authenticate anonymous", e1);
+ throw new CmsException("Cannot authenticate anonymous", e1);
}
close();
dispose();
+ cmsSession.navigateTo("~");
cmsSession.authChange();
}