Bladeren bron

WIP. manage block lists - config views now working

tags/v0.5.0
Jonathan Cobb 5 jaren geleden
bovenliggende
commit
ae3bd2c36f
10 gewijzigde bestanden met toevoegingen van 173 en 6 verwijderingen
  1. +1
    -0
      bubble-server/src/main/java/bubble/ApiConstants.java
  2. +14
    -0
      bubble-server/src/main/java/bubble/app/bblock/BlockListEntry.java
  3. +69
    -1
      bubble-server/src/main/java/bubble/app/bblock/BubbleBlockAppConfigDriver.java
  4. +10
    -0
      bubble-server/src/main/java/bubble/model/app/config/AppConfigDriver.java
  5. +64
    -0
      bubble-server/src/main/java/bubble/resources/app/AppConfigResource.java
  6. +8
    -0
      bubble-server/src/main/java/bubble/resources/app/AppsResourceBase.java
  7. +2
    -0
      bubble-server/src/main/java/bubble/rule/bblock/BubbleBlockList.java
  8. +3
    -3
      bubble-server/src/main/resources/models/apps/bubble_block/bubbleApp_bubbleBlock.json
  9. +1
    -1
      bubble-web
  10. +1
    -1
      utils/cobbzilla-utils

+ 1
- 0
bubble-server/src/main/java/bubble/ApiConstants.java Bestand weergeven

@@ -131,6 +131,7 @@ public class ApiConstants {
public static final String EP_MATCHERS = "/matchers";
public static final String EP_DATA = "/data";
public static final String EP_VIEW = "/view";
public static final String EP_CONFIG = "/config";
public static final String EP_SITES = "/sites";
public static final String EP_MESSAGES = MESSAGES_ENDPOINT;
public static final String EP_DRIVERS = DRIVERS_ENDPOINT;


+ 14
- 0
bubble-server/src/main/java/bubble/app/bblock/BlockListEntry.java Bestand weergeven

@@ -0,0 +1,14 @@
package bubble.app.bblock;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.experimental.Accessors;

@NoArgsConstructor @AllArgsConstructor @Accessors(chain=true)
public class BlockListEntry {

@Getter @Setter private String rule;

}

+ 69
- 1
bubble-server/src/main/java/bubble/app/bblock/BubbleBlockAppConfigDriver.java Bestand weergeven

@@ -1,4 +1,72 @@
package bubble.app.bblock;

public class BubbleBlockAppConfigDriver {
import bubble.dao.app.AppRuleDAO;
import bubble.dao.app.RuleDriverDAO;
import bubble.model.account.Account;
import bubble.model.app.AppRule;
import bubble.model.app.BubbleApp;
import bubble.model.app.RuleDriver;
import bubble.model.app.config.AppConfigDriver;
import bubble.rule.bblock.BubbleBlockConfig;
import bubble.rule.bblock.BubbleBlockList;
import bubble.rule.bblock.BubbleBlockRuleDriver;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.*;
import java.util.stream.Collectors;

import static java.util.Arrays.asList;
import static java.util.Collections.emptyList;
import static org.cobbzilla.util.daemon.ZillaRuntime.empty;
import static org.cobbzilla.util.json.JsonUtil.json;
import static org.cobbzilla.wizard.resources.ResourceUtil.notFoundEx;

public class BubbleBlockAppConfigDriver implements AppConfigDriver {

public static final String VIEW_manage_lists = "manage_lists";
public static final String VIEW_manage_list = "manage_list";
public static final String VIEW_manage_entries = "manage_entries";

@Autowired private RuleDriverDAO driverDAO;
@Autowired private AppRuleDAO ruleDAO;

@Override public Object getView(Account account, BubbleApp app, String view, Map<String, String> params) {
final String id = params.get(PARAM_ID);
switch (view) {
case VIEW_manage_lists:
return loadAllLists(account, app);

case VIEW_manage_list:
if (empty(id)) throw notFoundEx(id);
return loadList(account, app, id);

case VIEW_manage_entries:
if (empty(id)) throw notFoundEx(id);
return loadListEntries(account, app, id);
}
throw notFoundEx(view);
}

private List<BlockListEntry> loadListEntries(Account account, BubbleApp app, String id) {
final BubbleBlockList list = loadList(account, app, id);
return list == null || !list.hasAdditionalEntries() ? emptyList() : Arrays.stream(list.getAdditionalEntries()).map(BlockListEntry::new).collect(Collectors.toList());
}

private BubbleBlockList loadList(Account account, BubbleApp app, String id) {
return loadAllLists(account, app).stream().filter(list -> list.hasId(id)).findFirst().orElse(null);
}

private List<BubbleBlockList> loadAllLists(Account account, BubbleApp app) {
final List<BubbleBlockList> blockLists = new ArrayList<>();
final List<AppRule> rules = ruleDAO.findByAccountAndApp(account.getUuid(), app.getUuid());
for (AppRule rule : rules) {
final RuleDriver driver = driverDAO.findByAccountAndId(account.getUuid(), rule.getDriver());
if (driver != null && driver.getDriverClass().equals(BubbleBlockRuleDriver.class.getName())) {
final BubbleBlockConfig blockConfig = json(rule.getConfigJson(), BubbleBlockConfig.class);
blockLists.addAll(asList(blockConfig.getBlockLists()));
}
}
return blockLists;
}

}

+ 10
- 0
bubble-server/src/main/java/bubble/model/app/config/AppConfigDriver.java Bestand weergeven

@@ -1,4 +1,14 @@
package bubble.model.app.config;

import bubble.model.account.Account;
import bubble.model.app.BubbleApp;

import java.util.Map;

public interface AppConfigDriver {

String PARAM_ID = "id";

Object getView(Account account, BubbleApp app, String view, Map<String, String> params);

}

+ 64
- 0
bubble-server/src/main/java/bubble/resources/app/AppConfigResource.java Bestand weergeven

@@ -0,0 +1,64 @@
package bubble.resources.app;

import bubble.model.account.Account;
import bubble.model.app.BubbleApp;
import bubble.model.app.config.AppConfigDriver;
import bubble.model.app.config.AppConfigView;
import bubble.server.BubbleConfiguration;
import lombok.extern.slf4j.Slf4j;
import org.glassfish.grizzly.http.server.Request;
import org.glassfish.jersey.server.ContainerRequest;
import org.springframework.beans.factory.annotation.Autowired;

import javax.ws.rs.*;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;

import java.util.Map;

import static org.cobbzilla.util.http.HttpContentTypes.APPLICATION_JSON;
import static org.cobbzilla.util.http.URIUtil.queryParams;
import static org.cobbzilla.wizard.resources.ResourceUtil.*;

@Consumes(APPLICATION_JSON)
@Produces(APPLICATION_JSON)
@Slf4j
public class AppConfigResource {

private Account account;
private BubbleApp app;

public AppConfigResource (Account account, BubbleApp app) {
this.account = account;
this.app = app;
}

@Autowired private BubbleConfiguration configuration;

private AppConfigDriver getConfigDriver() { return app.getDataConfig().getConfigDriver(configuration); }

@GET
public Response getConfigView(@Context ContainerRequest ctx) {
final Account caller = userPrincipal(ctx);
if (!caller.admin() && !caller.getUuid().equals(account.getUuid())) return forbidden();
return ok(app.getDataConfig().getConfigViews());
}

@GET @Path("/{view}")
public Response getConfigView(@Context Request req,
@Context ContainerRequest ctx,
@PathParam("view") String view) {

final Account caller = userPrincipal(ctx);
if (!caller.admin() && !caller.getUuid().equals(account.getUuid())) return forbidden();

final AppConfigView configView = app.getDataConfig().getConfigView(view);
if (configView == null) return notFound(view);

final Map<String, String> queryParams = queryParams(req.getQueryString());

final AppConfigDriver configDriver = getConfigDriver();
return ok(configDriver.getView(account, app, view, queryParams));
}

}

+ 8
- 0
bubble-server/src/main/java/bubble/resources/app/AppsResourceBase.java Bestand weergeven

@@ -127,4 +127,12 @@ public abstract class AppsResourceBase extends AccountOwnedTemplateResource<Bubb
return configuration.subResource(AppDataResource.class, getAccount(account, ctx), app);
}

@Path("/{id}"+EP_CONFIG)
public AppConfigResource getConfigResource(@Context ContainerRequest ctx,
@PathParam("id") String id) {
final BubbleApp app = find(ctx, id);
if (app == null || !app.hasDataConfig() || !app.getDataConfig().hasConfigViews()) throw notFoundEx(id);
return configuration.subResource(AppConfigResource.class, getAccount(account, ctx), app);
}

}

