Author: szimano Date: 2005-08-25 17:12:14 -0400 (Thu, 25 Aug 2005) New Revision: 966 Modified: trunk/forge/portal-extensions/forge-wiki/src/etc/org/jboss/wiki/WikiTypes.xml trunk/forge/portal-extensions/forge-wiki/src/etc/org/jboss/wiki/wikiPlugins.properties.sample trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/WikiPortlet.java trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/fileaccess/WikiFileAccessFilter.java trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/plugins/AttachmentListPlugin.java trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/plugins/SecureLinksPlugin.java Log: secure connections Modified: trunk/forge/portal-extensions/forge-wiki/src/etc/org/jboss/wiki/WikiTypes.xml =================================================================== --- trunk/forge/portal-extensions/forge-wiki/src/etc/org/jboss/wiki/WikiTypes.xml 2005-08-25 19:26:42 UTC (rev 965) +++ trunk/forge/portal-extensions/forge-wiki/src/etc/org/jboss/wiki/WikiTypes.xml 2005-08-25 21:12:14 UTC (rev 966) @@ -36,6 +36,10 @@ <name>Diff</name> <class>org.jboss.wiki.plugins.DiffPlugin</class> </plugin> + <plugin> + <name>secureLinks</name> + <class>org.jboss.wiki.plugins.SecureLinksPlugin</class> + </plugin> </wikiType> <wikiType> <name>FIND</name> @@ -48,5 +52,9 @@ <name>wikiToHtmlTranslator</name> <class>org.jboss.wiki.plugins.HTMLTranslator</class> </plugin> + <plugin> + <name>secureLinks</name> + <class>org.jboss.wiki.plugins.SecureLinksPlugin</class> + </plugin> </wikiType> </wikiTypes> \ No newline at end of file Modified: trunk/forge/portal-extensions/forge-wiki/src/etc/org/jboss/wiki/wikiPlugins.properties.sample =================================================================== --- trunk/forge/portal-extensions/forge-wiki/src/etc/org/jboss/wiki/wikiPlugins.properties.sample 2005-08-25 19:26:42 UTC (rev 965) +++ trunk/forge/portal-extensions/forge-wiki/src/etc/org/jboss/wiki/wikiPlugins.properties.sample 2005-08-25 21:12:14 UTC (rev 966) @@ -2,7 +2,23 @@ #specifies base URL for the portal htmlTranslatorURL = http://forge.sicore.org:8080/ #htmlTranslatorURL = http://localhost:8080/ + #extensions for images to be inlined, coma-separated imagePatterns = .png , .jpeg , .gif , .bmp + #wikiHome part of url. Leave it you use default portlet conifguration wikiHome = index.html?ctrl:id=window.default.WikiPortletWindow&ctrl:type=action + +#Replaces for secure connection (of urls): + +#all are coma separated + +#sslReplaces - replace all the links SecureLinksPlugin. +#First one is regex for finding a region to replace in +#then are pairs of: regex(what replace), String(replacement) +#Be carefull with white charachters as they count also (same with sslRedirectReplaces) +sslReplaces=<a href=\"http.+:8080.+>.+</a>,http,https,:8080,:8443 + +#sslRedirectReplaces used by redirector +#pairs of: regex(what replace), String(replacement) +sslRedirectReplaces=http,https,:8080,:8443 \ No newline at end of file Modified: trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/WikiPortlet.java =================================================================== --- trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/WikiPortlet.java 2005-08-25 19:26:42 UTC (rev 965) +++ trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/WikiPortlet.java 2005-08-25 21:12:14 UTC (rev 966) @@ -73,8 +73,8 @@ // write the uploaded file to a new location String fieldName = item.getFieldName(); String fileName = item.getName(); - //String contentType = item.getContentType(); - //long size = item.getSize(); + // String contentType = item.getContentType(); + // long size = item.getSize(); /* * rResp .setRenderParameter("size", * Long.toString(size)); @@ -116,17 +116,18 @@ rResp.setRenderParameter("page", rReq.getParameter("page")); } - + if (rReq.getParameter("searchQuery") != null) { - //TODO do it man ! - Set<String> pages = wikiEngine.findPages(rReq.getParameter("searchQuery")); + // TODO do it man ! + Set<String> pages = wikiEngine.findPages(rReq + .getParameter("searchQuery")); rReq.getPortletSession().setAttribute("findResult", pages); - + // show the results rResp.setRenderParameter("page", "FindResult"); } - + if (rReq.getParameter("action") != null) { rResp.setRenderParameter("action", rReq.getParameter("action")); } @@ -196,8 +197,9 @@ public void doView(JBossRenderRequest rReq, JBossRenderResponse rRes) throws PortletException, java.io.IOException { - rReq.getPortletSession().setAttribute("isSecure", new Boolean(rReq.isSecure())); - + rReq.getPortletSession().setAttribute("isSecure", + new Boolean(rReq.isSecure())); + WikiPage noSuchPage = new WikiPage("", new Credentials(""), "There is no such page. Click on EDIT to start it.", 0, 0, null, wikiEngine.getMediaDataSource()); @@ -218,7 +220,7 @@ && (rReq.getParameter("action").equals("Attach"))) { rReq.setAttribute("fileAttach", "true"); } - + if ((rReq.getParameter("action") != null) && (rReq.getParameter("action").equals("Edit")) && (rReq.getUser() != null)) { @@ -228,15 +230,15 @@ if (rReq.getParameter("version") != null) { // show previous version of page - + System.out.println("Getting page " + wikiPage + " at version " + rReq.getParameter("version")); pageToShow = wikiEngine.getByName(wikiPage, null, Integer .valueOf(rReq.getParameter("version"))); - + if (pageToShow.getLastVersion() != pageToShow.getVersion()) { rReq.setAttribute("showedVersion", Integer.valueOf(rReq - .getParameter("version"))); + .getParameter("version"))); } } else { pageToShow = wikiEngine.getByName(wikiPage, null); @@ -305,10 +307,10 @@ + rReq.getParameter("version")); pageToShow = wikiEngine.getByName(wikiPage, wikiContext, Integer.valueOf(rReq.getParameter("version"))); - + if (pageToShow.getLastVersion() != pageToShow.getVersion()) { rReq.setAttribute("showedVersion", Integer.valueOf(rReq - .getParameter("version"))); + .getParameter("version"))); } } else { pageToShow = wikiEngine.getByName(wikiPage, wikiContext); @@ -330,7 +332,7 @@ PortletURL wikiURL = rRes.createActionURL(); rReq.setAttribute("actionURL", wikiURL.toString()); - + rReq .setAttribute( "wikiName", @@ -346,22 +348,26 @@ rReq.setAttribute("logedIn", (rReq.getUser() != null) ? "true" : "false"); - + rReq.setAttribute("defaultPage", defaultPage); // FIXME make this more elegant (ie. plugin) // pass friendly link Properties props = new Properties(); - props.load(WikiPlugin.class.getResourceAsStream("wikiPlugins.properties")); - String href = props.getProperty("htmlTranslatorURL")+"wiki/"+pageToShow.getName(); - - if (rReq.isSecure()) { - //change http to https - href = href.replaceFirst("http", "https"); + props.load(WikiPlugin.class + .getResourceAsStream("wikiPlugins.properties")); + String href = props.getProperty("htmlTranslatorURL") + "wiki/" + + pageToShow.getName(); + String[] replaces = props.getProperty("sslRedirectReplaces").split(","); + + if (rReq.isSecure() && (replaces.length % 2 == 0)) { + // chage normal url to secure + for (int i = 0; i < replaces.length; i += 2) + href = href.replaceAll(replaces[i], replaces[i + 1]); } - + rReq.setAttribute("friendlyLink", href); - + rRes.setTitle("Wiki"); if (javax.portlet.WindowState.NORMAL.equals(rReq.getWindowState()) || javax.portlet.WindowState.MAXIMIZED.equals(rReq Modified: trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/fileaccess/WikiFileAccessFilter.java =================================================================== --- trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/fileaccess/WikiFileAccessFilter.java 2005-08-25 19:26:42 UTC (rev 965) +++ trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/fileaccess/WikiFileAccessFilter.java 2005-08-25 21:12:14 UTC (rev 966) @@ -47,6 +47,8 @@ private String attachementsPath; private String host; + + private String[] replaces; /* * private ForgeHelper forgeHelper; private ContentManager contentManager; @@ -77,6 +79,9 @@ host = props.getProperty("htmlTranslatorURL") + "portal/" + props.getProperty("wikiHome"); + // get ssl replaces + replaces = props.getProperty("sslRedirectReplaces").split(","); + } catch (IOException e) { System.err.println(e); } @@ -100,11 +105,19 @@ System.out.println("length " + tokens.length); if (tokens.length == 3) { - // show page - System.out.println("redirecting: " + host + "&page=" + String newHost = host; + + if ((request.isSecure())&&(replaces.length % 2 == 0)) { + for (int i = 0; i < replaces.length; i+= 2) + newHost = newHost.replaceAll( + replaces[i], replaces[i+1]); + } + + // show page (redirect) + System.out.println("redirecting: " + newHost + "&page=" + tokens[tokens.length - 1]); - httpResponse.sendRedirect(host + "&page=" + httpResponse.sendRedirect(newHost + "&page=" + tokens[tokens.length - 1]); } else { // get fileName of attachement and page which is connected to @@ -124,7 +137,7 @@ System.err.println(e); } - // looking for the newst version + // looking for the newest version int version = 1; while (props.getProperty((version + 1) + ".author") != null) { Modified: trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/plugins/AttachmentListPlugin.java =================================================================== --- trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/plugins/AttachmentListPlugin.java 2005-08-25 19:26:42 UTC (rev 965) +++ trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/plugins/AttachmentListPlugin.java 2005-08-25 21:12:14 UTC (rev 966) @@ -38,7 +38,7 @@ for (String s : attachements) { String href = host+newPage.getName() + "/" + s; - newContent += "<a href='"+href+"'>"+href + "</a><br>\n"; + newContent += "<a href=\""+href+"\">"+href + "</a><br>\n"; } newPage.setPageContent(newContent); Modified: trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/plugins/SecureLinksPlugin.java =================================================================== --- trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/plugins/SecureLinksPlugin.java 2005-08-25 19:26:42 UTC (rev 965) +++ trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/plugins/SecureLinksPlugin.java 2005-08-25 21:12:14 UTC (rev 966) @@ -1,11 +1,17 @@ package org.jboss.wiki.plugins; +import java.util.Vector; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + import org.jboss.wiki.WikiPage; import org.jboss.wiki.WikiPlugin; import org.jboss.wiki.WikiSession; public class SecureLinksPlugin extends WikiPlugin { + private String[] replaces; + @Override public WikiPage process(WikiPage wikiPage, WikiSession wikiSession) { WikiPage newPage = null; @@ -16,17 +22,46 @@ System.err.println(cl); } - if (((Boolean)wikiSession.getAttribute("isSecure")) == true) { - newPage.setPageContent(newPage.getPageContent().replaceAll( - "<a href=\"http", "<a href=\"https")); + if ((replaces.length % 2 == 1) + && (((Boolean) wikiSession.getAttribute("isSecure")))) { + + String pageContent = newPage.getPageContent(); + Vector<String> matches = new Vector<String>(); + + // find the area + Matcher matcher = Pattern.compile(replaces[0]).matcher(pageContent); + + while (matcher.find()) { + // change parts of it + String hrefToChange = pageContent.substring(matcher.start(), + matcher.end()); + + for (int i = 1; i < replaces.length; i += 2) + hrefToChange = hrefToChange.replaceAll(replaces[i], replaces[i + 1]); + + matches.add(hrefToChange); + } + + // replace them in pageContent + for (int i = 0; i < matches.size(); i++) { + pageContent = pageContent.replaceFirst(replaces[0], matches + .get(i)); + } + + // finnaly set new content + newPage.setPageContent(pageContent); + + } else { + System.err + .println("sslReplaces property is not valid. Number of props must be odd (first one is region to change) !"); } return newPage; } @Override public void init() { - // TODO Auto-generated method stub - + // get the replacemen pairs + replaces = getProperty("sslReplaces").split(","); } } |