Quellcode durchsuchen

add support for alternate fqdn-based insertions within a rule

tags/v1.0.3
Jonathan Cobb vor 4 Jahren
Ursprung
Commit
4901ecea1a
6 geänderte Dateien mit 80 neuen und 10 gelöschten Zeilen
  1. +40
    -10
      bubble-server/src/main/java/bubble/rule/AbstractAppRuleDriver.java
  2. +20
    -0
      bubble-server/src/main/java/bubble/rule/BubbleAlternateRegexReplacement.java
  3. +12
    -0
      bubble-server/src/main/java/bubble/rule/BubbleRegexReplacement.java
  4. +3
    -0
      bubble-server/src/main/java/bubble/rule/RequestModifierConfig.java
  5. +1
    -0
      bubble-server/src/main/resources/logback.xml
  6. +4
    -0
      bubble-server/src/main/resources/models/apps/bubble_block/bubbleApp_bubbleBlock.json

+ 40
- 10
bubble-server/src/main/java/bubble/rule/AbstractAppRuleDriver.java Datei anzeigen

@@ -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<BubbleAlternateRegexReplacement> 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<alternates.size(); i++) {
final BubbleAlternateRegexReplacement alt = alternates.get(i);
if (log.isInfoEnabled()) log.info("filterInsertJs: using alternate filter ("+i+"): "+alt);
reader = new RegexFilterReader(reader, alt.regexFilter(filterRequest, replacement))
.setName(filterNamePrefix + "(alt"+i+": "+alt.getFqdnMatch()+") " + alt.getInsertionRegex())
.setMaxMatches(1);
}

} else {
if (log.isInfoEnabled()) log.info("filterInsertJs: using default filter: "+getInsertionRegex());
reader = new RegexFilterReader(new InputStreamReader(in), new RegexReplacementFilter(getInsertionRegex(), replacement))
.setName(filterNamePrefix + getInsertionRegex())
.setMaxMatches(1);
}

if (modConfig.hasAdditionalRegexReplacements()) {
for (BubbleRegexReplacement re : modConfig.getAdditionalRegexReplacements()) {
final RegexReplacementFilter f = new RegexReplacementFilter(
re.getInsertionRegex(),
re.getReplacement().replace(NONCE_VAR, filterRequest.getScriptNonce())
);
reader = new RegexFilterReader(reader, f)
.setName(filterNamePrefix+" additional: "+re.getInsertionRegex());
if (log.isInfoEnabled()) log.info("filterInsertJs: using additional filter: "+re.getInsertionRegex());
reader = new RegexFilterReader(reader, re.regexFilter(filterRequest, replacement))
.setName(filterNamePrefix+" (additional) "+re.getInsertionRegex());
}
}



+ 20
- 0
bubble-server/src/main/java/bubble/rule/BubbleAlternateRegexReplacement.java Datei anzeigen

@@ -0,0 +1,20 @@
package bubble.rule;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import java.util.regex.Pattern;

import static java.util.regex.Pattern.CASE_INSENSITIVE;

@ToString
public class BubbleAlternateRegexReplacement extends BubbleRegexReplacement {

@Getter @Setter private String fqdnMatch;

@Getter(lazy=true) private final Pattern pattern = Pattern.compile(fqdnMatch, CASE_INSENSITIVE);

public boolean matches (String fqdn) { return getPattern().matcher(fqdn).matches(); }

}

+ 12
- 0
bubble-server/src/main/java/bubble/rule/BubbleRegexReplacement.java Datei anzeigen

@@ -4,12 +4,24 @@
*/
package bubble.rule;

import bubble.resources.stream.FilterHttpRequest;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.cobbzilla.util.io.regex.RegexReplacementFilter;

import static bubble.rule.AbstractAppRuleDriver.NONCE_VAR;
import static org.cobbzilla.util.daemon.ZillaRuntime.empty;

@ToString
public class BubbleRegexReplacement {

@Getter @Setter private String insertionRegex;
@Getter @Setter private String replacement;
public boolean hasReplacement () { return !empty(replacement); }

public RegexReplacementFilter regexFilter(FilterHttpRequest filterRequest, String replacement) {
return new RegexReplacementFilter(getInsertionRegex(), (hasReplacement() ? getReplacement() : replacement).replace(NONCE_VAR, filterRequest.getScriptNonce()));
}

}

+ 3
- 0
bubble-server/src/main/java/bubble/rule/RequestModifierConfig.java Datei anzeigen

@@ -23,4 +23,7 @@ public class RequestModifierConfig {
@Getter @Setter private BubbleRegexReplacement[] additionalRegexReplacements;
public boolean hasAdditionalRegexReplacements () { return !empty(additionalRegexReplacements); }

@Getter @Setter private BubbleAlternateRegexReplacement[] alternateRegexReplacements;
public boolean hasAlternateRegexReplacements () { return !empty(alternateRegexReplacements); }

}

+ 1
- 0
bubble-server/src/main/resources/logback.xml Datei anzeigen

@@ -40,6 +40,7 @@
<!-- <logger name="org.cobbzilla.wizard.dao.SqlViewSearchHelper" level="DEBUG" />-->
<logger name="org.cobbzilla.wizard.server.listener.BrowserLauncherListener" level="INFO" />
<logger name="bubble.service.notify.NotificationService" level="WARN" />
<logger name="bubble.rule.AbstractAppRuleDriver" level="WARN" />
<logger name="bubble.rule.bblock.BubbleBlockRuleDriver" level="WARN" />
<logger name="bubble.service.block.BlockStatsService" level="WARN" />
<!-- <logger name="bubble.service.block" level="DEBUG" />-->


+ 4
- 0
bubble-server/src/main/resources/models/apps/bubble_block/bubbleApp_bubbleBlock.json Datei anzeigen

@@ -127,6 +127,10 @@
"priority": -1000,
"config": {
"showStats": true,
"alternateRegexReplacements": [{
"fqdnMatch": "((mobile|www)\\.)?twitter.com",
"insertionRegex": "<\\s*html[^>]*>"
}],
"blockLists": [
{
"name": "EasyList",


Laden…
Abbrechen
Speichern