r1526 - in trunk/src/main/java/cc/kune: common/client/utils core/client core/client/auth core/client/cookies core/client/state
Author: vjrj_ Date: 2011-09-22 18:08:44 +0200 (Thu, 22 Sep 2011) New Revision: 1526 Added: trunk/src/main/java/cc/kune/core/client/auth/AnonUsersManager.java Modified: trunk/src/main/java/cc/kune/common/client/utils/TextUtils.java trunk/src/main/java/cc/kune/core/client/CoreGinModule.java trunk/src/main/java/cc/kune/core/client/CoreParts.java trunk/src/main/java/cc/kune/core/client/auth/SignInAbstractPresenter.java trunk/src/main/java/cc/kune/core/client/cookies/CookiesManager.java trunk/src/main/java/cc/kune/core/client/cookies/CookiesManagerImpl.java trunk/src/main/java/cc/kune/core/client/state/Session.java trunk/src/main/java/cc/kune/core/client/state/SessionDefault.java Log: CLOSED - # 102: Highlight Sign-In and/or show "New" button disabled to anonymous user http://kune.ourproject.org/issues/ticket/102 Modified: trunk/src/main/java/cc/kune/common/client/utils/TextUtils.java =================================================================== --- trunk/src/main/java/cc/kune/common/client/utils/TextUtils.java 2011-09-20 23:21:27 UTC (rev 1525) +++ trunk/src/main/java/cc/kune/common/client/utils/TextUtils.java 2011-09-22 16:08:44 UTC (rev 1526) @@ -24,8 +24,10 @@ import org.apache.commons.lang.WordUtils; import cc.kune.common.client.errors.NotImplementedException; +import cc.kune.common.client.errors.UIException; import com.google.gwt.safehtml.shared.SimpleHtmlSanitizer; +import com.google.gwt.safehtml.shared.UriUtils; public class TextUtils { @@ -169,15 +171,25 @@ } /** - * FIXME: Is this safe? Try to use {@link SimpleHtmlSanitizer} also in the - * method + * Generates a href link * */ - @Deprecated public static String generateHtmlLink(final String href, final String text) { - return "<a href=\"" + href + "\" target=\"_blank\">" + text + "</a>"; + return generateHtmlLink(href, text, true); } + /** + * Generates a href link + * + */ + public static String generateHtmlLink(final String href, final String text, final boolean targetBlank) { + if (!UriUtils.isSafeUri(href)) { + throw new UIException("Unsafe href"); + } + return "<a href=\"" + UriUtils.sanitizeUri(href) + "\"" + (targetBlank ? "target=\"_blank\"" : "") + + ">" + text + "</a>"; + } + private static boolean isDelimiter(final char ch, final char[] delimiters) { if (delimiters == null) { throw new NotImplementedException(); Modified: trunk/src/main/java/cc/kune/core/client/CoreGinModule.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/CoreGinModule.java 2011-09-20 23:21:27 UTC (rev 1525) +++ trunk/src/main/java/cc/kune/core/client/CoreGinModule.java 2011-09-22 16:08:44 UTC (rev 1526) @@ -31,6 +31,7 @@ import cc.kune.common.client.ui.MaskWidgetView; import cc.kune.core.client.actions.ActionRegistryByType; import cc.kune.core.client.actions.xml.XMLActionsParser; +import cc.kune.core.client.auth.AnonUsersManager; import cc.kune.core.client.auth.Register; import cc.kune.core.client.auth.RegisterPanel; import cc.kune.core.client.auth.RegisterPresenter; @@ -137,6 +138,7 @@ s(I18nUITranslationService.class); bind(I18nTranslationService.class).to(I18nUITranslationService.class).in(Singleton.class); bind(GlobalShortcutRegister.class).to(DefaultGlobalShortcutRegister.class).in(Singleton.class); + s(AnonUsersManager.class); // DnD s(KuneDragController.class); Modified: trunk/src/main/java/cc/kune/core/client/CoreParts.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/CoreParts.java 2011-09-20 23:21:27 UTC (rev 1525) +++ trunk/src/main/java/cc/kune/core/client/CoreParts.java 2011-09-22 16:08:44 UTC (rev 1526) @@ -19,6 +19,7 @@ */ package cc.kune.core.client; +import cc.kune.core.client.auth.AnonUsersManager; import cc.kune.core.client.init.AppStartEvent; import cc.kune.core.client.init.AppStartEvent.AppStartHandler; import cc.kune.core.client.sitebar.SiteUserOptionsPresenter; @@ -37,7 +38,7 @@ public CoreParts(final Session session, final Provider<GroupSNPresenter> groupMembersPresenter, final Provider<UserSNPresenter> buddiesAndParticipationPresenter, final Provider<GroupSNConfActions> groupMembersConfActions, - final Provider<UserSNConfActions> userSNConfActions, + final Provider<UserSNConfActions> userSNConfActions, final Provider<AnonUsersManager> anonUsers, final Provider<SiteUserOptionsPresenter> userOptions) { session.onAppStart(true, new AppStartHandler() { @Override @@ -47,6 +48,7 @@ groupMembersPresenter.get(); buddiesAndParticipationPresenter.get(); userOptions.get(); + anonUsers.get(); } }); } Added: trunk/src/main/java/cc/kune/core/client/auth/AnonUsersManager.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/auth/AnonUsersManager.java (rev 0) +++ trunk/src/main/java/cc/kune/core/client/auth/AnonUsersManager.java 2011-09-22 16:08:44 UTC (rev 1526) @@ -0,0 +1,57 @@ +package cc.kune.core.client.auth; + +import cc.kune.common.client.notify.NotifyUser; +import cc.kune.common.client.utils.TextUtils; +import cc.kune.core.client.cookies.CookiesManager; +import cc.kune.core.client.init.AppStartEvent; +import cc.kune.core.client.init.AppStartEvent.AppStartHandler; +import cc.kune.core.client.state.Session; +import cc.kune.core.client.state.SiteTokens; +import cc.kune.core.client.state.UserSignInEvent; +import cc.kune.core.client.state.UserSignInEvent.UserSignInHandler; +import cc.kune.core.shared.i18n.I18nTranslationService; + +import com.google.inject.Inject; + +public class AnonUsersManager { + + @Inject + public AnonUsersManager(final Session session, final CookiesManager cookiesManager, + final I18nTranslationService i18n) { + session.onAppStart(true, new AppStartHandler() { + @Override + public void onAppStart(final AppStartEvent event) { + if (session.isNotLogged()) { + final String anonCookie = cookiesManager.getAnonCookie(); + if (anonCookie == null) { + // First access, set cookie to short period (1day), and show message + cookiesManager.setAnonCookie(false); + final String register = TextUtils.generateHtmlLink("#" + SiteTokens.REGISTER, + i18n.tWithNT("register", "register, in lowercase"), false); + final String signin = TextUtils.generateHtmlLink("#" + SiteTokens.SIGNIN, + i18n.tWithNT("sign in", "register, in lowercase"), false); + NotifyUser.info( + i18n.tWithNT( + "You did not sign-in, so you can just see some public contents in this website, " + + "but not edit or collaborate with others. Please [%s] or [%s] in order to get full access to this site tools and contents", + "This will be something like 'Please register or sign in', but instead of %s some links", + register, signin), true); + } else { + if (Boolean.valueOf(anonCookie)) { + // Registered already: we set the cookie for some big period again + cookiesManager.setAnonCookie(true); + } else { + // Non registered yet: but we show the message already today + } + } + } + } + }); + session.onUserSignIn(true, new UserSignInHandler() { + @Override + public void onUserSignIn(final UserSignInEvent event) { + cookiesManager.setAnonCookie(true); + } + }); + } +} Modified: trunk/src/main/java/cc/kune/core/client/auth/SignInAbstractPresenter.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/auth/SignInAbstractPresenter.java 2011-09-20 23:21:27 UTC (rev 1525) +++ trunk/src/main/java/cc/kune/core/client/auth/SignInAbstractPresenter.java 2011-09-22 16:08:44 UTC (rev 1526) @@ -76,7 +76,7 @@ protected void onSignIn(final UserInfoDTO userInfoDTO) { final String userHash = userInfoDTO.getUserHash(); - cookiesManager.setCookie(userHash); + cookiesManager.setAuthCookie(userHash); getView().reset(); session.setUserHash(userHash); session.setCurrentUserInfo(userInfoDTO); Modified: trunk/src/main/java/cc/kune/core/client/cookies/CookiesManager.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/cookies/CookiesManager.java 2011-09-20 23:21:27 UTC (rev 1525) +++ trunk/src/main/java/cc/kune/core/client/cookies/CookiesManager.java 2011-09-22 16:08:44 UTC (rev 1526) @@ -20,9 +20,16 @@ package cc.kune.core.client.cookies; public interface CookiesManager { - String getCurrentCookie(); + String getAnonCookie(); - void removeCookie(); + String getAuthCookie(); - void setCookie(String userHash); + void removeAnonCookie(); + + void removeAuthCookie(); + + void setAnonCookie(Boolean userRegister); + + void setAuthCookie(String userHash); + } Modified: trunk/src/main/java/cc/kune/core/client/cookies/CookiesManagerImpl.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/cookies/CookiesManagerImpl.java 2011-09-20 23:21:27 UTC (rev 1525) +++ trunk/src/main/java/cc/kune/core/client/cookies/CookiesManagerImpl.java 2011-09-22 16:08:44 UTC (rev 1526) @@ -28,31 +28,50 @@ public class CookiesManagerImpl implements CookiesManager { - public CookiesManagerImpl() { - } + private static final String ANON = "annon"; - @Override - public String getCurrentCookie() { - return Cookies.getCookie(Session.USERHASH); - } + public CookiesManagerImpl() { + } - @Override - public void removeCookie() { - // FIXME: Remove cookie doesn't works in all browsers, know - // issue: - // http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/ded86... - // http://code.google.com/p/google-web-toolkit/issues/detail?id=1735&q=removeCo... - Cookies.removeCookie(Session.USERHASH); - // Workaround: - Cookies.setCookie(Session.USERHASH, null, new Date(0), null, "/", false); - } + @Override + public String getAnonCookie() { + return Cookies.getCookie(ANON); + } - @Override - public void setCookie(final String userHash) { - // http://code.google.com/p/google-web-toolkit-incubator/wiki/LoginSecurityFAQ - final long duration = Session.SESSION_DURATION; - final Date expires = new Date(System.currentTimeMillis() + duration); - Cookies.setCookie(Session.USERHASH, userHash, expires, null, "/", false); - Log.info("Received hash: " + userHash, null); - } + @Override + public String getAuthCookie() { + return Cookies.getCookie(Session.USERHASH); + } + + @Override + public void removeAnonCookie() { + Cookies.removeCookie(ANON); + Cookies.setCookie(ANON, null, new Date(0), null, "/", false); + } + + @Override + public void removeAuthCookie() { + // FIXME: Remove cookie doesn't works in all browsers, know + // issue: + // http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/ded86... + // http://code.google.com/p/google-web-toolkit/issues/detail?id=1735&q=removeCo... + Cookies.removeCookie(Session.USERHASH); + // Workaround: + Cookies.setCookie(Session.USERHASH, null, new Date(0), null, "/", false); + } + + @Override + public void setAnonCookie(final Boolean userRegister) { + final Date expires = new Date(System.currentTimeMillis() + + (userRegister ? Session.ANON_SESSION_DURATION_AFTER_REG : Session.ANON_SESSION_DURATION)); + Cookies.setCookie(ANON, userRegister.toString(), expires, null, "/", false); + } + + @Override + public void setAuthCookie(final String userHash) { + // http://code.google.com/p/google-web-toolkit-incubator/wiki/LoginSecurityFAQ + final Date expires = new Date(System.currentTimeMillis() + Session.SESSION_DURATION); + Cookies.setCookie(Session.USERHASH, userHash, expires, null, "/", false); + Log.info("Received hash: " + userHash, null); + } } Modified: trunk/src/main/java/cc/kune/core/client/state/Session.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/state/Session.java 2011-09-20 23:21:27 UTC (rev 1525) +++ trunk/src/main/java/cc/kune/core/client/state/Session.java 2011-09-22 16:08:44 UTC (rev 1526) @@ -61,11 +61,11 @@ public interface Session { - /** - * Duration remembering login: 2 weeks - */ - int SESSION_DURATION = 1000 * 60 * 60 * 24 * 14; - // int SESSION_DURATION = 1000; + long A_DAY = 1000 * 60 * 60 * 24; + long ANON_SESSION_DURATION = A_DAY; + long ANON_SESSION_DURATION_AFTER_REG = A_DAY * 365; + long SESSION_DURATION = A_DAY * 14; // two weeks login session duration + // long SESSION_DURATION = 1000; String USERHASH = "k007userHash"; Modified: trunk/src/main/java/cc/kune/core/client/state/SessionDefault.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/state/SessionDefault.java 2011-09-20 23:21:27 UTC (rev 1525) +++ trunk/src/main/java/cc/kune/core/client/state/SessionDefault.java 2011-09-22 16:08:44 UTC (rev 1526) @@ -71,7 +71,7 @@ final Provider<UserServiceAsync> userServiceProvider, final EventBus eventBus) { this.cookieManager = cookieManager; this.eventBus = eventBus; - this.userHash = cookieManager.getCurrentCookie(); + this.userHash = cookieManager.getAuthCookie(); this.userHash = userHash == null || userHash.equals("null") ? null : userHash; this.userServiceProvider = userServiceProvider; languagesArray = null; @@ -391,7 +391,7 @@ @Override public void signOut() { - cookieManager.removeCookie(); + cookieManager.removeAuthCookie(); setUserHash(null); setCurrentUserInfo(null); }
participants (1)
-
Vicente J. Ruiz Jurado