[facebook-java-webapp] r37 committed - - Refactoring the logic behind the /graph-api/me

0 views
Skip to first unread message

facebook-j...@googlecode.com

unread,
May 22, 2010, 10:44:19 PM5/22/10
to facebook-...@googlegroups.com
Revision: 37
Author: cesar.arevalo1
Date: Sat May 22 19:43:15 2010
Log: - Refactoring the logic behind the /graph-api/me
http://code.google.com/p/facebook-java-webapp/source/detail?r=37

Added:

/springwebmvc-hibernate/trunk/src/main/java/com/google/code/facebookwebapp/controller/BaseController.java
Modified:

/springwebmvc-hibernate/trunk/src/main/java/com/google/code/facebookwebapp/controller/GraphController.java

/springwebmvc-hibernate/trunk/src/main/java/com/google/code/facebookwebapp/controller/OauthController.java

/springwebmvc-hibernate/trunk/src/main/java/com/google/code/facebookwebapp/controller/web/GraphApiController.java

/springwebmvc-hibernate/trunk/src/main/java/com/google/code/facebookwebapp/util/FacebookConstants.java

=======================================
--- /dev/null
+++
/springwebmvc-hibernate/trunk/src/main/java/com/google/code/facebookwebapp/controller/BaseController.java
Sat May 22 19:43:15 2010
@@ -0,0 +1,130 @@
+/**
+ *
+ */
+package com.google.code.facebookwebapp.controller;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.URL;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+
+import com.google.code.facebookwebapp.service.UserService;
+import com.google.code.facebookwebapp.util.FacebookConstants;
+import com.google.code.facebookwebapp.util.FacebookProperty;
+import com.restfb.DefaultFacebookClient;
+import com.restfb.FacebookClient;
+import com.restfb.types.User;
+
+/**
+ * @author Cesar Arevalo
+ * @since 0.4
+ */
+@Controller
+public class BaseController {
+
+ private static Log log = LogFactory.getLog(BaseController.class);
+
+ @Autowired
+ private UserService userService;
+
+ public String authenticate(Model model, HttpServletRequest request,
+ HttpServletResponse response) throws Exception {
+
+ String view = null;
+
+ String requestUri = request.getRequestURI().replaceFirst(
+ request.getContextPath(), "");
+ if (log.isDebugEnabled()) {
+ log.debug("requestUri=" + requestUri);
+ }
+
+ if (request.getParameter("code") == null) {
+ String url = "https://graph.facebook.com/oauth/authorize?"
+ + "scope=publish_stream,offline_access,create_event"
+ + "&client_id="
+ + FacebookProperty
+ .getString(FacebookConstants.PROPERTY_API_KEY)
+ + "&redirect_uri="
+ + FacebookProperty
+ .getString(FacebookConstants.PROPERTY_CONNECT_URL)
+ + requestUri;
+
+ view = "redirect:" + url;
+ } else {
+
+ view = "oauth";
+
+ getAccessToken(model, request, response);
+ }
+ return view;
+ }
+
+ public String getAccessToken(Model model, HttpServletRequest request,
+ HttpServletResponse response) throws Exception {
+
+ String redirecttUri = FacebookProperty
+ .getString(FacebookConstants.PROPERTY_CONNECT_URL)
+ + request.getRequestURI().replaceFirst(
+ request.getContextPath(), "");
+ String code = request.getParameter("code");
+ if (code == null || redirecttUri == null) {
+ return null;
+ }
+
+ model.addAttribute("code", request.getParameter("code"));
+
+ String url = "https://graph.facebook.com/oauth/access_token?"
+ + "client_id="
+ + FacebookProperty
+ .getString(FacebookConstants.PROPERTY_API_KEY)
+ + "&client_secret="
+ + FacebookProperty
+ .getString(FacebookConstants.PROPERTY_API_SECRET)
+ + "&code=" + code + "&redirect_uri=" + redirecttUri;
+
+ String accessToken = readUrl(url).split("&")[0].replaceFirst(
+ "access_token=", "");
+
+ model.addAttribute("accessToken", accessToken);
+
+ FacebookClient facebookClient = new DefaultFacebookClient(accessToken);
+
+ User user = facebookClient.fetchObject("me", User.class);
+
+ if (log.isInfoEnabled()) {
+ log.info("User name: " + user.getName());
+ }
+
+ userService.create(user.getId(), user.getName(), user.getLink(),
+ accessToken, null);
+
+ request.getSession().setAttribute("fb_user", user);
+ request.getSession().setAttribute(FacebookConstants.SESSION_FB_USER_ID,
user.getId());
+
+ return accessToken;
+ }
+
+ protected String readUrl(String urlString) throws IOException {
+ URL url = new URL(urlString);
+ BufferedReader in = new BufferedReader(new InputStreamReader(url
+ .openStream()));
+
+ String response = "";
+ String inputLine;
+
+ while ((inputLine = in.readLine()) != null)
+ response += inputLine;
+
+ in.close();
+ return response;
+ }
+}
=======================================
---
/springwebmvc-hibernate/trunk/src/main/java/com/google/code/facebookwebapp/controller/GraphController.java
Thu May 20 17:26:39 2010
+++
/springwebmvc-hibernate/trunk/src/main/java/com/google/code/facebookwebapp/controller/GraphController.java
Sat May 22 19:43:15 2010
@@ -32,7 +32,7 @@
public String handler(HttpServletRequest request, HttpServletResponse
response, Model model) throws Exception {

String facebookUserId = (String) request.getSession().getAttribute(
- FacebookConstants.SESSION_FB_USER);
+ FacebookConstants.SESSION_FB_USER_ID);
if (facebookUserId == null) {
request.getSession().setAttribute("redirect_to",
request.getRequestURI());
=======================================
---
/springwebmvc-hibernate/trunk/src/main/java/com/google/code/facebookwebapp/controller/OauthController.java
Thu May 20 17:26:39 2010
+++
/springwebmvc-hibernate/trunk/src/main/java/com/google/code/facebookwebapp/controller/OauthController.java
Sat May 22 19:43:15 2010
@@ -3,135 +3,22 @@
*/
package com.google.code.facebookwebapp.controller;

-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.net.URL;
-
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

-import com.google.code.facebookwebapp.service.UserService;
-import com.google.code.facebookwebapp.util.FacebookConstants;
-import com.google.code.facebookwebapp.util.FacebookProperty;
-import com.restfb.DefaultFacebookClient;
-import com.restfb.FacebookClient;
-import com.restfb.types.User;
-
/**
* @author Cesar Arevalo
* @since 0.4
*/
@Controller
-public class OauthController {
-
- private static Log log = LogFactory
- .getLog(OauthController.class);
-
- @Autowired
- private UserService userService;
-
+public class OauthController extends BaseController {
@RequestMapping("/oauth")
- public String hanlder(Model model, HttpServletRequest request,
+ public String handler(Model model, HttpServletRequest request,
HttpServletResponse response) throws Exception {
-
- String view = null;
-
- if (request.getParameter("redirect_to") != null) {
- String redirectTo = request.getParameter("redirect_to");
- if (log.isDebugEnabled()) {
- log.debug("redirect_to=" + redirectTo);
- }
- request.getSession(true).setAttribute("redirect_to", redirectTo);
- }
-
- if (request.getParameter("code") == null) {
-
- String url = "https://graph.facebook.com/oauth/authorize?"
- + "scope=publish_stream,offline_access,create_event"
- + "&client_id="
- + FacebookProperty
- .getString(FacebookConstants.PROPERTY_API_KEY)
- + "&redirect_uri="
- + FacebookProperty
- .getString(FacebookConstants.PROPERTY_CONNECT_URL)
- + "/oauth";
-
- view = "redirect:" + url;
- } else {
-
- String redirectTo = (String)
request.getSession().getAttribute("redirect_to");
- if (redirectTo != null) {
- view = "redirect:" + redirectTo;
- request.getSession().removeAttribute("redirect_to");
- }
- else {
- view = "redirect:oauth";
- }
-
- String code = request.getParameter("code");
-
- model.addAttribute("code", request.getParameter("code"));
-
- String url = "https://graph.facebook.com/oauth/access_token?"
- + "client_id="
- + FacebookProperty
- .getString(FacebookConstants.PROPERTY_API_KEY)
- + "&client_secret="
- + FacebookProperty
- .getString(FacebookConstants.PROPERTY_API_SECRET)
- + "&code="
- + code
- + "&redirect_uri="
- + FacebookProperty
- .getString(FacebookConstants.PROPERTY_CONNECT_URL)
- + "/oauth"
- ;
-
- String accessToken = readUrl(url).split("&")[0].replaceFirst(
- "access_token=", "");
-
- model.addAttribute("accessToken", accessToken);
-
- FacebookClient facebookClient = new DefaultFacebookClient(
- accessToken);
-
- User user = facebookClient.fetchObject("me", User.class);
-
- if (log.isInfoEnabled()) {
- log.info("User name: " + user.getName());
- }
-
- userService.create(user.getId(), user.getName(), user.getLink(),
- accessToken, null);
-
- request.getSession().setAttribute(FacebookConstants.SESSION_FB_USER,
- user.getId());
-
- model.addAttribute("user", user);
- }
- return view;
- }
-
- private String readUrl(String urlString) throws IOException {
- URL url = new URL(urlString);
- BufferedReader in = new BufferedReader(new InputStreamReader(url
- .openStream()));
-
- String response = "";
- String inputLine;
-
- while ((inputLine = in.readLine()) != null)
- response += inputLine;
-
- in.close();
- return response;
+ return authenticate(model, request, response);
}
}
=======================================
---
/springwebmvc-hibernate/trunk/src/main/java/com/google/code/facebookwebapp/controller/web/GraphApiController.java
Thu May 20 17:26:39 2010
+++
/springwebmvc-hibernate/trunk/src/main/java/com/google/code/facebookwebapp/controller/web/GraphApiController.java
Sat May 22 19:43:15 2010
@@ -1,21 +1,15 @@
package com.google.code.facebookwebapp.controller.web;

-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.net.HttpURLConnection;
-import java.net.MalformedURLException;
-import java.net.URL;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import javax.servlet.http.HttpServletResponse;
+
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

+import com.google.code.facebookwebapp.controller.BaseController;
import com.google.code.facebookwebapp.util.FacebookConstants;
import com.restfb.DefaultFacebookClient;
import com.restfb.FacebookClient;
@@ -26,9 +20,7 @@
* @since 0.4
*/
@Controller("webGraphApiController")
-public class GraphApiController {
-
- private static Log log = LogFactory.getLog(GraphApiController.class);
+public class GraphApiController extends BaseController {

@SuppressWarnings("unchecked")
@RequestMapping("/graph-api")
@@ -37,14 +29,14 @@
model.addAttribute("selectedNav", "graphApi");

String facebookUserId = (String) request.getSession().getAttribute(
- FacebookConstants.SESSION_FB_USER);
+ FacebookConstants.SESSION_FB_USER_ID);
if (facebookUserId == null
&& request.getSession().getAttribute("fb_cookie") != null) {
Map<String, String> facebookCookie = (Map<String, String>) request
.getSession().getAttribute("fb_cookie");
facebookUserId = facebookCookie.get("uid");
request.getSession().setAttribute(
- FacebookConstants.SESSION_FB_USER, facebookUserId);
+ FacebookConstants.SESSION_FB_USER_ID, facebookUserId);
}

model.addAttribute("facebookUserId", facebookUserId);
@@ -54,95 +46,40 @@

@SuppressWarnings("unchecked")
@RequestMapping("/graph-api/me")
- public String me(Model model, HttpServletRequest request) throws
Exception {
- model.addAttribute("selectedNav", "graphApiMe");
+ public String me(Model model, HttpServletRequest request,
+ HttpServletResponse response) throws Exception {
Map<String, String> facebookCookie = (Map<String, String>) request
.getSession().getAttribute("fb_cookie");
- String accessToken = facebookCookie.get("access_token");
+
+ String accessToken = null;
+
+ if (request.getParameter("code") != null) {
+ accessToken = getAccessToken(model, request, response);
+ } else if (facebookCookie == null
+ || facebookCookie.get("access_token") == null) {
+ return authenticate(model, request, response);
+ } else {
+ accessToken = facebookCookie.get("access_token");
+ }

String url = "https://graph.facebook.com/me?access_token="
+ accessToken;
- String response = read(url);
-
- FacebookClient facebookClient = new DefaultFacebookClient(accessToken);
- User user = facebookClient.fetchObject("me", User.class);
-
- model.addAttribute("response", response);
+ String urlResponse = readUrl(url);
+
+ User user = null;
+ if (request.getSession().getAttribute(FacebookConstants.SESSION_FB_USER)
== null) {
+ FacebookClient facebookClient = new DefaultFacebookClient(
+ accessToken);
+ user = facebookClient.fetchObject("me", User.class);
+ } else {
+ user = (User)
request.getSession().getAttribute(FacebookConstants.SESSION_FB_USER);
+ }
+
+ model.addAttribute("response", urlResponse);
model.addAttribute("url", url);
model.addAttribute("user", user);

+ model.addAttribute("selectedNav", "graphApiMe");
return "web.graph-api.me";
}
-
- public String read(String inUrl) {
- String userAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US;
rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3";
- String referer
= "http://www.consultek.us/facebook-webapp-dev/graph-api/me";
- if (log.isDebugEnabled()) {
- log.debug("IN: Browser.read()");
- }
-
- if (null == inUrl) {
- if (log.isDebugEnabled()) {
- log.debug("inUrl refers to null");
- }
- return null;
- }
-
- URL url = null;
- HttpURLConnection conn = null;
- BufferedReader in = null;
- StringBuilder result = null;
-
- try {
- url = new URL(inUrl);
- conn = (HttpURLConnection) url.openConnection();
-
- if ((null != userAgent) && (userAgent.length() > 0)) {
- conn.setRequestProperty("User-Agent", userAgent);
- }
-
- referer = conn.getURL().getProtocol() + "://"
- + conn.getURL().getHost();
- if (null != conn.getURL().getHost()) {
- conn.setRequestProperty("Referer", referer);
- }
-
- conn.connect();
-
- in = new BufferedReader(
- new InputStreamReader(conn.getInputStream()));
-
- String inputLine = null;
- result = new StringBuilder();
-
- while ((null != (inputLine = in.readLine()))) {
- result.append(inputLine);
- }
- } catch (MalformedURLException mue) {
- log.error("Error creating URL", mue);
- } catch (IOException ioe) {
- log.error("Input/Output error", ioe);
- } finally {
- if (null != in) {
- try {
- in.close();
- } catch (IOException ioe) {
- log.error("Input/Output error", ioe);
- }
- }
-
- if (null != conn) {
- conn.disconnect();
- }
-
- if (log.isTraceEnabled()) {
- log.trace("Result: " + result.toString());
- }
- if (log.isDebugEnabled()) {
- log.debug("OUT: Browser.read()");
- }
- }
-
- return result.toString();
- }
-}
+}
=======================================
---
/springwebmvc-hibernate/trunk/src/main/java/com/google/code/facebookwebapp/util/FacebookConstants.java
Thu May 20 17:26:39 2010
+++
/springwebmvc-hibernate/trunk/src/main/java/com/google/code/facebookwebapp/util/FacebookConstants.java
Sat May 22 19:43:15 2010
@@ -154,5 +154,6 @@
/**
* SESSION CONSTANTS
*/
+ public static final String SESSION_FB_USER_ID = "fb_user_id";
public static final String SESSION_FB_USER = "fb_user";
}

--
You received this message because you are subscribed to the Google Groups "Facebook Webapp SVN" group.
To post to this group, send email to facebook-...@googlegroups.com.
To unsubscribe from this group, send email to facebook-webapp...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/facebook-webapp-svn?hl=en.

Reply all
Reply to author
Forward
0 new messages