X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;ds=sidebyside;f=org.argeo.cms.ui%2Fsrc%2Forg%2Fargeo%2Fcms%2Fwidgets%2Fauth%2FCmsLogin.java;h=7560ceb30733faeed948bb189f0cd3e558eb3753;hb=9eaf85002b003a68eea81fca417465ba52f14e4e;hp=4af348059fa30fe528a676eda78336f8090aa866;hpb=d66d81530f1da58e2e2c5d25e0a5dc30ad32b848;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms.ui/src/org/argeo/cms/widgets/auth/CmsLogin.java b/org.argeo.cms.ui/src/org/argeo/cms/widgets/auth/CmsLogin.java index 4af348059..7560ceb30 100644 --- a/org.argeo.cms.ui/src/org/argeo/cms/widgets/auth/CmsLogin.java +++ b/org.argeo.cms.ui/src/org/argeo/cms/widgets/auth/CmsLogin.java @@ -7,6 +7,7 @@ import java.io.IOException; import java.util.List; import java.util.Locale; +import javax.security.auth.Subject; import javax.security.auth.callback.Callback; import javax.security.auth.callback.CallbackHandler; import javax.security.auth.callback.LanguageCallback; @@ -57,6 +58,9 @@ public class CmsLogin implements CmsStyles, CallbackHandler { private final CmsView cmsView; + // optional subject to be set explicitly + private Subject subject = null; + public CmsLogin(CmsView cmsView) { this.cmsView = cmsView; defaultLocale = Activator.getNodeState().getDefaultLocale(); @@ -114,7 +118,7 @@ public class CmsLogin implements CmsStyles, CallbackHandler { Locale locale = localeChoice == null ? this.defaultLocale : localeChoice.getSelectedLocale(); credentialsBlock = new Composite(parent, SWT.NONE); credentialsBlock.setLayout(new GridLayout()); - credentialsBlock.setLayoutData(CmsUtils.fillAll()); + // credentialsBlock.setLayoutData(CmsUtils.fillAll()); specificUserUi(credentialsBlock); @@ -145,11 +149,12 @@ public class CmsLogin implements CmsStyles, CallbackHandler { // We need a composite for the traversal credentialsBlock = new Composite(parent, SWT.NONE); credentialsBlock.setLayout(new GridLayout()); - credentialsBlock.setLayoutData(CmsUtils.fillAll()); + // credentialsBlock.setLayoutData(CmsUtils.fillAll()); + CmsUtils.style(credentialsBlock, CMS_LOGIN_DIALOG); Integer textWidth = 120; - CmsUtils.style(parent, CMS_USER_MENU); - + if (parent instanceof Shell) + CmsUtils.style(parent, CMS_USER_MENU); // new Label(this, SWT.NONE).setText(CmsMsg.username.lead()); usernameT = new Text(credentialsBlock, SWT.BORDER); usernameT.setMessage(username.lead(locale)); @@ -188,8 +193,7 @@ public class CmsLogin implements CmsStyles, CallbackHandler { } /** - * To be overridden in order to provide custome login button and other - * links. + * To be overridden in order to provide custom login button and other links. */ protected void extendsCredentialsBlock(Composite credentialsBlock, Locale selectedLocale, SelectionListener loginSelectionListener) { @@ -214,6 +218,7 @@ public class CmsLogin implements CmsStyles, CallbackHandler { protected Composite createLocalesBlock(final Composite parent) { Composite c = new Composite(parent, SWT.NONE); + CmsUtils.style(c, CMS_USER_MENU_ITEM); c.setLayout(CmsUtils.noSpaceGridLayout()); c.setLayoutData(CmsUtils.fillAll()); @@ -233,6 +238,7 @@ public class CmsLogin implements CmsStyles, CallbackHandler { for (Integer i = 0; i < locales.size(); i++) { Locale locale = locales.get(i); Button button = new Button(c, SWT.RADIO); + CmsUtils.style(button, CMS_USER_MENU_ITEM); button.setData(i); button.setText(LocaleUtils.lead(locale.getDisplayName(locale), locale) + " (" + locale + ")"); // button.addListener(SWT.Selection, listener); @@ -244,6 +250,7 @@ public class CmsLogin implements CmsStyles, CallbackHandler { } protected boolean login() { + // TODO use CmsVie in order to retrieve subject? // Subject subject = cmsView.getLoginContext().getSubject(); // LoginContext loginContext = cmsView.getLoginContext(); try { @@ -251,7 +258,11 @@ public class CmsLogin implements CmsStyles, CallbackHandler { // LOGIN // // loginContext.logout(); - LoginContext loginContext = new LoginContext(NodeConstants.LOGIN_CONTEXT_USER, this); + LoginContext loginContext; + if (subject == null) + loginContext = new LoginContext(NodeConstants.LOGIN_CONTEXT_USER, this); + else + loginContext = new LoginContext(NodeConstants.LOGIN_CONTEXT_USER, subject, this); loginContext.login(); cmsView.authChange(loginContext); return true; @@ -290,9 +301,24 @@ public class CmsLogin implements CmsStyles, CallbackHandler { else if (callback instanceof HttpRequestCallback) { ((HttpRequestCallback) callback).setRequest(UiContext.getHttpRequest()); ((HttpRequestCallback) callback).setResponse(UiContext.getHttpResponse()); - } else if (callback instanceof LanguageCallback && localeChoice != null) - ((LanguageCallback) callback).setLocale(localeChoice.getSelectedLocale()); + } else if (callback instanceof LanguageCallback) { + Locale toUse = null; + if (localeChoice != null) + toUse = localeChoice.getSelectedLocale(); + else if (defaultLocale != null) + toUse = defaultLocale; + + if (toUse != null) { + ((LanguageCallback) callback).setLocale(toUse); + UiContext.setLocale(toUse); + } + + } } } + public void setSubject(Subject subject) { + this.subject = subject; + } + }