From 4901ecea1ab55fc30744b7e7cf6d8eaea1005614 Mon Sep 17 00:00:00 2001 From: Jonathan Cobb Date: Sat, 29 Aug 2020 07:35:44 -0400 Subject: [PATCH] add support for alternate fqdn-based insertions within a rule --- .../bubble/rule/AbstractAppRuleDriver.java | 50 +++++++++++++++---- .../rule/BubbleAlternateRegexReplacement.java | 20 ++++++++ .../bubble/rule/BubbleRegexReplacement.java | 12 +++++ .../bubble/rule/RequestModifierConfig.java | 3 ++ bubble-server/src/main/resources/logback.xml | 1 + .../bubble_block/bubbleApp_bubbleBlock.json | 4 ++ 6 files changed, 80 insertions(+), 10 deletions(-) create mode 100644 bubble-server/src/main/java/bubble/rule/BubbleAlternateRegexReplacement.java diff --git a/bubble-server/src/main/java/bubble/rule/AbstractAppRuleDriver.java b/bubble-server/src/main/java/bubble/rule/AbstractAppRuleDriver.java index 9468fb88..62ac4257 100644 --- a/bubble-server/src/main/java/bubble/rule/AbstractAppRuleDriver.java +++ b/bubble-server/src/main/java/bubble/rule/AbstractAppRuleDriver.java @@ -14,6 +14,7 @@ import bubble.model.app.AppRule; import bubble.model.app.BubbleApp; import bubble.model.device.Device; import bubble.resources.stream.FilterHttpRequest; +import bubble.resources.stream.FilterMatchersRequest; import bubble.server.BubbleConfiguration; import bubble.service.cloud.StandardDeviceIdService; import bubble.service.stream.AppPrimerService; @@ -35,7 +36,9 @@ import org.springframework.beans.factory.annotation.Autowired; import java.io.File; import java.io.InputStream; import java.io.InputStreamReader; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; import static bubble.ApiConstants.HOME_DIR; @@ -162,19 +165,46 @@ public abstract class AbstractAppRuleDriver implements AppRuleDriver { + getBubbleJs(filterRequest, filterCtx, bubbleJsTemplate, defaultSiteTemplate, siteJsInsertionVar, showIcon) + getScriptClose(); - final RegexReplacementFilter filter = new RegexReplacementFilter(getInsertionRegex(), replacement); + // Do any alternates apply? + List alternates = null; + if (modConfig.hasAlternateRegexReplacements()) { + final FilterMatchersRequest request = filterRequest.getMatchersResponse().getRequest(); + for (BubbleAlternateRegexReplacement alt : modConfig.getAlternateRegexReplacements()) { + if (alt.matches(request.getFqdn())) { + if (alternates == null) alternates = new ArrayList<>(); + alternates.add(alt); + } + } + } + final String filterNamePrefix = getClass().getSimpleName()+".filterInsertJs(" + filterRequest.getUrl() + "): "; - RegexFilterReader reader = new RegexFilterReader(new InputStreamReader(in), filter) - .setName(filterNamePrefix + getInsertionRegex()) - .setMaxMatches(1); + RegexFilterReader reader; + if (alternates != null) { + final BubbleAlternateRegexReplacement firstAlt = alternates.get(0); + if (log.isInfoEnabled()) log.info("filterInsertJs: using alternate filter (0): "+firstAlt); + reader = new RegexFilterReader(new InputStreamReader(in), firstAlt.regexFilter(filterRequest, replacement)) + .setName(filterNamePrefix + "(alt0: "+firstAlt.getFqdnMatch()+") " + firstAlt.getInsertionRegex()) + .setMaxMatches(1); + for (int i=1; i--> + diff --git a/bubble-server/src/main/resources/models/apps/bubble_block/bubbleApp_bubbleBlock.json b/bubble-server/src/main/resources/models/apps/bubble_block/bubbleApp_bubbleBlock.json index 25e6703a..4e5400ca 100644 --- a/bubble-server/src/main/resources/models/apps/bubble_block/bubbleApp_bubbleBlock.json +++ b/bubble-server/src/main/resources/models/apps/bubble_block/bubbleApp_bubbleBlock.json @@ -127,6 +127,10 @@ "priority": -1000, "config": { "showStats": true, + "alternateRegexReplacements": [{ + "fqdnMatch": "((mobile|www)\\.)?twitter.com", + "insertionRegex": "<\\s*html[^>]*>" + }], "blockLists": [ { "name": "EasyList",