diff --git a/code/services-application/search-service/src/main/java/nu/marginalia/search/svc/SearchFlagSiteService.java b/code/services-application/search-service/src/main/java/nu/marginalia/search/svc/SearchFlagSiteService.java index 33d0165d..06e460b4 100644 --- a/code/services-application/search-service/src/main/java/nu/marginalia/search/svc/SearchFlagSiteService.java +++ b/code/services-application/search-service/src/main/java/nu/marginalia/search/svc/SearchFlagSiteService.java @@ -32,7 +32,8 @@ public class SearchFlagSiteService { new CategoryItem("freebooting", "Reposting Stolen Content"), new CategoryItem("broken", "Broken Website"), new CategoryItem("shock", "Shocking/Offensive"), - new CategoryItem("blacklist", "Review Blacklisting") + new CategoryItem("blacklist", "Review Blacklisting"), + new CategoryItem("no-random", "Remove from Random Exploration") ); private final Map categoryItemMap = diff --git a/code/services-application/search-service/src/main/resources/templates/search/parts/search-footer.hdb b/code/services-application/search-service/src/main/resources/templates/search/parts/search-footer.hdb index 5cbd9c32..cf9889f5 100644 --- a/code/services-application/search-service/src/main/resources/templates/search/parts/search-footer.hdb +++ b/code/services-application/search-service/src/main/resources/templates/search/parts/search-footer.hdb @@ -112,4 +112,4 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/code/services-core/control-service/src/main/java/nu/marginalia/control/app/model/DomainComplaintCategory.java b/code/services-core/control-service/src/main/java/nu/marginalia/control/app/model/DomainComplaintCategory.java index c575f845..756c6e3e 100644 --- a/code/services-core/control-service/src/main/java/nu/marginalia/control/app/model/DomainComplaintCategory.java +++ b/code/services-core/control-service/src/main/java/nu/marginalia/control/app/model/DomainComplaintCategory.java @@ -6,6 +6,7 @@ public enum DomainComplaintCategory { BROKEN("broken"), SHOCK("shock"), BLACKLIST("blacklist"), + REMOVE_EXPLORATION("no-random"), UNKNOWN("unknown"); private final String categoryName; diff --git a/code/services-core/control-service/src/main/java/nu/marginalia/control/app/svc/DomainComplaintService.java b/code/services-core/control-service/src/main/java/nu/marginalia/control/app/svc/DomainComplaintService.java index b3e12176..91d48418 100644 --- a/code/services-core/control-service/src/main/java/nu/marginalia/control/app/svc/DomainComplaintService.java +++ b/code/services-core/control-service/src/main/java/nu/marginalia/control/app/svc/DomainComplaintService.java @@ -2,6 +2,7 @@ package nu.marginalia.control.app.svc; import com.google.inject.Inject; import com.zaxxer.hikari.HikariDataSource; +import lombok.SneakyThrows; import nu.marginalia.control.Redirects; import nu.marginalia.control.app.model.DomainComplaintCategory; import nu.marginalia.control.app.model.DomainComplaintModel; @@ -27,16 +28,19 @@ public class DomainComplaintService { private final HikariDataSource dataSource; private final RendererFactory rendererFactory; private final ControlBlacklistService blacklistService; + private final RandomExplorationService randomExplorationService; private final Logger logger = LoggerFactory.getLogger(getClass()); @Inject public DomainComplaintService(HikariDataSource dataSource, RendererFactory rendererFactory, - ControlBlacklistService blacklistService + ControlBlacklistService blacklistService, + RandomExplorationService randomExplorationService ) { this.dataSource = dataSource; this.rendererFactory = rendererFactory; this.blacklistService = blacklistService; + this.randomExplorationService = randomExplorationService; } public void register() throws IOException { @@ -59,6 +63,7 @@ public class DomainComplaintService { return Map.of("complaintsNew", unreviewed, "complaintsReviewed", reviewed); } + @SneakyThrows private Object reviewComplaint(Request request, Response response) { var domain = new EdgeDomain(request.params("domain")); String action = request.queryParams("action"); @@ -68,6 +73,7 @@ public class DomainComplaintService { switch (action) { case "noop" -> reviewNoAction(domain); case "appeal" -> approveAppealBlacklisting(domain); + case "no-random" -> removeFromRandomDomains(domain); case "blacklist" -> blacklistDomain(domain); default -> throw new UnsupportedOperationException(); } @@ -75,7 +81,6 @@ public class DomainComplaintService { return ""; } - public List getComplaints() { try (var conn = dataSource.getConnection(); var stmt = conn.prepareStatement(""" @@ -109,6 +114,12 @@ public class DomainComplaintService { setDecision(domain, "APPROVED"); } + private void removeFromRandomDomains(EdgeDomain domain) throws SQLException { + randomExplorationService.removeDomain(domain); + + setDecision(domain, "REMOVED-FROM-RANDOM"); + } + public void blacklistDomain(EdgeDomain domain) { blacklistService.addToBlacklist(domain, "Domain complaint"); diff --git a/code/services-core/control-service/src/main/java/nu/marginalia/control/app/svc/RandomExplorationService.java b/code/services-core/control-service/src/main/java/nu/marginalia/control/app/svc/RandomExplorationService.java index 6d2d0dad..ac984e50 100644 --- a/code/services-core/control-service/src/main/java/nu/marginalia/control/app/svc/RandomExplorationService.java +++ b/code/services-core/control-service/src/main/java/nu/marginalia/control/app/svc/RandomExplorationService.java @@ -3,6 +3,7 @@ package nu.marginalia.control.app.svc; import com.google.inject.Inject; import com.zaxxer.hikari.HikariDataSource; import gnu.trove.list.array.TIntArrayList; +import nu.marginalia.model.EdgeDomain; import nu.marginalia.renderer.RendererFactory; import spark.Request; import spark.Response; @@ -108,6 +109,20 @@ public class RandomExplorationService { } } + public void removeDomain(EdgeDomain domain) throws SQLException { + try (var conn = dataSource.getConnection(); + var stmt = conn.prepareStatement(""" + DELETE EC_RANDOM_DOMAINS + FROM EC_RANDOM_DOMAINS + INNER JOIN EC_DOMAIN ON EC_DOMAIN.ID = EC_RANDOM_DOMAINS.DOMAIN_ID + WHERE EC_DOMAIN.DOMAIN_NAME = ? + """)) + { + stmt.setString(1, domain.toString()); + stmt.executeUpdate(); + } + } + public record RandomDomainResult(int id, String domainName) {} } diff --git a/code/services-core/control-service/src/main/resources/templates/control/app/domain-complaints.hdb b/code/services-core/control-service/src/main/resources/templates/control/app/domain-complaints.hdb index 038a65a3..fb37ca44 100644 --- a/code/services-core/control-service/src/main/resources/templates/control/app/domain-complaints.hdb +++ b/code/services-core/control-service/src/main/resources/templates/control/app/domain-complaints.hdb @@ -43,6 +43,7 @@ {{/if}} {{#unless appeal}}
  • Add Sanction
  • +
  • Remove From Random Domains
  • {{/unless}}
  • Ignore