001
014
015 package com.liferay.portal.servlet;
016
017 import com.liferay.portal.NoSuchLayoutException;
018 import com.liferay.portal.kernel.log.Log;
019 import com.liferay.portal.kernel.log.LogFactoryUtil;
020 import com.liferay.portal.kernel.servlet.StringServletResponse;
021 import com.liferay.portal.kernel.util.StringPool;
022 import com.liferay.portal.kernel.util.StringUtil;
023 import com.liferay.portal.servlet.filters.gzip.GZipFilter;
024 import com.liferay.portal.util.PortalUtil;
025 import com.liferay.portal.util.WebKeys;
026 import com.liferay.portlet.social.util.FacebookUtil;
027 import com.liferay.util.servlet.ServletResponseUtil;
028
029 import java.io.IOException;
030
031 import javax.servlet.RequestDispatcher;
032 import javax.servlet.ServletContext;
033 import javax.servlet.ServletException;
034 import javax.servlet.http.HttpServlet;
035 import javax.servlet.http.HttpServletRequest;
036 import javax.servlet.http.HttpServletResponse;
037
038
041 public class FacebookServlet extends HttpServlet {
042
043 public void service(
044 HttpServletRequest request, HttpServletResponse response)
045 throws IOException, ServletException {
046
047 try {
048 String[] facebookData = FacebookUtil.getFacebookData(request);
049
050 if (facebookData == null) {
051 PortalUtil.sendError(
052 HttpServletResponse.SC_NOT_FOUND,
053 new NoSuchLayoutException(), request, response);
054 }
055 else {
056 String facebookCanvasPageURL = facebookData[0];
057 String redirect = facebookData[1];
058
059 request.setAttribute(
060 WebKeys.FACEBOOK_CANVAS_PAGE_URL, facebookCanvasPageURL);
061 request.setAttribute(GZipFilter.SKIP_FILTER, Boolean.TRUE);
062
063 ServletContext servletContext = getServletContext();
064
065 RequestDispatcher requestDispatcher =
066 servletContext.getRequestDispatcher(redirect);
067
068 StringServletResponse stringResponse =
069 new StringServletResponse(response);
070
071 requestDispatcher.forward(request, stringResponse);
072
073 String fbml = stringResponse.getString();
074
075 fbml = fixFbml(fbml);
076
077 ServletResponseUtil.write(response, fbml);
078 }
079 }
080 catch (Exception e) {
081 _log.error(e, e);
082
083 PortalUtil.sendError(
084 HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e, request,
085 response);
086 }
087 }
088
089 protected String fixFbml(String fbml) {
090 fbml = StringUtil.replace(
091 fbml,
092 new String[] {
093 "<nobr>",
094 "</nobr>"
095 },
096 new String[] {
097 StringPool.BLANK,
098 StringPool.BLANK
099 });
100
101 return fbml;
102 }
103
104 private static Log _log = LogFactoryUtil.getLog(FacebookServlet.class);
105
106 }