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=91c28078ee5fb33ba3523718dc09c39359230053;hpb=5146af93007c599cf9edb35d8b173753bc45a52f;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 91c28078e..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.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() { @@ -205,7 +210,7 @@ public class CmsLogin implements CmsStyles, CallbackHandler { // save already entered values String usernameStr = usernameT.getText(); char[] pwd = passwordT.getTextChars(); - + for (Control child : parent.getChildren()) child.dispose(); createContents(parent); @@ -250,7 +255,7 @@ public class CmsLogin implements CmsStyles, CallbackHandler { return c; } - protected void login() { + protected boolean login() { Subject subject = cmsView.getSubject(); LoginContext loginContext; try { @@ -260,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() {