From: <jbo...@li...> - 2005-11-09 16:08:23
|
Author: szimano Date: 2005-11-09 11:08:14 -0500 (Wed, 09 Nov 2005) New Revision: 1542 Added: trunk/forge/portal-extensions/forge-freezone/src/java/org/jboss/forge/projects/freezone/ForgeConfWatcher.java Modified: trunk/forge/portal-extensions/forge-freezone/src/java/org/jboss/forge/projects/freezone/Freezone.java Log: configuration file works. Still need NodeWatcher to reparse it when it changes. http://jira.jboss.com/jira/browse/JBLAB-396 Added: trunk/forge/portal-extensions/forge-freezone/src/java/org/jboss/forge/projects/freezone/ForgeConfWatcher.java =================================================================== --- trunk/forge/portal-extensions/forge-freezone/src/java/org/jboss/forge/projects/freezone/ForgeConfWatcher.java 2005-11-09 15:59:09 UTC (rev 1541) +++ trunk/forge/portal-extensions/forge-freezone/src/java/org/jboss/forge/projects/freezone/ForgeConfWatcher.java 2005-11-09 16:08:14 UTC (rev 1542) @@ -0,0 +1,17 @@ +package org.jboss.forge.projects.freezone; + +import org.jboss.forge.common.service.NodeWatcher; + +public class ForgeConfWatcher implements NodeWatcher { + + public Object init(String arg0) { + // TODO Auto-generated method stub + return null; + } + + public Object nodeUpdate(String arg0, Object arg1) { + // TODO Auto-generated method stub + return null; + } + +} Modified: trunk/forge/portal-extensions/forge-freezone/src/java/org/jboss/forge/projects/freezone/Freezone.java =================================================================== --- trunk/forge/portal-extensions/forge-freezone/src/java/org/jboss/forge/projects/freezone/Freezone.java 2005-11-09 15:59:09 UTC (rev 1541) +++ trunk/forge/portal-extensions/forge-freezone/src/java/org/jboss/forge/projects/freezone/Freezone.java 2005-11-09 16:08:14 UTC (rev 1542) @@ -22,14 +22,19 @@ package org.jboss.forge.projects.freezone; import java.io.IOException; +import java.util.ArrayList; +import java.util.List; import javax.portlet.PortletException; import javax.portlet.PortletSecurityException; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; import org.jboss.forge.common.ForgeHelper; import org.jboss.forge.common.portlet.JBossLabsPortlet; import org.jboss.forge.common.projects.ProjectsHelper; import org.jboss.forge.common.projects.permissions.ActionRequestPermissionsChecker; +import org.jboss.logging.Logger; import org.jboss.portal.core.CoreConstants; import org.jboss.portlet.JBossActionRequest; import org.jboss.portlet.JBossActionResponse; @@ -39,12 +44,17 @@ import org.jboss.shotoku.Node; import org.jboss.shotoku.aop.Inject; import org.jboss.shotoku.aop.NodeInject; +import org.jboss.shotoku.exceptions.RepositoryException; import org.jboss.shotoku.exceptions.ResourceDoesNotExist; +import org.w3c.dom.Document; +import org.w3c.dom.NodeList; +import org.xml.sax.SAXException; /** * A portlet for a project freezone. * * @author adamw + * @author Tomasz Szymanski */ public class Freezone extends JBossLabsPortlet { /** @@ -52,31 +62,38 @@ * page is selected. */ private final static String DEFAULT_PAGE = "index.html"; - + private final static String DEFAULT_DIR = "default"; - + private final static String PATH_PARAM = "path"; + private final static String TAG_NAME = "page"; + + private Logger log = Logger.getLogger(this.getClass()); + @Inject private ContentManager cm; - @NodeInject ("/default/freezone/forcelogin.xml") + @NodeInject("/default/freezone/forcelogin.xml") private Node configuration; - - private void sendResponseNotFound(JBossRenderResponse response) throws IOException { + + private List<String> loggedInOnly; + + private void sendResponseNotFound(JBossRenderResponse response) + throws IOException { response.setContentType("text/html"); response.getWriter().println("404 - Not found."); } - - public void labsDoView(JBossRenderRequest request, JBossRenderResponse response) - throws IOException { + + public void labsDoView(JBossRenderRequest request, + JBossRenderResponse response) throws IOException { String requestedPath = request.getParameter(PATH_PARAM); - + if (requestedPath == null) { sendResponseNotFound(response); return; } - + Node requestedNode; try { requestedNode = cm.getNode(requestedPath); @@ -84,49 +101,50 @@ sendResponseNotFound(response); return; } - + response.setContentType("text/html"); response.getWriter().write(requestedNode.getContent()); } - + private final static String[][] PROJECT_REDIRECTS = { - { "downloads", "downloads" }, - { "news", "blog" }, - { "blog", "blog" }, - { "", "" } - }; + { "downloads", "downloads" }, { "news", "blog" }, + { "blog", "blog" }, { "", "" } }; @Override - protected void processAction(JBossActionRequest request, JBossActionResponse response) - throws PortletException, PortletSecurityException, IOException { + protected void processAction(JBossActionRequest request, + JBossActionResponse response) throws PortletException, + PortletSecurityException, IOException { String portalName = ForgeHelper.getPortalName(request); - + // Getting the requested path. - String reqPath = request.getParameter(CoreConstants.REQ_ACTION_PARAM_PATH); - + String reqPath = request + .getParameter(CoreConstants.REQ_ACTION_PARAM_PATH); + // For "root" requests, redirecting to a default page. if ((reqPath == null) || ("".equals(reqPath)) || ("/".equals(reqPath))) { - response.sendRedirect(ForgeHelper.createPageLink(ForgeHelper.LABS_PORTAL, "default")); + response.sendRedirect(ForgeHelper.createPageLink( + ForgeHelper.LABS_PORTAL, "default")); return; } - + // Invalid path - nothing to display. if (reqPath.contains("..")) return; - + // Ignoring any possible parameters. int qmIndex = reqPath.indexOf('?'); if (qmIndex != -1) reqPath = reqPath.substring(0, qmIndex); - + // Checking if the first part of the path is a project name. - String[] tokens = reqPath.split("[/]"); + String[] tokens = reqPath.split("[/]"); boolean isProjectLink = false; if (tokens.length > 1) - isProjectLink = - ProjectsHelper.getProjects(portalName).projectExists( - new ActionRequestPermissionsChecker(request), tokens[1]); - + isProjectLink = ProjectsHelper.getProjects(portalName) + .projectExists( + new ActionRequestPermissionsChecker(request), + tokens[1]); + // Checking for special links, making possible redirects. if (isProjectLink) { String projectId = tokens[1]; @@ -134,48 +152,46 @@ for (String[] projectRedirect : PROJECT_REDIRECTS) { if (projectRedirect[0].equals(requestedPage)) { String url; - + if ("".equals(projectRedirect[1])) { url = ProjectsHelper.getProjects( ForgeHelper.LABS_PORTAL).getProjectLink( - projectId); + projectId); } else { url = ProjectsHelper.createPageLink( - ForgeHelper.LABS_PORTAL, projectId, - projectRedirect[1]); + ForgeHelper.LABS_PORTAL, projectId, + projectRedirect[1]); } - + response.sendRedirect(url); return; } } } - + // If the requested path references a project, getting the page from - // the project's freezone dir. Otherwise, getting the page from the + // the project's freezone dir. Otherwise, getting the page from the // default directory. String cmsPath = portalName + "/" + ProjectsHelper.MEMBERS_DIR + "/"; if (isProjectLink) { String[] limitedTokens = reqPath.split("[/]", 3); - + cmsPath += tokens[1] + "/" + ProjectsHelper.FREEZONE_DIR + "/" - + (limitedTokens.length > 2 ? limitedTokens[2] : ""); + + (limitedTokens.length > 2 ? limitedTokens[2] : ""); } else { cmsPath += DEFAULT_DIR + "/" + ProjectsHelper.FREEZONE_DIR - + reqPath; + + reqPath; } - + // Checking if we don't have to add a default page to the constructed // path. if (!cmsPath.contains(".")) { if (!cmsPath.endsWith("/")) cmsPath += "/"; - + cmsPath += DEFAULT_PAGE; } - System.out.println(cmsPath); - // Getting the node and its content type. If it the same as the // content type of the response, passing it for rendering. Otherwise, // sending bytes. @@ -185,23 +201,52 @@ } catch (ResourceDoesNotExist e) { return; } - - String mimeType = requestedNode.getMimeType(); - if (request.getResponseContentType().equalsIgnoreCase(mimeType)) { - response.setRenderParameter(PATH_PARAM, cmsPath); - } else { - response.sendRedirect("/" + ForgeHelper.FILE_ACCESS_DIR + "/" + cmsPath); - } + + String mimeType = requestedNode.getMimeType(); + if (request.getResponseContentType().equalsIgnoreCase(mimeType)) { + response.setRenderParameter(PATH_PARAM, cmsPath); + } else { + response.sendRedirect("/" + ForgeHelper.FILE_ACCESS_DIR + "/" + + cmsPath); + } } @Override - protected boolean checkPermision(JBossRenderRequest request, JBossRenderResponse response) { - // TODO Auto-generated method stub - return true; + protected boolean isAllowed(JBossRenderRequest request, + JBossRenderResponse response) { + String cmsPath = request.getParameter(PATH_PARAM); + + return (request.getUser() != null) || (!loggedInOnly.contains(cmsPath)); } @Override public void init() throws PortletException { - //TODO read configuration file + // TODO read configuration file + + loggedInOnly = new ArrayList<String>(); + + try { + parseConfiguration(); + } catch (Exception e) { + throw new PortletException(e); + } + } + + private void parseConfiguration() throws ParserConfigurationException, + RepositoryException, SAXException, IOException { + + // clear the list first + loggedInOnly.clear(); + + Document doc = DocumentBuilderFactory.newInstance() + .newDocumentBuilder().parse( + configuration.getContentInputStream()); + + NodeList nodeList = doc.getElementsByTagName(TAG_NAME); + + for (int i = 0; i < nodeList.getLength(); i++) { + loggedInOnly.add(nodeList.item(i).getAttributes().getNamedItem("pagePath").getNodeValue()); + } + } } |