config attribute filters via config.propertieis./ LATEST_MERGED_1_1
authorjohn <john>
Thu, 8 Feb 2007 21:42:37 +0000 (21:42 +0000)
committerjohn <john>
Thu, 8 Feb 2007 21:42:37 +0000 (21:42 +0000)
source/default.properties
source/mircoders/localizer/basic/MirBasicProducerAssistantLocalizer.java

index 04b928d..ddb064a 100755 (executable)
@@ -445,6 +445,9 @@ Localizer.OpenSession.email.DoneTemplate =/sent_mail.template
 
 Localizer.HTML.Whitelist=a;img;h1;h2;h3;h4;h5;h6;br;form;input;hr;strong;font;b;i;em;p;table;tr;td;th;ul;ol;li
 
+Localizer.HTML.BadAttributeValuePrefixes=javascript;vbscript;about;wysiwyg;data;view-source;ms-its;mhtml;shell;lynxexec;lynxcgi;hcp;ms-help;help;disk;vnd.ms.radio;opera;res;resource;chrome;mocha;livescript
+
+Localizer.HTML.BadAttributes=onabort;onblur;onchange;onclick;ondblclick;onerror;onfocus;onkeydown;onKeypress;onkeyup;onload;onmousedown;onmousemove;onmouseout;onmouseover;onmouseup;onreset;onselect;onsubmit;onunload;onload;onclick;onfocus;onblur;FSCommand;onAbort;onActivate;onAfterPrint;onAfterUpdate;onBeforeActivate;onBeforeCopy;onBeforeCut;onBeforeDeactivate;onBeforeEditFocus;onBeforePaste;onBeforePrint;onBeforeUnload;onBegin;onBlur;onBounce;onCellChange;onChange;onClick;onContextMenu;onControlSelect;onCopy;onCut;onDataAvailible;onDataSetChanged;onDataSetComplete;onDblClick;onDeactivate;onDrag;onDragEnd;onDragLeave;onDragEnter;onDragOver;onDragDrop;onDrop;onEnd;onError;onErrorUpdate;onExit;onFilterChange;onFinish;onFocus;onFocusIn;onFocusOut;onHelp;onKeyDown;onKeyPress;onKeyUp;onLayoutComplete;onLoad;onLoseCapture;onMediaComplete;onMediaError;onMouseDown;onMouseEnter;onMouseLeave;onMouseMove;onMouseOut;onMouseOver;onMouseUp;onMouseWheel;onMove;onMoveEnd;onMoveStart;onOutOfSync;onPaste;onPause;onProgress;onPropertyChange;onReadyStateChange;onRepeat;onReset;onResize;onResizeEnd;onResizeStart;onResume;onReverse;onRowEnter;onRowExit;onRowDelete;onRowInserted;onScroll;onSeek;onSelect;onSelectionChange;onSelectStart;onStart;onStop;onSynchRestored;onSubmit;onTimeError;onTrackChange;onUnload;onURLFlip;seekSegmentTime;style;height;width
 
 #
 # config used for OpenIndy
index e408c09..c13397b 100755 (executable)
@@ -69,7 +69,8 @@ public class MirBasicProducerAssistantLocalizer implements MirProducerAssistantL
   private RE regularExpressionLT;
   private RE regularExpressionGT;
   private RE regularExpressionWhitespace;
