]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms/src/org/argeo/cms/util/UserMenu.java
Fix improve path interception
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / util / UserMenu.java
1 package org.argeo.cms.util;
2
3 import static org.argeo.cms.internal.kernel.KernelConstants.SPRING_SECURITY_CONTEXT_KEY;
4
5 import javax.servlet.http.HttpSession;
6
7 import org.argeo.cms.CmsLogin;
8 import org.argeo.cms.CmsMsg;
9 import org.argeo.cms.CmsSession;
10 import org.argeo.cms.CmsStyles;
11 import org.eclipse.rap.rwt.RWT;
12 import org.eclipse.swt.SWT;
13 import org.eclipse.swt.events.MouseAdapter;
14 import org.eclipse.swt.events.MouseEvent;
15 import org.eclipse.swt.events.ShellAdapter;
16 import org.eclipse.swt.events.ShellEvent;
17 import org.eclipse.swt.events.TraverseEvent;
18 import org.eclipse.swt.events.TraverseListener;
19 import org.eclipse.swt.layout.GridData;
20 import org.eclipse.swt.layout.GridLayout;
21 import org.eclipse.swt.widgets.Control;
22 import org.eclipse.swt.widgets.Label;
23 import org.eclipse.swt.widgets.Shell;
24 import org.eclipse.swt.widgets.Text;
25 import org.springframework.security.core.context.SecurityContextHolder;
26
27 /** The site-related user menu */
28 public class UserMenu extends Shell implements CmsStyles {
29 private static final long serialVersionUID = -5788157651532106301L;
30
31 private CmsLogin cmsLogin;
32 private String username = null;
33
34 public UserMenu(CmsLogin cmsLogin, Control source) {
35 super(source.getDisplay(), SWT.NO_TRIM | SWT.BORDER | SWT.ON_TOP);
36 this.cmsLogin = cmsLogin;
37
38 setData(RWT.CUSTOM_VARIANT, CMS_USER_MENU);
39
40 username = SecurityContextHolder.getContext().getAuthentication()
41 .getName();
42 if (username.equals("anonymous")) {
43 username = null;
44 anonymousUi();
45 } else {
46 userUi();
47 }
48
49 pack();
50 layout();
51 setLocation(source.toDisplay(source.getSize().x - getSize().x,
52 source.getSize().y));
53
54 addShellListener(new ShellAdapter() {
55 private static final long serialVersionUID = 5178980294808435833L;
56
57 @Override
58 public void shellDeactivated(ShellEvent e) {
59 close();
60 dispose();
61 }
62
63 });
64
65 open();
66
67 }
68
69 protected void userUi() {
70 setLayout(new GridLayout());
71
72 Label l = new Label(this, SWT.NONE);
73 l.setData(RWT.CUSTOM_VARIANT, CMS_USER_MENU_ITEM);
74 l.setData(RWT.MARKUP_ENABLED, true);
75 l.setLayoutData(CmsUtils.fillWidth());
76 l.setText("<b>" + username + "</b>");
77
78 final CmsSession cmsSession = (CmsSession) getDisplay().getData(
79 CmsSession.KEY);
80 l = new Label(this, SWT.NONE);
81 l.setData(RWT.CUSTOM_VARIANT, CMS_USER_MENU_ITEM);
82 l.setText(CmsMsg.logout.lead());
83 GridData lData = CmsUtils.fillWidth();
84 lData.widthHint = 120;
85 l.setLayoutData(lData);
86
87 l.addMouseListener(new MouseAdapter() {
88 private static final long serialVersionUID = 6444395812777413116L;
89
90 public void mouseDown(MouseEvent e) {
91 SecurityContextHolder.getContext().setAuthentication(null);
92 HttpSession httpSession = RWT.getRequest().getSession();
93 httpSession.removeAttribute(SPRING_SECURITY_CONTEXT_KEY);
94 close();
95 dispose();
96 cmsSession.authChange();
97 }
98 });
99 }
100
101 protected void anonymousUi() {
102 Integer textWidth = 150;
103 setData(RWT.CUSTOM_VARIANT, CMS_USER_MENU);
104 setLayout(new GridLayout(2, false));
105
106 new Label(this, SWT.NONE).setText(CmsMsg.username.lead());
107 final Text username = new Text(this, SWT.BORDER);
108 username.setData(RWT.CUSTOM_VARIANT, CMS_LOGIN_DIALOG_USERNAME);
109 GridData gd = CmsUtils.fillWidth();
110 gd.widthHint = textWidth;
111 username.setLayoutData(gd);
112
113 new Label(this, SWT.NONE).setText(CmsMsg.password.lead());
114 final Text password = new Text(this, SWT.BORDER | SWT.PASSWORD);
115 password.setData(RWT.CUSTOM_VARIANT, CMS_LOGIN_DIALOG_PASSWORD);
116 gd = CmsUtils.fillWidth();
117 gd.widthHint = textWidth;
118 password.setLayoutData(gd);
119
120 // Listeners
121 TraverseListener tl = new TraverseListener() {
122 private static final long serialVersionUID = -1158892811534971856L;
123
124 public void keyTraversed(TraverseEvent e) {
125 if (e.detail == SWT.TRAVERSE_RETURN)
126 login(username.getText(), password.getTextChars());
127 }
128 };
129 username.addTraverseListener(tl);
130 password.addTraverseListener(tl);
131 }
132
133 protected void login(String username, char[] password) {
134 CmsSession cmsSession = (CmsSession) getDisplay().getData(
135 CmsSession.KEY);
136 cmsLogin.logInWithPassword(username, password);
137 close();
138 dispose();
139 // refreshUi(source.getParent());
140 cmsSession.authChange();
141 }
142
143 }