Search in sources :

Example 1 with DBHelper

use of h2weibo.model.DBHelper in project twitter-2-weibo by rjyo.

the class CallbackServlet method doGet.

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    HttpServletRouter r = new HttpServletRouter(request);
    r.setPattern("/:type");
    if (request.getParameter("denied") != null) {
        response.sendRedirect("/");
        return;
    }
    HttpSession session = request.getSession(false);
    String loginUser = (String) session.getAttribute(Keys.SESSION_LOGIN_USER);
    String oauthVerifier = request.getParameter("oauth_verifier");
    DBHelper helper = (DBHelper) request.getAttribute(Keys.REQUEST_DB_HELPER);
    if (r.is(":type", "weibo.jsp")) {
        String code = request.getParameter("code");
        if (code != null) {
            T2WUser tid = helper.findOneByUser(loginUser);
            if (tid.getToken() == null) {
                // send for the first time
                session.setAttribute(Keys.SESSION_PROMPT_TWEET, "You are ready to go! Do you want to tweet about this service and share it with your friends?");
            }
            Oauth oauth = new Oauth();
            try {
                AccessToken token = oauth.getAccessTokenByCode(code);
                tid.setToken(token.getAccessToken());
                Weibo weibo = new Weibo();
                weibo.setToken(tid.getToken());
                Account am = new Account();
                try {
                    JSONObject obj = am.getUid();
                    String uid = obj.getString("uid");
                    tid.setWeiboUserId(uid);
                } catch (WeiboException e) {
                    e.printStackTrace();
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                helper.saveUser(tid);
            } catch (WeiboException e) {
                log.error(e);
            }
        } else {
            log.error("Can't auth " + loginUser + " for Weibo. " + request.getQueryString());
        }
    } else if (r.is(":type", "twitter")) {
        try {
            TwitterFactory factory = new TwitterFactory();
            Twitter t = factory.getInstance();
            twitter4j.auth.RequestToken req = (RequestToken) session.getAttribute(Keys.SESSION_REQUEST_TOKEN);
            twitter4j.auth.AccessToken accessToken = t.getOAuthAccessToken(req, oauthVerifier);
            session.removeAttribute(Keys.SESSION_REQUEST_TOKEN);
            if (accessToken != null) {
                t.setOAuthAccessToken(accessToken);
                User user = t.verifyCredentials();
                loginUser = user.getScreenName();
                T2WUser tid = helper.findOneByUser(loginUser);
                if (tid.getTwitterToken() == null) {
                    // save latest id for the first time. sync from that tweet
                    ResponseList<Status> tl = t.getUserTimeline();
                    if (tl.size() > 0) {
                        Status s = tl.get(0);
                        tid.setLatestId(s.getId());
                    }
                }
                tid.setTwitterToken(accessToken.getToken());
                tid.setTwitterTokenSecret(accessToken.getTokenSecret());
                helper.saveUser(tid);
                session.setAttribute(Keys.SESSION_LOGIN_USER, loginUser);
            }
        } catch (TwitterException e) {
            log.error("Twitter Exception", e);
            throw new RuntimeException(e);
        }
    }
    String requestUrl = (String) session.getAttribute(Keys.SESSION_REQUEST_URL);
    if (requestUrl != null) {
        session.removeAttribute(Keys.SESSION_REQUEST_URL);
        response.sendRedirect(requestUrl);
    } else {
        response.sendRedirect("/u/" + loginUser);
    }
}
Also used : Account(weibo4j.Account) T2WUser(h2weibo.model.T2WUser) HttpSession(javax.servlet.http.HttpSession) DBHelper(h2weibo.model.DBHelper) JSONException(weibo4j.org.json.JSONException) twitter4j(twitter4j) Oauth(weibo4j.Oauth) Weibo(weibo4j.Weibo) WeiboException(weibo4j.model.WeiboException) T2WUser(h2weibo.model.T2WUser) JSONObject(weibo4j.org.json.JSONObject) AccessToken(weibo4j.http.AccessToken) RequestToken(twitter4j.auth.RequestToken) HttpServletRouter(h2weibo.HttpServletRouter)

Example 2 with DBHelper

use of h2weibo.model.DBHelper in project twitter-2-weibo by rjyo.

