X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Fwidgets%2Fauth%2FCmsLogin.java;h=1051bd7239e0564f408711809c2b40f0ab4603c1;hb=cba35caa1a083661c8e113f5295b2dbfc90a16cd;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..1051bd723 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 @@ -17,16 +17,18 @@ 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.util.CmsUtils; import org.argeo.util.LocaleChoice; import org.eclipse.rap.rwt.RWT; @@ -48,6 +50,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; @@ -113,6 +117,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 +127,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 +206,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 +217,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 +244,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 +254,7 @@ public class CmsLogin implements CmsStyles, CallbackHandler { return c; } - protected void login() { + protected boolean login() { Subject subject = cmsView.getSubject(); LoginContext loginContext; try { @@ -254,10 +264,15 @@ 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()); + return false; + } catch (LoginException e) { + log.error("Cannot login", e); + return false; } cmsView.authChange(loginContext); + return true; } protected void logout() {