1 package org
.argeo
.cms
.util
;
3 import static org
.argeo
.cms
.internal
.kernel
.KernelConstants
.SPRING_SECURITY_CONTEXT_KEY
;
5 import javax
.servlet
.http
.HttpSession
;
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
;
27 /** The site-related user menu */
28 public class UserMenu
extends Shell
implements CmsStyles
{
29 private static final long serialVersionUID
= -5788157651532106301L;
31 private CmsLogin cmsLogin
;
32 private String username
= null;
34 public UserMenu(CmsLogin cmsLogin
, Control source
) {
35 super(source
.getDisplay(), SWT
.NO_TRIM
| SWT
.BORDER
| SWT
.ON_TOP
);
36 this.cmsLogin
= cmsLogin
;
38 setData(RWT
.CUSTOM_VARIANT
, CMS_USER_MENU
);
40 username
= SecurityContextHolder
.getContext().getAuthentication()
42 if (username
.equals("anonymous")) {
51 setLocation(source
.toDisplay(source
.getSize().x
- getSize().x
,
54 addShellListener(new ShellAdapter() {
55 private static final long serialVersionUID
= 5178980294808435833L;
58 public void shellDeactivated(ShellEvent e
) {
69 protected void userUi() {
70 setLayout(new GridLayout());
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>");
78 final CmsSession cmsSession
= (CmsSession
) getDisplay().getData(
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
);
87 l
.addMouseListener(new MouseAdapter() {
88 private static final long serialVersionUID
= 6444395812777413116L;
90 public void mouseDown(MouseEvent e
) {
91 SecurityContextHolder
.getContext().setAuthentication(null);
92 HttpSession httpSession
= RWT
.getRequest().getSession();
93 httpSession
.removeAttribute(SPRING_SECURITY_CONTEXT_KEY
);
96 cmsSession
.authChange();
101 protected void anonymousUi() {
102 Integer textWidth
= 150;
103 setData(RWT
.CUSTOM_VARIANT
, CMS_USER_MENU
);
104 setLayout(new GridLayout(2, false));
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
);
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
);
121 TraverseListener tl
= new TraverseListener() {
122 private static final long serialVersionUID
= -1158892811534971856L;
124 public void keyTraversed(TraverseEvent e
) {
125 if (e
.detail
== SWT
.TRAVERSE_RETURN
)
126 login(username
.getText(), password
.getTextChars());
129 username
.addTraverseListener(tl
);
130 password
.addTraverseListener(tl
);
133 protected void login(String username
, char[] password
) {
134 CmsSession cmsSession
= (CmsSession
) getDisplay().getData(
136 cmsLogin
.logInWithPassword(username
, password
);
139 // refreshUi(source.getParent());
140 cmsSession
.authChange();