the class CommandServlet method doGet.

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    HttpServletRouter router = new HttpServletRouter(request);
    router.setPattern("/:cmd/:id");
    response.setContentType("text/plain; charset=UTF-8");
    response.setStatus(200);
    PrintWriter writer = response.getWriter();
    final DBHelper helper = (DBHelper) request.getAttribute(Keys.REQUEST_DB_HELPER);
    if (router.is(":cmd", "users")) {
        Set<String> ids = helper.getAuthorizedIds();
        Map<String, String> mappings = helper.getMappings();
        writer.println(String.format("Syncing user list: (%d users)", ids.size()));
        for (String id : ids) {
            writer.println(String.format("  %s => %s", id, mappings.get(id)));
        }
    } else if (router.is(":cmd", "mapping")) {
        Thread t = new Thread(new Runnable() {

            @Override
            public void run() {
                helper.createUserMap();
            }
        });
        t.start();
        response.sendRedirect("/");
    } else if (router.is(":cmd", "info")) {
        String info = helper.getJedisInfo();
        writer.println(info);
    } else if (router.is(":cmd", "del")) {
        if (router.has(":id")) {
            String user = router.get(":id");
            helper.deleteUser(helper.findOneByUser(user));
            response.sendRedirect("/u/" + user);
        }
    } else if (router.is(":cmd", "u")) {
        if (router.has(":id")) {
            T2WUser u = helper.findOneByUser(router.get(":id"));
            writer.println(String.format("Latest tweet ID is %d", u.getLatestId()));
            writer.println(String.format("Twitter ID is %s", router.get(":id")));
            writer.println(String.format("Weibo ID is %s", helper.getWeiboId(u.getUserId())));
            writer.println(String.format("Twitter Token %s", u.getTwitterToken()));
            writer.println(String.format("Twitter Secret %s", u.getTwitterTokenSecret()));
            writer.println(String.format("Weibo Token %s", u.getToken()));
            writer.println(String.format("Weibo User ID %s", u.getWeiboUserId()));
        }
    } else {
        response.sendRedirect("/");
    }
    writer.close();
}
Also used : T2WUser(h2weibo.model.T2WUser) DBHelper(h2weibo.model.DBHelper) PrintWriter(java.io.PrintWriter)

Example 3 with DBHelper

use of h2weibo.model.DBHelper in project twitter-2-weibo by rjyo.

the class SaveOptionsServlet method doDelete.

@Override
protected void doDelete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    HttpSession session = request.getSession(false);
    String loginUser = (String) session.getAttribute(Keys.SESSION_LOGIN_USER);
    log.info("Deleting user @" + loginUser);
    DBHelper helper = (DBHelper) request.getAttribute(Keys.REQUEST_DB_HELPER);
    T2WUser user = helper.findOneByUser(loginUser);
    helper.deleteUser(user);
    session.invalidate();
    response.setStatus(200);
}
Also used : T2WUser(h2weibo.model.T2WUser) HttpSession(javax.servlet.http.HttpSession) DBHelper(h2weibo.model.DBHelper)

Example 4 with DBHelper

use of h2weibo.model.DBHelper in project twitter-2-weibo by rjyo.

the class UserServlet method handleRequest.

