package net.thesocialos.server; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.thesocialos.server.json.JSONException; import net.thesocialos.server.json.JSONObject; import net.thesocialos.shared.model.FlickR; import net.thesocialos.shared.model.Session; import net.thesocialos.shared.model.Twitter; import net.thesocialos.shared.model.User; import org.scribe.model.OAuthRequest; import org.scribe.model.Response; import org.scribe.model.Token; import org.scribe.model.Verb; import org.scribe.model.Verifier; import org.scribe.oauth.OAuthService; import com.googlecode.objectify.Objectify; import com.googlecode.objectify.ObjectifyService; public class OauthCallback extends HttpServlet { /** * */ private static final long serialVersionUID = 7384724356709314551L; private static final int TWITTER = 0; private static final int FLICKR = 1; OAuthService service = null; Twitter twitterAccount = null; FlickR flickrAccount = null; public OauthCallback() { // TODO Auto-generated constructor stub } private String getFlickrUsername(Token accessToken) { OAuthRequest request = new OAuthRequest(Verb.GET, "http://api.flickr.com/services/rest"); request.addQuerystringParameter("method", "flickr.test.login"); request.addQuerystringParameter("format", "json"); request.addQuerystringParameter("nojsoncallback", "1"); service.signRequest(accessToken, request); Response resp = request.send(); String body = resp.getBody(); try { JSONObject js = new JSONObject(body); JSONObject userjs = js.getJSONObject("user"); return userjs.getJSONObject("username").getString("_content"); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } private String getUsername(int type, Token accessToken) { OAuthRequest request = null; String params = null; switch (type) { case TWITTER: request = new OAuthRequest(Verb.GET, "http://api.twitter.com/1/account/verify_credentials.json"); params = "screen_name"; break; default: return ""; } service.signRequest(accessToken, request); Response resp = request.send(); String body = resp.getBody(); try { JSONObject js = new JSONObject(body); return js.getString(params); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } @Override public void service(HttpServletRequest request, HttpServletResponse response) { String oauthToken = request.getParameter("oauth_token"); String oauthVerifier = request.getParameter("oauth_verifier"); service = (OAuthService) request.getSession().getAttribute("OAuthService"); Token requestToken = (Token) request.getSession().getAttribute("OAuthRequestToken"); Verifier verifier = new Verifier(oauthVerifier); Token accessToken = service.getAccessToken(requestToken, verifier); Objectify ofy = ObjectifyService.begin(); Session session = UserHelper.getSesssionHttpSession(request.getSession()); User user = UserHelper.getUserSession(request.getSession(), ofy); if (request.getServletPath().contains("twitter")) { twitterAccount = new Twitter(accessToken.getToken(), accessToken.getSecret()); twitterAccount.setUsername(getUsername(TWITTER, accessToken)); user.addAccount(ofy.put(twitterAccount)); } else if (request.getServletPath().contains("flickr")) { flickrAccount = new FlickR(accessToken.getToken(), accessToken.getSecret()); flickrAccount.setUsername(getFlickrUsername(accessToken)); user.addAccount(ofy.put(flickrAccount)); } else { try { PrintWriter writer = response.getWriter(); writer.write("There wan an error fulfilling the request. Please contact with support@thesocialos.net so it can be fixed"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return; } ofy.put(user); try { PrintWriter writer = response.getWriter(); response.setContentType("text/html"); writer.println("<html>"); writer.println("<head>"); writer.println("<TITLE>"); writer.println("Account Added"); writer.println("</TITLE>"); writer.println("<SCRIPT LANGUAGE=javascript>"); writer.println("<!--"); writer.println("function window_onload() { window.opener.location.hash='account-added'; window.close(); } "); writer.println("//-->"); writer.println("</SCRIPT>"); writer.println("</head>"); writer.println("<body onload=window_onload()>"); writer.println("</body>"); writer.println("</html>"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }