Browse Source

HUE-1440 [hbase] Escape search terms

Kevin Wang 12 năm trước cách đây
mục cha
commit
be864cfef6
2 tập tin đã thay đổi với 14 bổ sung4 xóa
  1. 6 4
      apps/hbase/static/js/controls.js
  2. 8 0
      apps/hbase/static/js/utils.js

+ 6 - 4
apps/hbase/static/js/controls.js

@@ -19,9 +19,9 @@ var searchRenderers = {
      select: /[^\,\{\[]+(([\{\[][^\}\]]+[\}\]])+|)([^\,]+|)/g, //select the substring to process, useful as JS has no lookbehinds old: ([^,]+\[([^,]+(,|)+)+\]|[^,]+)
      tag: /.+/g, //select the matches to wrap with tags
      nested: {
-        'scan': { select: /\+[0-9 ]+/g, tag: /.+/g},
+        'scan': { select: /(([^\\]|\b)\+[0-9]+)/g, tag: /\+[0-9]+/g},
         'columns': { select: /\[.+\]/g, tag: /[^:,\[\]]+:([^,\[\]]+|)/g}, //forced to do this select due to lack of lookbehinds /[\[\]]/g
-        'prefix': { select: /[^\*]+\*/g, tag: /\*/g},
+        'prefix': { select: /[^\*\\]+\*/g, tag: /\*/g},
         'filter': {
           select: /\{[^\{\}]+\}/,
           tag:/[^\{\}]+/g,
@@ -177,13 +177,15 @@ var SmartViewModel = function(options) {
     if(inputs) {
       for(var i=0; i<inputs.length; i++) {
         if(inputs[i].trim() != "" && inputs[i].trim() != ',') {
-          var p = inputs[i].split('+');
+          var p = pullFromRenderer(inputs[i], searchRenderers['rowkey']['nested']['scan']);
+          inputs[i] = inputs[i].replace(p, '');
+          p = p.split('+');
           var scan = p.length > 1 ? parseInt(p[1].trim()) : 0;
           var extract = inputs[i].match(searchRenderers['rowkey']['nested']['columns']['select']);
           var columns = extract != null ? extract[0].match(searchRenderers['rowkey']['nested']['columns']['tag']) : [];
           var filter = inputs[i].match(searchRenderers['rowkey']['nested']['filter']['select']);
           self.querySet.push(new QuerySetPiece({
-            'row_key': p[0].replace(/[\[\{].+[\]\}]|\*/g,'').trim(), //clean up with column regex selectors instead
+            'row_key': inputs[i].replace(/\\(\+|\*|\,)/g, '$1').replace(/[\[\{].+[\]\}]|\*/g,'').trim(), //clean up with column regex selectors instead
             'scan_length': scan ? scan + 1 : 1,
             'columns': columns,
             'prefix': inputs[i].match(searchRenderers['rowkey']['nested']['prefix']['select']) != null,

+ 8 - 0
apps/hbase/static/js/utils.js

@@ -265,6 +265,14 @@ function setCursor(node, pos, trimWhitespaceNodes){
   } catch (err) { }
 }
 
+function pullFromRenderer(str, renderer) {
+  try {
+    return str.match(searchRenderers.rowkey.nested.scan.select)[0].match(searchRenderers.rowkey.nested.scan.tag)[0];
+  } catch (e){
+    return "";
+  }
+}
+
 window.selectIndex = null;
 var fallback = typeof window.getSelection === "undefined";
 ko.bindingHandlers.editableText = {