@Override
protected Template handleRequest(HttpServletRequest request, HttpServletResponse response, Context ctx) {
    HttpServletRouter r = new HttpServletRouter(request);
    r.setPattern("/:id");
    HttpSession session = request.getSession(false);
    DBHelper helper = (DBHelper) request.getAttribute(Keys.REQUEST_DB_HELPER);
    // Service limit
    String uId = r.get(":id");
    if (!helper.isUser(uId) && helper.getUserCount() > 50) {
        return getTemplate("full.vm");
    }
    T2WUser user = helper.findOneByUser(uId);
    if (r.has(":id")) {
        log.info("Displaying user info for @" + uId);
        ctx.put("user_id", uId);
        ctx.put("user", helper.findOneByUser(uId));
        try {
            User weiboUser = (User) session.getAttribute(Keys.SESSION_WEIBO_USER);
            if (weiboUser == null) {
                Users um = new Users();
                weiboUser = um.showUserById(user.getWeiboUserId());
                session.setAttribute(Keys.SESSION_WEIBO_USER, weiboUser);
            }
            ctx.put("weibo_user", weiboUser.getScreenName());
            ctx.put("weibo_user_image", weiboUser.getProfileImageURL().toString());
            ctx.put("weibo_login", 1);
            // save weiboUser ID mapping
            helper.setWeiboId(user.getUserId(), weiboUser.getScreenName());
        } catch (Exception e) {
            // 401 = not logged in
            if (e instanceof WeiboException && ((WeiboException) e).getStatusCode() != 401) {
                e.printStackTrace();
            }
        }
        try {
            twitter4j.User twitterUser = (twitter4j.User) session.getAttribute(Keys.SESSION_TWITTER_USER);
            if (twitterUser == null) {
                TwitterFactory factory = new TwitterFactory();
                Twitter t = factory.getInstance();
                t.setOAuthAccessToken(new AccessToken(user.getTwitterToken(), user.getTwitterTokenSecret()));
                twitterUser = t.verifyCredentials();
                session.setAttribute(Keys.SESSION_TWITTER_USER, twitterUser);
            }
            ctx.put("twitter_user", twitterUser.getScreenName());
            ctx.put("twitter_user_image", twitterUser.getProfileImageURL().toString());
            ctx.put("twitter_login", 1);
        } catch (Exception e) {
            // 401 = not logged in
            if (e instanceof TwitterException && ((TwitterException) e).getStatusCode() != 401) {
                e.printStackTrace();
            }
        }
    }
    Object message = session.getAttribute(Keys.SESSION_MESSAGE);
    if (message != null) {
        ctx.put("message", message);
        session.removeAttribute(Keys.SESSION_MESSAGE);
    }
    Object prompt = session.getAttribute(Keys.SESSION_PROMPT_TWEET);
    if (prompt != null) {
        ctx.put("prompt", prompt);
        session.removeAttribute(Keys.SESSION_PROMPT_TWEET);
    }
    return getTemplate("user.vm");
}
Also used : T2WUser(h2weibo.model.T2WUser) User(weibo4j.model.User) HttpSession(javax.servlet.http.HttpSession) DBHelper(h2weibo.model.DBHelper) Twitter(twitter4j.Twitter) Users(weibo4j.Users) TwitterFactory(twitter4j.TwitterFactory) WeiboException(weibo4j.model.WeiboException) TwitterException(twitter4j.TwitterException) WeiboException(weibo4j.model.WeiboException) T2WUser(h2weibo.model.T2WUser) AccessToken(twitter4j.auth.AccessToken) HttpServletRouter(h2weibo.HttpServletRouter) TwitterException(twitter4j.TwitterException)

Example 5 with DBHelper

use of h2weibo.model.DBHelper in project twitter-2-weibo by rjyo.

the class CommandServlet method init.

@Override
public void init(ServletConfig config) throws ServletException {
    super.init(config);
    log.info("Web started.");
    JedisPool pool = getPool(getServletContext());
    DBHelper helper = DBHelperFactory.createHelper(pool);
    // clear the queue
    helper.clearQueue();
    Scheduler scheduler = new Scheduler();
    QueueTask task = new QueueTask();
    task.setHelper(DBHelperFactory.createHelper(pool));
    scheduler.schedule("*/2 * * * *", task);
    scheduler.start();
    log.info("Cron scheduler started.");
    log.info("Worker started.");
    // 1 Threads to handle the sync job
    new Thread(new SyncWorkerRunnable(DBHelperFactory.createHelper(pool))).start();
}
Also used : DBHelper(h2weibo.model.DBHelper) Scheduler(it.sauronsoftware.cron4j.Scheduler) JedisPool(redis.clients.jedis.JedisPool)

Aggregations

DBHelper (h2weibo.model.DBHelper)8 T2WUser (h2weibo.model.T2WUser)6 HttpSession (javax.servlet.http.HttpSession)5 HttpServletRouter (h2weibo.HttpServletRouter)2 AccessToken (twitter4j.auth.AccessToken)2 WeiboException (weibo4j.model.WeiboException)2 Scheduler (it.sauronsoftware.cron4j.Scheduler)1 PrintWriter (java.io.PrintWriter)1 HttpServletRequest (javax.servlet.http.HttpServletRequest)1 JedisPool (redis.clients.jedis.JedisPool)1 twitter4j (twitter4j)1 Twitter (twitter4j.Twitter)1 TwitterException (twitter4j.TwitterException)1 TwitterFactory (twitter4j.TwitterFactory)1 RequestToken (twitter4j.auth.RequestToken)1 Account (weibo4j.Account)1 Oauth (weibo4j.Oauth)1 Users (weibo4j.Users)1 Weibo (weibo4j.Weibo)1 AccessToken (weibo4j.http.AccessToken)1