001
014
015 package com.liferay.portal.facebook;
016
017 import com.liferay.portal.kernel.exception.NoSuchLayoutException;
018 import com.liferay.portal.kernel.log.Log;
019 import com.liferay.portal.kernel.log.LogFactoryUtil;
020 import com.liferay.portal.kernel.servlet.BufferCacheServletResponse;
021 import com.liferay.portal.kernel.servlet.ServletResponseUtil;
022 import com.liferay.portal.kernel.util.PortalUtil;
023 import com.liferay.portal.kernel.util.StringUtil;
024 import com.liferay.portal.kernel.util.WebKeys;
025 import com.liferay.portal.servlet.filters.gzip.GZipFilter;
026 import com.liferay.portlet.social.util.FacebookUtil;
027
028 import java.io.IOException;
029
030 import javax.servlet.RequestDispatcher;
031 import javax.servlet.ServletContext;
032 import javax.servlet.ServletException;
033 import javax.servlet.http.HttpServlet;
034 import javax.servlet.http.HttpServletRequest;
035 import javax.servlet.http.HttpServletResponse;
036
037
040 public class FacebookServlet extends HttpServlet {
041
042 @Override
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.isValidResourceId(facebookData[1])) {
052
053 PortalUtil.sendError(
054 HttpServletResponse.SC_NOT_FOUND,
055 new NoSuchLayoutException(), request, response);
056 }
057 else {
058 String facebookCanvasPageURL = facebookData[0];
059 String redirect = facebookData[1];
060
061 request.setAttribute(
062 WebKeys.FACEBOOK_CANVAS_PAGE_URL, facebookCanvasPageURL);
063 request.setAttribute(GZipFilter.SKIP_FILTER, Boolean.TRUE);
064
065 ServletContext servletContext = getServletContext();
066
067 RequestDispatcher requestDispatcher =
068 servletContext.getRequestDispatcher(redirect);
069
070 BufferCacheServletResponse bufferCacheServletResponse =
071 new BufferCacheServletResponse(response);
072
073 requestDispatcher.forward(request, bufferCacheServletResponse);
074
075 String fbml = bufferCacheServletResponse.getString();
076
077 fbml = fixFbml(fbml);
078
079 ServletResponseUtil.write(response, fbml);
080 }
081 }
082 catch (Exception e) {
083 _log.error(e, e);
084
085 PortalUtil.sendError(
086 HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e, request,
087 response);
088 }
089 }
090
091 protected String fixFbml(String fbml) {
092 return StringUtil.removeSubstrings(fbml, "<nobr>", "</nobr>");
093 }
094
095 private static final Log _log = LogFactoryUtil.getLog(
096 FacebookServlet.class);
097
098 }