Add proper chat filter. Finishes #41
This commit is contained in:
parent
ad0140d29f
commit
fba48cf223
@ -61,7 +61,10 @@ import net.frozenorb.apiv3.route.bannedCellCarriers.DELETEBannedCellCarriersId;
|
|||||||
import net.frozenorb.apiv3.route.bannedCellCarriers.GETBannedCellCarriers;
|
import net.frozenorb.apiv3.route.bannedCellCarriers.GETBannedCellCarriers;
|
||||||
import net.frozenorb.apiv3.route.bannedCellCarriers.GETBannedCellCarriersId;
|
import net.frozenorb.apiv3.route.bannedCellCarriers.GETBannedCellCarriersId;
|
||||||
import net.frozenorb.apiv3.route.bannedCellCarriers.POSTBannedCellCarriers;
|
import net.frozenorb.apiv3.route.bannedCellCarriers.POSTBannedCellCarriers;
|
||||||
import net.frozenorb.apiv3.route.chatFilterList.GETChatFilter;
|
import net.frozenorb.apiv3.route.chatFilter.DELETEChatFilterId;
|
||||||
|
import net.frozenorb.apiv3.route.chatFilter.GETChatFilter;
|
||||||
|
import net.frozenorb.apiv3.route.chatFilter.GETChatFilterId;
|
||||||
|
import net.frozenorb.apiv3.route.chatFilter.POSTChatFilter;
|
||||||
import net.frozenorb.apiv3.route.disposableLoginTokens.POSTDisposableLoginTokens;
|
import net.frozenorb.apiv3.route.disposableLoginTokens.POSTDisposableLoginTokens;
|
||||||
import net.frozenorb.apiv3.route.disposableLoginTokens.POSTDisposableLoginTokensIdUse;
|
import net.frozenorb.apiv3.route.disposableLoginTokens.POSTDisposableLoginTokensIdUse;
|
||||||
import net.frozenorb.apiv3.route.emailTokens.GETEmailTokensIdOwner;
|
import net.frozenorb.apiv3.route.emailTokens.GETEmailTokensIdOwner;
|
||||||
@ -306,7 +309,11 @@ public final class APIv3 extends AbstractVerticle {
|
|||||||
//http.put("/bannedCellCarriers/:bannedCellCarrier").blockingHandler(new PUTBannedCellCarriersId(), false);
|
//http.put("/bannedCellCarriers/:bannedCellCarrier").blockingHandler(new PUTBannedCellCarriersId(), false);
|
||||||
http.delete("/bannedCellCarriers/:bannedCellCarrier").blockingHandler(new DELETEBannedCellCarriersId(), false);
|
http.delete("/bannedCellCarriers/:bannedCellCarrier").blockingHandler(new DELETEBannedCellCarriersId(), false);
|
||||||
|
|
||||||
|
http.get("/chatFilter/:chatFilterEntryId").handler(new GETChatFilterId());
|
||||||
http.get("/chatFilter").handler(new GETChatFilter());
|
http.get("/chatFilter").handler(new GETChatFilter());
|
||||||
|
http.post("/chatFilter").blockingHandler(new POSTChatFilter(), false);
|
||||||
|
//http.put("/chatFilter/:chatFilterEntryId").blockingHandler(new PUTChatFilterId(), false);
|
||||||
|
http.delete("/chatFilter/:chatFilterEntryId").blockingHandler(new DELETEChatFilterId(), false);
|
||||||
|
|
||||||
http.post("/disposableLoginTokens").blockingHandler(new POSTDisposableLoginTokens(), false);
|
http.post("/disposableLoginTokens").blockingHandler(new POSTDisposableLoginTokens(), false);
|
||||||
http.post("/disposableLoginTokens/:disposableLoginToken/use").blockingHandler(new POSTDisposableLoginTokensIdUse(), false);
|
http.post("/disposableLoginTokens/:disposableLoginToken/use").blockingHandler(new POSTDisposableLoginTokensIdUse(), false);
|
||||||
|
@ -31,6 +31,9 @@ public enum AuditLogActionType {
|
|||||||
NOTIFICATION_TEMPLATE_CREATE(false),
|
NOTIFICATION_TEMPLATE_CREATE(false),
|
||||||
NOTIFICATION_TEMPLATE_UPDATE(false),
|
NOTIFICATION_TEMPLATE_UPDATE(false),
|
||||||
NOTIFICATION_TEMPLATE_DELETE(false),
|
NOTIFICATION_TEMPLATE_DELETE(false),
|
||||||
|
CHAT_FILTER_ENTRY_CREATE(false),
|
||||||
|
CHAT_FILTER_ENTRY_UPDATE(false),
|
||||||
|
CHAT_FILTER_ENTRY_DELETE(false),
|
||||||
PUNISHMENT_CREATE(true) {
|
PUNISHMENT_CREATE(true) {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
47
src/main/java/net/frozenorb/apiv3/model/ChatFilterEntry.java
Normal file
47
src/main/java/net/frozenorb/apiv3/model/ChatFilterEntry.java
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
package net.frozenorb.apiv3.model;
|
||||||
|
|
||||||
|
import com.mongodb.async.SingleResultCallback;
|
||||||
|
import com.mongodb.async.client.MongoCollection;
|
||||||
|
import fr.javatic.mongo.jacksonCodec.Entity;
|
||||||
|
import fr.javatic.mongo.jacksonCodec.objectId.Id;
|
||||||
|
import lombok.Getter;
|
||||||
|
import net.frozenorb.apiv3.APIv3;
|
||||||
|
import net.frozenorb.apiv3.unsorted.MongoToVoidMongoCallback;
|
||||||
|
import net.frozenorb.apiv3.util.SyncUtils;
|
||||||
|
import org.bson.Document;
|
||||||
|
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
public final class ChatFilterEntry {
|
||||||
|
|
||||||
|
private static final MongoCollection<ChatFilterEntry> chatFilterCollection = APIv3.getDatabase().getCollection("chatFilter", ChatFilterEntry.class);
|
||||||
|
|
||||||
|
@Getter @Id private String id;
|
||||||
|
@Getter private String regex;
|
||||||
|
|
||||||
|
public static void findById(String id, SingleResultCallback<ChatFilterEntry> callback) {
|
||||||
|
chatFilterCollection.find(new Document("_id", id)).first(SyncUtils.vertxWrap(callback));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void findAll(SingleResultCallback<List<ChatFilterEntry>> callback) {
|
||||||
|
chatFilterCollection.find().into(new LinkedList<>(), SyncUtils.vertxWrap(callback));
|
||||||
|
}
|
||||||
|
|
||||||
|
private ChatFilterEntry() {} // For Jackson
|
||||||
|
|
||||||
|
public ChatFilterEntry(String id, String regex) {
|
||||||
|
this.id = id;
|
||||||
|
this.regex = regex;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void insert(SingleResultCallback<Void> callback) {
|
||||||
|
chatFilterCollection.insertOne(this, SyncUtils.vertxWrap(callback));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void delete(SingleResultCallback<Void> callback) {
|
||||||
|
chatFilterCollection.deleteOne(new Document("_id", id), SyncUtils.vertxWrap(new MongoToVoidMongoCallback<>(callback)));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,42 @@
|
|||||||
|
package net.frozenorb.apiv3.route.chatFilter;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
import io.vertx.core.Handler;
|
||||||
|
import io.vertx.core.json.JsonObject;
|
||||||
|
import io.vertx.ext.web.RoutingContext;
|
||||||
|
import net.frozenorb.apiv3.APIv3;
|
||||||
|
import net.frozenorb.apiv3.auditLog.AuditLog;
|
||||||
|
import net.frozenorb.apiv3.auditLog.AuditLogActionType;
|
||||||
|
import net.frozenorb.apiv3.model.ChatFilterEntry;
|
||||||
|
import net.frozenorb.apiv3.util.ErrorUtils;
|
||||||
|
import net.frozenorb.apiv3.util.SyncUtils;
|
||||||
|
import net.frozenorb.apiv3.util.UuidUtils;
|
||||||
|
|
||||||
|
public final class DELETEChatFilterId implements Handler<RoutingContext> {
|
||||||
|
|
||||||
|
public void handle(RoutingContext ctx) {
|
||||||
|
ChatFilterEntry chatFilterEntry = SyncUtils.runBlocking(v -> ChatFilterEntry.findById(ctx.request().getParam("chatFilterEntryId"), v));
|
||||||
|
|
||||||
|
if (chatFilterEntry == null) {
|
||||||
|
ErrorUtils.respondNotFound(ctx, "Chat filter entry", ctx.request().getParam("chatFilterEntryId"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
SyncUtils.<Void>runBlocking(v -> chatFilterEntry.delete(v));
|
||||||
|
|
||||||
|
JsonObject requestBody = ctx.getBodyAsJson();
|
||||||
|
|
||||||
|
if (requestBody.containsKey("removedBy")) {
|
||||||
|
AuditLog.log(UuidUtils.parseUuid(requestBody.getString("removedBy")), requestBody.getString("removedByIp"), ctx, AuditLogActionType.CHAT_FILTER_ENTRY_DELETE, ImmutableMap.of("chatFilterEntryId", chatFilterEntry.getId()), (ignored, error) -> {
|
||||||
|
if (error != null) {
|
||||||
|
ErrorUtils.respondInternalError(ctx, error);
|
||||||
|
} else {
|
||||||
|
APIv3.respondJson(ctx, 200, chatFilterEntry);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
APIv3.respondJson(ctx, 200, chatFilterEntry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,21 @@
|
|||||||
|
package net.frozenorb.apiv3.route.chatFilter;
|
||||||
|
|
||||||
|
import io.vertx.core.Handler;
|
||||||
|
import io.vertx.ext.web.RoutingContext;
|
||||||
|
import net.frozenorb.apiv3.APIv3;
|
||||||
|
import net.frozenorb.apiv3.model.ChatFilterEntry;
|
||||||
|
import net.frozenorb.apiv3.util.ErrorUtils;
|
||||||
|
|
||||||
|
public final class GETChatFilter implements Handler<RoutingContext> {
|
||||||
|
|
||||||
|
public void handle(RoutingContext ctx) {
|
||||||
|
ChatFilterEntry.findAll((chatFilterEntries, error) -> {
|
||||||
|
if (error != null) {
|
||||||
|
ErrorUtils.respondInternalError(ctx, error);
|
||||||
|
} else {
|
||||||
|
APIv3.respondJson(ctx, 200, chatFilterEntries);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,21 @@
|
|||||||
|
package net.frozenorb.apiv3.route.chatFilter;
|
||||||
|
|
||||||
|
import io.vertx.core.Handler;
|
||||||
|
import io.vertx.ext.web.RoutingContext;
|
||||||
|
import net.frozenorb.apiv3.APIv3;
|
||||||
|
import net.frozenorb.apiv3.model.ChatFilterEntry;
|
||||||
|
import net.frozenorb.apiv3.util.ErrorUtils;
|
||||||
|
|
||||||
|
public final class GETChatFilterId implements Handler<RoutingContext> {
|
||||||
|
|
||||||
|
public void handle(RoutingContext ctx) {
|
||||||
|
ChatFilterEntry.findById(ctx.request().getParam("chatFilterEntryId"), (notificationTemplate, error) -> {
|
||||||
|
if (error != null) {
|
||||||
|
ErrorUtils.respondInternalError(ctx, error);
|
||||||
|
} else {
|
||||||
|
APIv3.respondJson(ctx, 200, notificationTemplate);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,38 @@
|
|||||||
|
package net.frozenorb.apiv3.route.chatFilter;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
import io.vertx.core.Handler;
|
||||||
|
import io.vertx.core.json.JsonObject;
|
||||||
|
import io.vertx.ext.web.RoutingContext;
|
||||||
|
import net.frozenorb.apiv3.APIv3;
|
||||||
|
import net.frozenorb.apiv3.auditLog.AuditLog;
|
||||||
|
import net.frozenorb.apiv3.auditLog.AuditLogActionType;
|
||||||
|
import net.frozenorb.apiv3.model.ChatFilterEntry;
|
||||||
|
import net.frozenorb.apiv3.util.ErrorUtils;
|
||||||
|
import net.frozenorb.apiv3.util.SyncUtils;
|
||||||
|
import net.frozenorb.apiv3.util.UuidUtils;
|
||||||
|
|
||||||
|
public final class POSTChatFilter implements Handler<RoutingContext> {
|
||||||
|
|
||||||
|
public void handle(RoutingContext ctx) {
|
||||||
|
JsonObject requestBody = ctx.getBodyAsJson();
|
||||||
|
String id = requestBody.getString("id");
|
||||||
|
String regex = requestBody.getString("regex");
|
||||||
|
|
||||||
|
ChatFilterEntry chatFilterEntry = new ChatFilterEntry(id, regex);
|
||||||
|
SyncUtils.<Void>runBlocking(v -> chatFilterEntry.insert(v));
|
||||||
|
|
||||||
|
if (requestBody.containsKey("addedBy")) {
|
||||||
|
AuditLog.log(UuidUtils.parseUuid(requestBody.getString("addedBy")), requestBody.getString("addedByIp"), ctx, AuditLogActionType.CHAT_FILTER_ENTRY_CREATE, ImmutableMap.of("chatFilterEntryId", id), (ignored, error) -> {
|
||||||
|
if (error != null) {
|
||||||
|
ErrorUtils.respondInternalError(ctx, error);
|
||||||
|
} else {
|
||||||
|
APIv3.respondJson(ctx, 200, chatFilterEntry);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
APIv3.respondJson(ctx, 200, chatFilterEntry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,4 @@
|
|||||||
|
package net.frozenorb.apiv3.route.chatFilter;
|
||||||
|
|
||||||
|
public class PUTChatFilterId {
|
||||||
|
}
|
@ -1,16 +0,0 @@
|
|||||||
package net.frozenorb.apiv3.route.chatFilterList;
|
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableList;
|
|
||||||
import io.vertx.core.Handler;
|
|
||||||
import io.vertx.ext.web.RoutingContext;
|
|
||||||
import net.frozenorb.apiv3.APIv3;
|
|
||||||
|
|
||||||
public final class GETChatFilter implements Handler<RoutingContext> {
|
|
||||||
|
|
||||||
public void handle(RoutingContext ctx) {
|
|
||||||
// TODO
|
|
||||||
// WARNING: THIS IS REGISTERED ASYNC SO DONT MESS IT UP
|
|
||||||
APIv3.respondJson(ctx, 200, ImmutableList.of());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user