From 78a3fb96b9cf734ed6a3ca8172435c8679ea6eca Mon Sep 17 00:00:00 2001 From: Jonathan Cobb Date: Fri, 31 Jan 2020 21:45:13 -0500 Subject: [PATCH] block page elements --- .../java/bubble/rule/bblock/BubbleBlock.java | 14 ++- .../bubble/rule/bblock/BubbleBlock.js.hbs | 106 ++++++++++++++++++ utils/abp-parser | 2 +- 3 files changed, 115 insertions(+), 7 deletions(-) diff --git a/bubble-server/src/main/java/bubble/rule/bblock/BubbleBlock.java b/bubble-server/src/main/java/bubble/rule/bblock/BubbleBlock.java index 4f1a06b5..008e2a3a 100644 --- a/bubble-server/src/main/java/bubble/rule/bblock/BubbleBlock.java +++ b/bubble-server/src/main/java/bubble/rule/bblock/BubbleBlock.java @@ -132,7 +132,6 @@ public class BubbleBlock extends TrafficAnalytics { // Now that we know the content type, re-check the BlockList final BlockDecision decision = blockList.getDecision(request.getFqdn(), request.getUri(), contentType); - final List filters; switch (decision.getDecisionType()) { case block: log.warn("doFilterRequest: preprocessed request was filtered, but ultimate decision was block, returning EMPTY_STREAM"); @@ -146,7 +145,6 @@ public class BubbleBlock extends TrafficAnalytics { log.warn("doFilterRequest: preprocessed request was filtered, but ultimate decision was filtered, but no filters provided, returning as-is"); return in; } - filters = decision.getSpecs(); break; default: // should never happen @@ -159,8 +157,7 @@ public class BubbleBlock extends TrafficAnalytics { return in; } - final String selectorsJson = json(decision.getSelectors(), COMPACT_MAPPER); - final String replacement = ""; + final String replacement = ""; final RegexReplacementFilter filter = new RegexReplacementFilter("", replacement); final RegexFilterReader reader = new RegexFilterReader(new InputStreamReader(in), filter).setMaxMatches(1); return new ReaderInputStream(reader, UTF8cs); @@ -169,14 +166,19 @@ public class BubbleBlock extends TrafficAnalytics { public static final Class BB = BubbleBlock.class; public static final String BUBBLE_JS_TEMPLATE = stream2string(getPackagePath(BB)+"/"+ BB.getSimpleName()+".js.hbs"); private static final String CTX_BUBBLE_SELECTORS = "BUBBLE_SELECTORS_JSON"; + private static final String CTX_BUBBLE_BLACKLIST = "BUBBLE_BLACKLIST_JSON"; + private static final String CTX_BUBBLE_WHITELIST = "BUBBLE_WHITELIST_JSON"; + + private String getBubbleJs(String requestId, BlockDecision decision) { - private String getBubbleJs(String requestId, String blockSpecJson) { final Map ctx = new HashMap<>(); ctx.put(CTX_JS_PREFIX, "__bubble_block_"+sha256_hex(requestId)+"_"); ctx.put(CTX_BUBBLE_REQUEST_ID, requestId); ctx.put(CTX_BUBBLE_HOME, configuration.getPublicUriBase()); ctx.put(CTX_BUBBLE_DATA_ID, getDataId(requestId)); - ctx.put(CTX_BUBBLE_SELECTORS, blockSpecJson); + ctx.put(CTX_BUBBLE_SELECTORS, json(decision.getSelectors(), COMPACT_MAPPER)); + ctx.put(CTX_BUBBLE_WHITELIST, json(blockList.getWhitelistDomains(), COMPACT_MAPPER)); + ctx.put(CTX_BUBBLE_BLACKLIST, json(blockList.getBlacklistDomains(), COMPACT_MAPPER)); return HandlebarsUtil.apply(getHandlebars(), BUBBLE_JS_TEMPLATE, ctx); } diff --git a/bubble-server/src/main/resources/bubble/rule/bblock/BubbleBlock.js.hbs b/bubble-server/src/main/resources/bubble/rule/bblock/BubbleBlock.js.hbs index d99ff965..7d0c641d 100644 --- a/bubble-server/src/main/resources/bubble/rule/bblock/BubbleBlock.js.hbs +++ b/bubble-server/src/main/resources/bubble/rule/bblock/BubbleBlock.js.hbs @@ -3,8 +3,96 @@ const {{JS_PREFIX}}_request_id = '{{BUBBLE_REQUEST_ID}}'; const {{JS_PREFIX}}_interval = 50; const {{JS_PREFIX}}_idle_interval = 1000; +const {{JS_PREFIX}}_blacklist = {{{BUBBLE_BLACKLIST_JSON}}}; +const {{JS_PREFIX}}_whitelist = {{{BUBBLE_WHITELIST_JSON}}}; + const {{JS_PREFIX}}_filters = {{{BUBBLE_SELECTORS_JSON}}}; +function {{JS_PREFIX}}_check_entry_exclusions_and_types(entry, url, type) { + if (typeof entry.domainExclusions !== 'undefined' && entry.domainExclusions !== null) { + for (let i=0; i