X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Fwidgets%2Fauth%2FCmsLogin.java;h=8f00c457708d31322bde2b1937a286dc3de78b9e;hb=c873a0359345503b8e3ca07828bd99d525ec7cc0;hp=1220c12a28430d3a59562eb469f292c29e89725b;hpb=a0cb2f599e0f63b29c7e7a3f0dffde69726241bf;p=lgpl%2Fargeo-commons.git 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 index 1220c12a2..8f00c4577 100644 --- a/org.argeo.cms/src/org/argeo/cms/widgets/auth/CmsLogin.java +++ b/org.argeo.cms/src/org/argeo/cms/widgets/auth/CmsLogin.java @@ -4,7 +4,7 @@ import static org.argeo.cms.CmsMsg.password; import static org.argeo.cms.CmsMsg.username; import static org.argeo.cms.auth.AuthConstants.LOGIN_CONTEXT_ANONYMOUS; import static org.argeo.cms.auth.AuthConstants.LOGIN_CONTEXT_USER; -import static org.argeo.cms.internal.kernel.Activator.getKernelHeader; +import static org.argeo.cms.internal.kernel.Activator.getNodeState; import java.io.IOException; import java.util.List; @@ -17,18 +17,21 @@ import javax.security.auth.callback.LanguageCallback; import javax.security.auth.callback.NameCallback; import javax.security.auth.callback.PasswordCallback; import javax.security.auth.callback.UnsupportedCallbackException; +import javax.security.auth.login.FailedLoginException; import javax.security.auth.login.LoginContext; import javax.security.auth.login.LoginException; -import org.argeo.cms.CmsException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; 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.i18n.Msg; +import org.argeo.cms.i18n.LocaleUtils; +import org.argeo.cms.internal.auth.LocaleChoice; import org.argeo.cms.util.CmsUtils; -import org.argeo.util.LocaleChoice; +import org.argeo.eclipse.ui.dialogs.ErrorFeedback; import org.eclipse.rap.rwt.RWT; import org.eclipse.swt.SWT; import org.eclipse.swt.events.MouseAdapter; @@ -48,6 +51,8 @@ import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; public class CmsLogin implements CmsStyles, CallbackHandler { + private final static Log log = LogFactory.getLog(CmsLogin.class); + private Composite parent; private Text usernameT, passwordT; private Composite credentialsBlock; @@ -60,8 +65,8 @@ public class CmsLogin implements CmsStyles, CallbackHandler { public CmsLogin(CmsView cmsView) { this.cmsView = cmsView; - defaultLocale = getKernelHeader().getDefaultLocale(); - List locales = getKernelHeader().getLocales(); + defaultLocale = getNodeState().getDefaultLocale(); + List locales = getNodeState().getLocales(); if (locales != null) localeChoice = new LocaleChoice(locales, defaultLocale); loginSelectionListener = new SelectionListener() { @@ -113,6 +118,8 @@ public class CmsLogin implements CmsStyles, CallbackHandler { } protected Composite userUi(Composite parent) { + Locale locale = localeChoice == null ? this.defaultLocale + : localeChoice.getSelectedLocale(); credentialsBlock = new Composite(parent, SWT.NONE); credentialsBlock.setLayout(new GridLayout()); credentialsBlock.setLayoutData(CmsUtils.fillAll()); @@ -121,7 +128,7 @@ public class CmsLogin implements CmsStyles, CallbackHandler { Label l = new Label(credentialsBlock, SWT.NONE); l.setData(RWT.CUSTOM_VARIANT, CMS_USER_MENU_ITEM); - l.setText(CmsMsg.logout.lead()); + l.setText(CmsMsg.logout.lead(locale)); GridData lData = CmsUtils.fillWidth(); lData.widthHint = 120; l.setLayoutData(lData); @@ -200,8 +207,10 @@ public class CmsLogin implements CmsStyles, CallbackHandler { } protected void updateLocale(Locale selectedLocale) { - // usernameT.setMessage(username.lead(selectedLocale)); - // passwordT.setMessage(password.lead(selectedLocale)); + // save already entered values + String usernameStr = usernameT.getText(); + char[] pwd = passwordT.getTextChars(); + for (Control child : parent.getChildren()) child.dispose(); createContents(parent); @@ -209,6 +218,8 @@ public class CmsLogin implements CmsStyles, CallbackHandler { parent.getParent().layout(); else parent.layout(); + usernameT.setText(usernameStr); + passwordT.setTextChars(pwd); } protected Composite createLocalesBlock(final Composite parent) { @@ -234,8 +245,8 @@ public class CmsLogin implements CmsStyles, CallbackHandler { Locale locale = locales.get(i); Button button = new Button(c, SWT.RADIO); button.setData(i); - button.setText(Msg.lead(locale.getDisplayName(locale), locale) - + " (" + locale + ")"); + button.setText(LocaleUtils.lead(locale.getDisplayName(locale), + locale) + " (" + locale + ")"); // button.addListener(SWT.Selection, listener); button.addSelectionListener(selectionListener); if (i == localeChoice.getSelectedIndex()) @@ -244,7 +255,7 @@ public class CmsLogin implements CmsStyles, CallbackHandler { return c; } - protected void login() { + protected boolean login() { Subject subject = cmsView.getSubject(); LoginContext loginContext; try { @@ -254,10 +265,21 @@ public class CmsLogin implements CmsStyles, CallbackHandler { 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); + } catch (FailedLoginException e) { + log.warn(e.getMessage()); + try { + Thread.sleep(3000); + } catch (InterruptedException e2) { + // silent + } +// ErrorFeedback.show("Login failed", e); + return false; + } catch (LoginException e) { + log.error("Cannot login", e); + return false; } cmsView.authChange(loginContext); + return true; } protected void logout() {