Procházet zdrojové kódy

adjust rate limiter, add mr user blocker, make all template-able objects templates when setting up new node

tags/v0.7.0
Jonathan Cobb před 4 roky
rodič
revize
07a940f2a9
9 změnil soubory, kde provedl 80 přidání a 11 odebrání
  1. +8
    -1
      bubble-server/src/main/java/bubble/filters/BubbleRateLimitFilter.java
  2. +3
    -3
      bubble-server/src/main/java/bubble/service/dbfilter/EntityIterator.java
  3. +5
    -5
      bubble-server/src/main/resources/bubble-config.yml
  4. +27
    -0
      bubble-server/src/main/resources/bubble/rule/social/block/site/MR.js.hbs
  5. +1
    -0
      bubble-server/src/main/resources/bubble/rule/social/block/site/Reason.js.hbs
  6. +19
    -0
      bubble-server/src/main/resources/models/apps/user_block/mr/bubbleApp_userBlock_mr.json
  7. +13
    -0
      bubble-server/src/main/resources/models/apps/user_block/mr/bubbleApp_userBlock_mr_matchers.json
  8. +3
    -1
      bubble-server/src/main/resources/models/manifest-app-user-block.json
  9. +1
    -1
      utils/cobbzilla-wizard

+ 8
- 1
bubble-server/src/main/java/bubble/filters/BubbleRateLimitFilter.java Zobrazit soubor

@@ -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;


+ 3
- 3
bubble-server/src/main/java/bubble/service/dbfilter/EntityIterator.java Zobrazit soubor

@@ -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<Identifiable> {
}
}

} 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 {


+ 5
- 5
bubble-server/src/main/resources/bubble-config.yml Zobrazit soubor

@@ -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 }

+ 27
- 0
bubble-server/src/main/resources/bubble/rule/social/block/site/MR.js.hbs Zobrazit soubor

@@ -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; i<comments.length; i++) {
const comment = comments[i];
const userElement = comment.querySelector('h3.comment-author');
if (userElement !== null) {
const author = userElement.innerText;
if (blocked_users !== null && blocked_users.includes(author)) {
comment.parentNode.removeChild(comment);
continue;
}

const blockNode = document.createElement('span');
blockNode.className = "bubble_block";
blockNode.innerHTML = ' [<b><a href="#" onclick="{{JS_PREFIX}}_block_user(\''+author+'\'); return false;">X</a></b>]';
userElement.parentNode.insertBefore(blockNode, userElement.nextSibling);
}
}
}

+ 1
- 0
bubble-server/src/main/resources/bubble/rule/social/block/site/Reason.js.hbs Zobrazit soubor

@@ -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<comments.length; i++) {
const comment = comments[i];
const userElement = comment.querySelector('cite.fn strong');


+ 19
- 0
bubble-server/src/main/resources/models/apps/user_block/mr/bubbleApp_userBlock_mr.json Zobrazit soubor

@@ -0,0 +1,19 @@
[{
"name": "UserBlocker",
"children": {
"AppSite": [{
"name": "MarginalRevolution",
"url": "https://marginalrevolution.com",
"description": "An economics blog by Tyler Cowen and Alex Tabarrok, professors at George Mason University",
"template": true
}],
"AppRule": [{
"name": "mr_user_blocker",
"template": true,
"driver": "JsUserBlockerRuleDriver",
"config": {
"siteJsTemplate": "bubble/rule/social/block/site/MR.js.hbs"
}
}]
}
}]

+ 13
- 0
bubble-server/src/main/resources/models/apps/user_block/mr/bubbleApp_userBlock_mr_matchers.json Zobrazit soubor

@@ -0,0 +1,13 @@
[{
"name": "UserBlocker",
"children": {
"AppMatcher": [{
"name": "MRMatcher",
"site": "MarginalRevolution",
"template": true,
"fqdn": "marginalrevolution.com",
"urlRegex": "marginalrevolution//20\\d{2}/\\d{2}/\\w+",
"rule": "mr_user_blocker"
}]
}
}]

+ 3
- 1
bubble-server/src/main/resources/models/manifest-app-user-block.json Zobrazit soubor

@@ -3,5 +3,7 @@
"apps/user_block/hn/bubbleApp_userBlock_hn",
"apps/user_block/hn/bubbleApp_userBlock_hn_matchers",
"apps/user_block/hn/bubbleApp_userBlock_reason",
"apps/user_block/hn/bubbleApp_userBlock_reason_matchers"
"apps/user_block/hn/bubbleApp_userBlock_reason_matchers",
"apps/user_block/hn/bubbleApp_userBlock_mr",
"apps/user_block/hn/bubbleApp_userBlock_mr_matchers"
]

+ 1
- 1
utils/cobbzilla-wizard

@@ -1 +1 @@
Subproject commit 19655fd0aedf6f066803e9f568b19137c02939d2
Subproject commit a28e873e19bf8e3d8891a627243f47fd0d345772

Načítá se…
Zrušit
Uložit