-
+  private RE regularExpressionLeadingSlashes;
+    
 
   public MirBasicProducerAssistantLocalizer() throws MirLocalizerFailure {
     try {
@@ -77,7 +78,8 @@ public class MirBasicProducerAssistantLocalizer implements MirProducerAssistantL
 
       regularExpressionLT = new RE("<");
       regularExpressionGT = new RE(">");
-      regularExpressionWhitespace = new RE("\\s+");
+      regularExpressionWhitespace = new RE("\\s+|&#x0A;|&#x0D;");
+      regularExpressionLeadingSlashes = new RE("^//+");
     }
     catch (Throwable t) {
       throw new MirLocalizerFailure(t);
@@ -295,40 +297,12 @@ public class MirBasicProducerAssistantLocalizer implements MirProducerAssistantL
   }
 
 
-  private String[] badAttributeValuePrefixes = {
-      "javascript", "vbscript", "about", "wysiwyg", "data", "view-source",
-      "ms-its", "mhtml", "shell", "lynxexec", "lynxcgi", "hcp", "ms-help",
-      "help", "disk", "vnd.ms.radio", "opera", "res", "resource", "chrome",
-      "mocha", "livescript"};
-
-
-  private String[] badAttributes = {
-      "onabort", "onblur", "onchange", "onclick", "ondblclick", "onerror",
-      "onfocus", "onkeydown", "onKeypress", "onkeyup", "onload", "onmousedown",
-      "onmousemove", "onmouseout", "onmouseover", "onmouseup", "onreset",
-      "onselect", "onsubmit", "onunload", "onload", "onclick", "onfocus",
-      "onblur", "FSCommand", "onAbort", "onActivate", "onAfterPrint",
-      "onAfterUpdate", "onBeforeActivate", "onBeforeCopy", "onBeforeCut",
-      "onBeforeDeactivate", "onBeforeEditFocus", "onBeforePaste",
-      "onBeforePrint", "onBeforeUnload", "onBegin", "onBlur", "onBounce",
-      "onCellChange", "onChange", "onClick", "onContextMenu", "onControlSelect",
-      "onCopy", "onCut", "onDataAvailible", "onDataSetChanged", "onDataSetComplete",
-      "onDblClick", "onDeactivate", "onDrag", "onDragEnd", "onDragLeave", "onDragEnter",
-      "onDragOver", "onDragDrop", "onDrop", "onEnd", "onError", "onErrorUpdate", "onExit",
-      "onFilterChange", "onFinish", "onFocus", "onFocusIn", "onFocusOut", "onHelp",
-      "onKeyDown", "onKeyPress", "onKeyUp", "onLayoutComplete", "onLoad", "onLoseCapture",
-      "onMediaComplete", "onMediaError", "onMouseDown", "onMouseEnter", "onMouseLeave",
-      "onMouseMove", "onMouseOut", "onMouseOver", "onMouseUp", "onMouseWheel", "onMove",
-      "onMoveEnd", "onMoveStart", "onOutOfSync", "onPaste", "onPause", "onProgress",
-      "onPropertyChange", "onReadyStateChange", "onRepeat", "onReset", "onResize",
-      "onResizeEnd", "onResizeStart", "onResume", "onReverse", "onRowEnter", "onRowExit",
-      "onRowDelete", "onRowInserted", "onScroll", "onSeek", "onSelect", "onSelectionChange",
-      "onSelectStart", "onStart", "onStop", "onSynchRestored", "onSubmit", "onTimeError",
-      "onTrackChange", "onUnload", "onURLFlip", "seekSegmentTime", "style", "height", "width"};
 
   private boolean isBadAttr(String attrName) {
-    for (int i = 0; i < badAttributes.length; i++) {
-      if (badAttributes[i].toLowerCase().equals(attrName.toLowerCase())) {
+    List badAttributes = StringRoutines.splitString(MirGlobal.config().getString("Localizer.HTML.BadAttributes"), ";");
+    Iterator i = badAttributes.iterator();
+    while (i.hasNext()) {
+      if (((String) i.next()).toLowerCase().equals(attrName.toLowerCase())) {
         return true;
       }
     }
@@ -353,8 +327,10 @@ public class MirBasicProducerAssistantLocalizer implements MirProducerAssistantL
   }
 
   private boolean checkAttrValue(String attrValue) {
-    for (int i = 0; i < badAttributeValuePrefixes.length; i++) {
-      if ((stripWhitespace(attrValue.toLowerCase())).startsWith(badAttributeValuePrefixes[i].toLowerCase() + ":")) {
+      List badPrefixes = StringRoutines.splitString(MirGlobal.config().getString("Localizer.HTML.BadAttributeValuePrefixes"), ";");
+      Iterator i = badPrefixes.iterator();
+      while (i.hasNext()) {
+         if ((stripWhitespace(attrValue.toLowerCase())).startsWith(((String) i.next()).toLowerCase() + ":")) {
         return false;
       }
     }
@@ -363,9 +339,9 @@ public class MirBasicProducerAssistantLocalizer implements MirProducerAssistantL
 
 
   private boolean checkNode(String nodeName) {
-    List languages = StringRoutines.splitString(MirGlobal.config().getString("Localizer.HTML.Whitelist"), ";");
+    List acceptableNodes = StringRoutines.splitString(MirGlobal.config().getString("Localizer.HTML.Whitelist"), ";");
 
-    Iterator i = languages.iterator();
+    Iterator i = acceptableNodes.iterator();
     while (i.hasNext()) {
       if (nodeName.equals(i.next())) {
         return true;
@@ -399,6 +375,10 @@ public class MirBasicProducerAssistantLocalizer implements MirProducerAssistantL
           for (int i = 0; i < attrs.getLength(); i++) {
             String attrName = attrs.item(i).getNodeName();
             String attrValue = attrs.item(i).getNodeValue();
+           if (attrValue.startsWith("//")){
+             attrValue=regularExpressionLeadingSlashes.substitute(attrValue, "/");
+           }
+                           
             if (checkAttr(attrName) && checkAttrValue(attrValue)) {
               out.write(' ');
               out.write(attrs.item(i).getNodeName());