From 07a940f2a9f7a760076f112754397ddfd203734b Mon Sep 17 00:00:00 2001 From: Jonathan Cobb Date: Thu, 6 Feb 2020 22:37:49 -0500 Subject: [PATCH] adjust rate limiter, add mr user blocker, make all template-able objects templates when setting up new node --- .../bubble/filters/BubbleRateLimitFilter.java | 9 ++++++- .../service/dbfilter/EntityIterator.java | 6 ++--- .../src/main/resources/bubble-config.yml | 10 +++---- .../bubble/rule/social/block/site/MR.js.hbs | 27 +++++++++++++++++++ .../rule/social/block/site/Reason.js.hbs | 1 + .../user_block/mr/bubbleApp_userBlock_mr.json | 19 +++++++++++++ .../mr/bubbleApp_userBlock_mr_matchers.json | 13 +++++++++ .../models/manifest-app-user-block.json | 4 ++- utils/cobbzilla-wizard | 2 +- 9 files changed, 80 insertions(+), 11 deletions(-) create mode 100644 bubble-server/src/main/resources/bubble/rule/social/block/site/MR.js.hbs create mode 100644 bubble-server/src/main/resources/models/apps/user_block/mr/bubbleApp_userBlock_mr.json create mode 100644 bubble-server/src/main/resources/models/apps/user_block/mr/bubbleApp_userBlock_mr_matchers.json diff --git a/bubble-server/src/main/java/bubble/filters/BubbleRateLimitFilter.java b/bubble-server/src/main/java/bubble/filters/BubbleRateLimitFilter.java index f11e1cdb..a4ccb84b 100644 --- a/bubble-server/src/main/java/bubble/filters/BubbleRateLimitFilter.java +++ b/bubble-server/src/main/java/bubble/filters/BubbleRateLimitFilter.java @@ -1,9 +1,12 @@ package bubble.filters; import bubble.model.account.Account; +import bubble.server.BubbleConfiguration; +import lombok.Getter; import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.cobbzilla.wizard.filters.RateLimitFilter; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.ws.rs.container.ContainerRequestContext; @@ -24,10 +27,14 @@ public class BubbleRateLimitFilter extends RateLimitFilter { return super.getKeys(request); } + @Autowired private BubbleConfiguration configuration; + + @Getter(lazy=true) private final String filterPrefix = configuration.getHttp().getBaseUri() + FILTER_HTTP_ENDPOINT; + // super-admins have unlimited API usage. helpful when populating models @Override protected boolean allowUnlimitedUse(Principal user, ContainerRequestContext request) { try { - return ((Account) user).admin() || request.getUriInfo().getPath().startsWith(FILTER_HTTP_ENDPOINT); + return ((Account) user).admin() || request.getUriInfo().getPath().startsWith(getFilterPrefix()); } catch (Exception e) { log.warn("allowUnlimitedUse: "+shortError(e)); return false; diff --git a/bubble-server/src/main/java/bubble/service/dbfilter/EntityIterator.java b/bubble-server/src/main/java/bubble/service/dbfilter/EntityIterator.java index 0557c953..49ed3c3b 100644 --- a/bubble-server/src/main/java/bubble/service/dbfilter/EntityIterator.java +++ b/bubble-server/src/main/java/bubble/service/dbfilter/EntityIterator.java @@ -3,7 +3,7 @@ package bubble.service.dbfilter; import bubble.cloud.storage.local.LocalStorageConfig; import bubble.cloud.storage.local.LocalStorageDriver; import bubble.model.account.AccountSshKey; -import bubble.model.app.AppTemplateEntity; +import bubble.model.account.AccountTemplate; import bubble.model.app.BubbleApp; import bubble.model.bill.BubblePlanApp; import bubble.model.cloud.BubbleNetwork; @@ -124,10 +124,10 @@ public abstract class EntityIterator implements Iterator { } } - } else if (planApps != null && AppTemplateEntity.class.isAssignableFrom(c)) { + } else if (planApps != null && AccountTemplate.class.isAssignableFrom(c)) { // only copy app-related entities for enabled apps, make them all templates entities.stream() - .map(app -> (AppTemplateEntity) ((AppTemplateEntity) app).setTemplate(true)) + .map(app -> (AccountTemplate) ((AccountTemplate) app).setTemplate(true)) .forEach(this::add); } else { diff --git a/bubble-server/src/main/resources/bubble-config.yml b/bubble-server/src/main/resources/bubble-config.yml index 48a11ff1..5316a48d 100644 --- a/bubble-server/src/main/resources/bubble-config.yml +++ b/bubble-server/src/main/resources/bubble-config.yml @@ -76,8 +76,8 @@ localStorageDir: {{LOCALSTORAGE_BASE_DIR}} disallowedCountries: {{DISALLOWED_COUNTRIES}} rateLimits: - - { limit: 1000, interval: 3s, block: 5m } - - { limit: 10000, interval: 1m, block: 5m } - - { limit: 25000, interval: 10m, block: 1h } - - { limit: 100000, interval: 1h, block: 24h } - - { limit: 500000, interval: 6h, block: 96h } + - { limit: 500, interval: 3s, block: 5m } + - { limit: 2000, interval: 1m, block: 5m } + - { limit: 10000, interval: 10m, block: 1h } + - { limit: 50000, interval: 1h, block: 24h } + - { limit: 100000, interval: 6h, block: 96h } diff --git a/bubble-server/src/main/resources/bubble/rule/social/block/site/MR.js.hbs b/bubble-server/src/main/resources/bubble/rule/social/block/site/MR.js.hbs new file mode 100644 index 00000000..a7ccdb91 --- /dev/null +++ b/bubble-server/src/main/resources/bubble/rule/social/block/site/MR.js.hbs @@ -0,0 +1,27 @@ +function {{JS_PREFIX}}_apply_blocks(blocked_users) { + const comments = document.querySelector('#comments'); + if (comments === null || comments.length === 0) { + console.warn('No comments found, not filtering'); + return; + } + {{JS_PREFIX}}_consider_block(comments.querySelector('article.blog-comment'), blocked_users); +} + +function {{JS_PREFIX}}_consider_block(comments, blocked_users) { + for (let i=0; iX]'; + userElement.parentNode.insertBefore(blockNode, userElement.nextSibling); + } + } +} diff --git a/bubble-server/src/main/resources/bubble/rule/social/block/site/Reason.js.hbs b/bubble-server/src/main/resources/bubble/rule/social/block/site/Reason.js.hbs index bdeec7b7..a80a4bd9 100644 --- a/bubble-server/src/main/resources/bubble/rule/social/block/site/Reason.js.hbs +++ b/bubble-server/src/main/resources/bubble/rule/social/block/site/Reason.js.hbs @@ -8,6 +8,7 @@ function {{JS_PREFIX}}_apply_blocks(blocked_users) { } function {{JS_PREFIX}}_consider_block(comments, blocked_users) { + console.log('consider_block: considering '+comments.length+' comments...'); for (let i=0; i