Package de.jetwick.ui

Source Code of de.jetwick.ui.MySession

/**
* Copyright (C) 2010 Peter Karich <jetwick_@_pannous_._info>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*         http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.jetwick.ui;

import de.jetwick.config.DefaultModule;
import de.jetwick.es.ElasticUserSearch;
import de.jetwick.data.JUser;
import de.jetwick.tw.TwitterSearch;
import de.jetwick.util.Helper;
import java.util.Collection;
import java.util.Date;
import javax.servlet.http.Cookie;
import org.apache.wicket.Request;
import org.apache.wicket.protocol.http.WebRequest;
import org.apache.wicket.protocol.http.WebResponse;
import org.apache.wicket.protocol.http.WebSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import twitter4j.TwitterException;
import twitter4j.User;
import twitter4j.auth.AccessToken;

/**
* @author Peter Karich, peat_hal 'at' users 'dot' sourceforge 'dot' net
*/
public class MySession extends WebSession {

    private static final long serialVersionUID = 1L;
    private final Logger logger = LoggerFactory.getLogger(getClass());
    /**
     * twitter4j saves state. so it is a bit complicated.
     * twitterSearch is always a new instance with the same twitter4j reference.
     * BUT we need to replace the twitter4j instance for every logged in user via
     * TwitterSearch.setTwitter4JInstance to get the correct user name etc
     *
     * @see DefaultModule
     * onNewSession session called for every request. everytime a new instance
     */
    private TwitterSearch twitterSearch;
    private JUser user = null;
    private boolean twitterSearchInitialized = false;
    private boolean sessionTimedOut = false;
    private String email;

    public MySession(Request request) {
        super(request);
    }

    public void setSessionTimedOut(boolean sessionTimedout) {
        this.sessionTimedOut = sessionTimedout;
    }

    public String getSessionTimeOutMessage() {
        String str = "";
        if (sessionTimedOut)
            str = "You have been inactivate a while. Please go back and refresh or try again.";

        sessionTimedOut = false;
        return str;
    }

    void setTwitterSearchInitialized(boolean twitterSearchInitialized) {
        this.twitterSearchInitialized = twitterSearchInitialized;
    }

    public TwitterSearch getTwitterSearch() {
        return twitterSearch;
    }

    // for test only
    void setTwitterSearch(TwitterSearch twitterSearch) {
        this.twitterSearch = twitterSearch;
    }

    public JUser getUser() {
        return user;
    }

    // use only for tests!
    public void setUser(JUser user) {
        this.user = user;
        dirty();
    }

    public boolean hasLoggedIn() {
        return getUser() != null;
    }

    public void onNewSession(WebRequest request, ElasticUserSearch uSearch) {
        if (!twitterSearchInitialized) {
            twitterSearchInitialized = true;
            Cookie cookie = request.getCookie(TwitterSearch.COOKIE);
            if (cookie != null) {               
                setUser(uSearch.findByTwitterToken(cookie.getValue()));
                if (user != null) {
                    user.setLastVisit(new Date());
                    uSearch.save(user, false);
                    logger.info("Found cookie for user:" + getUser().getScreenName());
                }
            } else
                logger.info("No cookie found. IP=" + request.getHttpServletRequest().getRemoteHost());
        }
    }

    public Cookie afterLogin(AccessToken token, ElasticUserSearch uSearch,
            WebResponse response)
            throws TwitterException {
        if (email == null)
            throw new IllegalArgumentException("Email not available. Please login again.");

        twitterSearch.initTwitter4JInstance(token.getToken(), token.getTokenSecret(), true);
        twitterSearchInitialized = true;
//            logger.info("TOKEN:" + token);
        Cookie cookie = new Cookie(TwitterSearch.COOKIE, token.getToken());
        // LATER: use https: cookie.setSecure(true);
        cookie.setComment("Supply autologin for " + Helper.JETSLIDE_URL);
        // four weeks
        cookie.setMaxAge(4 * 7 * 24 * 60 * 60);
        // set path because the cookie should be sent for / and /slide* and /login*
        cookie.setPath("/");
        response.addCookie(cookie);

        // get current infos
        User twitterUser = twitterSearch.getTwitterUser();

        // get current saved searches and update with current twitter infos
        JUser tmpUser = uSearch.findById(token.getUserId());
        if (tmpUser == null) {
            tmpUser = uSearch.findByScreenName(twitterUser.getScreenName());
            if (tmpUser == null)
                tmpUser = new JUser(twitterUser.getScreenName());
        }

        tmpUser.updateFieldsBy(twitterUser);
        // now set email entered on form one page before twitter redirect
        tmpUser.setEmail(email);
        tmpUser.setTwitterToken(token.getToken());
        tmpUser.setTwitterTokenSecret(token.getTokenSecret());
        tmpUser.setLastVisit(new Date());

        // save user into user index
        uSearch.save(tmpUser, false);

        // save user into session
        setUser(tmpUser);

        logger.info("[stats] user login:" + twitterUser.getScreenName() + " " + tmpUser.getScreenName());
        return cookie;
    }

    public void clearCookie(WebResponse response, String name) {
        Cookie c = new Cookie(name, "");
        c.setPath("/");
        response.clearCookie(c);
    }

    public void logout(ElasticUserSearch uSearch, WebResponse response, boolean invalidate) {
        // clear old cookie version too:
        clearCookie(response, "jetwick");
        clearCookie(response, TwitterSearch.COOKIE);
        JUser tmpUser = getUser();
        if (tmpUser != null) {
            logger.info("[stats] user logout:" + tmpUser.getScreenName());
//            tmpUser.setTwitterToken(null);
//            tmpUser.setTwitterTokenSecret(null);
            uSearch.save(tmpUser, false);
        }
        setUser(null);
        if(invalidate)
            invalidate();
    }

    public Collection<String> getFriends(ElasticUserSearch uSearch) {
        Collection<String> friends = getUser().getFriends();
        if (friends.isEmpty()) {
            // we will need to update regularly to avoid missing the friends-update from TweetProducer
            JUser tmp = uSearch.findByScreenName(getUser().getScreenName());
            if (tmp != null) {                           
                user = tmp;
                friends = tmp.getFriends();
            }
        }
        return friends;
    }

    public void setFormData(String email, String pw) {
        this.email = email;
//        this.password = pw;
    }
}
TOP

Related Classes of de.jetwick.ui.MySession

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.