+ 2
- 0
bubble-server/src/main/java/bubble/rule/bblock/BubbleBlockList.java Bestand weergeven

@@ -8,6 +8,8 @@ import static org.cobbzilla.util.daemon.ZillaRuntime.empty;
public class BubbleBlockList {

@Getter @Setter private String id;
public boolean hasId(String id) { return this.id != null && this.id.equals(id); }

@Getter @Setter private String name;
@Getter @Setter private String description;
@Getter @Setter private String[] tags;


+ 3
- 3
bubble-server/src/main/resources/models/apps/bubble_block/bubbleApp_bubbleBlock.json Bestand weergeven

@@ -23,7 +23,7 @@
{"name": "last_7_days"},
{"name": "last_30_days"}
],
"configDriver": "bubble.app.bblock.BubbleBlockAppConfig",
"configDriver": "bubble.app.bblock.BubbleBlockAppConfigDriver",
"configViews": [{
"name": "manage_lists",
"scope": "app",
@@ -60,7 +60,7 @@
}, {
"name": "manage_entries",
"scope": "item",
"columns": ["block_rule"],
"columns": ["rule"],
"actions": [
{"name": "remove_rule"},
{
@@ -142,7 +142,7 @@
{"name": "config.field.tags", "value": "Tags"},
{"name": "config.field.tags.description", "value": "A comma-separated list of tags: "},
{"name": "config.field.enabled", "value": "Enabled"},
{"name": "config.field.block_rule", "value": "Rule"},
{"name": "config.field.rule", "value": "Rule"},

{"name": "config.action.enable_list", "value": "Enable"},
{"name": "config.action.disable_list", "value": "Disable"},


+ 1
- 1
bubble-web

@@ -1 +1 @@
Subproject commit 10df086e32a8e22e8a4b5472161ccdf6936d6b17
Subproject commit 920e03c16b5913462a61a45417b583504ba25290

+ 1
- 1
utils/cobbzilla-utils

@@ -1 +1 @@
Subproject commit d1d7639d04a9ea8db82022b3a72382b8e3d0a5da
Subproject commit b68eecfa79696b72b7242de27de530c4e0112c28

Laden…
Annuleren
Opslaan