package com.googlecode.flickr2twitter.sina.weibo4j.http;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.googlecode.flickr2twitter.datastore.model.User;
import com.googlecode.flickr2twitter.impl.sina.TargetServiceProviderSina;
import com.googlecode.flickr2twitter.servlet.UserAccountServlet;
import com.googlecode.flickr2twitter.sina.weibo4j.Weibo;
import com.googlecode.flickr2twitter.sina.weibo4j.WeiboException;
public class SinaSignInCallBackServlet extends HttpServlet {
private static final Logger log = LoggerFactory
.getLogger(SinaSignInCallBackServlet.class);
private static final long serialVersionUID = -1016731113426658126L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// //get user information from session
User currentUser = (User) req.getSession().getAttribute(UserAccountServlet.PARA_SESSION_USER);
if( currentUser == null ) {
resp.sendRedirect("index.jsp");
return;
}
String email = currentUser.getUserId().getEmail();
// Get the verifier;
String verifier = req.getParameter("oauth_verifier");
String oauthToken = req.getParameter("oauth_token");
log.info("SINA oauth_token = {}, oauth_verifier = {}", oauthToken, verifier);
// Request token and secret
Map<String, Object> currentData = (Map<String, Object>) req.getSession()
.getAttribute(TargetServiceProviderSina.ID);
if (currentData.containsKey("token") == false || currentData.containsKey("secret") == false) {
resp.getWriter().println("Error to get request token from cookie.");
return;
}
String requestToken = String.valueOf(currentData.get("token")); //req.getParameter("t"); //token
String requestTokenSecret = String.valueOf(currentData.get("secret")); //req.getParameter("s"); //secret
if (verifier == null) {
resp.getWriter().println("Error to get the verifier.");
return;
}
System.setProperty("weibo4j.oauth.consumerKey", Weibo.CONSUMER_KEY);
System.setProperty("weibo4j.oauth.consumerSecret",
Weibo.CONSUMER_SECRET);
Weibo weibo = new Weibo();
try {
AccessToken accessToken = weibo.getOAuthAccessToken(requestToken, requestTokenSecret,
verifier);
if (accessToken == null) {
throw new ServletException("Error to get access token.");
} else {
//save the access token into db
TargetServiceProviderSina tps = new TargetServiceProviderSina();
Map<String,Object> data = new HashMap<String,Object>();
data.put("token",accessToken.getToken());
data.put("secret", accessToken.getTokenSecret());
data.put("userId", accessToken.getUserId());
try {
tps.readyAuthorization(email, data);
resp.sendRedirect("/authorize.jsp");
} catch (Exception e) {
log.warn(e.getLocalizedMessage(), e);
throw new ServletException("You've already authorize sina.");
}
return;
}
} catch (WeiboException e) {
resp.getWriter().println("Error: " + e.getMessage());
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGet(req,resp);
}
}