Part 1 of the big "make this closer to a RESTful api" commit
This commit is contained in:
parent
217683407e
commit
8ade7066f9
@ -27,40 +27,37 @@ import io.vertx.ext.web.RoutingContext;
|
|||||||
import io.vertx.ext.web.handler.BodyHandler;
|
import io.vertx.ext.web.handler.BodyHandler;
|
||||||
import io.vertx.ext.web.handler.LoggerFormat;
|
import io.vertx.ext.web.handler.LoggerFormat;
|
||||||
import io.vertx.ext.web.handler.LoggerHandler;
|
import io.vertx.ext.web.handler.LoggerHandler;
|
||||||
|
import io.vertx.ext.web.handler.TimeoutHandler;
|
||||||
import io.vertx.redis.RedisClient;
|
import io.vertx.redis.RedisClient;
|
||||||
import io.vertx.redis.RedisOptions;
|
import io.vertx.redis.RedisOptions;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import net.frozenorb.apiv3.handler.ActorAttributeHandler;
|
import net.frozenorb.apiv3.handler.ActorAttributeHandler;
|
||||||
import net.frozenorb.apiv3.handler.AuthorizationHandler;
|
import net.frozenorb.apiv3.handler.AuthorizationHandler;
|
||||||
import net.frozenorb.apiv3.handler.LoaderIoHandler;
|
import net.frozenorb.apiv3.route.GETDumps;
|
||||||
import net.frozenorb.apiv3.route.GETDump;
|
|
||||||
import net.frozenorb.apiv3.route.GETWhoAmI;
|
import net.frozenorb.apiv3.route.GETWhoAmI;
|
||||||
import net.frozenorb.apiv3.route.POSTMetrics;
|
|
||||||
import net.frozenorb.apiv3.route.announcements.GETAnnouncements;
|
|
||||||
import net.frozenorb.apiv3.route.announcements.PUTAnnouncements;
|
|
||||||
import net.frozenorb.apiv3.route.auditLog.GETAuditLog;
|
import net.frozenorb.apiv3.route.auditLog.GETAuditLog;
|
||||||
import net.frozenorb.apiv3.route.auditLog.POSTUserAuditLogEntry;
|
import net.frozenorb.apiv3.route.auditLog.POSTAuditLog;
|
||||||
import net.frozenorb.apiv3.route.chatFilterList.GETChatFilterList;
|
import net.frozenorb.apiv3.route.chatFilterList.GETChatFilter;
|
||||||
import net.frozenorb.apiv3.route.emailToken.GETEmailTokenOwner;
|
import net.frozenorb.apiv3.route.emailToken.GETEmailTokensOwner;
|
||||||
import net.frozenorb.apiv3.route.emailToken.POSTEmailTokenConfirm;
|
import net.frozenorb.apiv3.route.emailToken.POSTEmailTokensConfirm;
|
||||||
import net.frozenorb.apiv3.route.grants.*;
|
import net.frozenorb.apiv3.route.grants.*;
|
||||||
import net.frozenorb.apiv3.route.ipBans.*;
|
import net.frozenorb.apiv3.route.ipBans.*;
|
||||||
import net.frozenorb.apiv3.route.ipIntel.GETIpIntel;
|
import net.frozenorb.apiv3.route.ipIntel.GETIpIntel;
|
||||||
import net.frozenorb.apiv3.route.ipLog.GETUserIpLog;
|
import net.frozenorb.apiv3.route.ipLog.GETIpLog;
|
||||||
import net.frozenorb.apiv3.route.notificationTemplates.DELETENotificationTemplate;
|
import net.frozenorb.apiv3.route.notificationTemplates.DELETENotificationTemplatesId;
|
||||||
import net.frozenorb.apiv3.route.notificationTemplates.GETNotificationTemplate;
|
import net.frozenorb.apiv3.route.notificationTemplates.GETNotificationTemplatesId;
|
||||||
import net.frozenorb.apiv3.route.notificationTemplates.GETNotificationTemplates;
|
import net.frozenorb.apiv3.route.notificationTemplates.GETNotificationTemplates;
|
||||||
import net.frozenorb.apiv3.route.notificationTemplates.POSTNotificationTemplate;
|
import net.frozenorb.apiv3.route.notificationTemplates.POSTNotificationTemplates;
|
||||||
import net.frozenorb.apiv3.route.punishments.*;
|
import net.frozenorb.apiv3.route.punishments.*;
|
||||||
import net.frozenorb.apiv3.route.ranks.DELETERank;
|
import net.frozenorb.apiv3.route.ranks.DELETERanksId;
|
||||||
import net.frozenorb.apiv3.route.ranks.GETRank;
|
import net.frozenorb.apiv3.route.ranks.GETRanksId;
|
||||||
import net.frozenorb.apiv3.route.ranks.GETRanks;
|
import net.frozenorb.apiv3.route.ranks.GETRanks;
|
||||||
import net.frozenorb.apiv3.route.ranks.POSTRank;
|
import net.frozenorb.apiv3.route.ranks.POSTRanks;
|
||||||
import net.frozenorb.apiv3.route.serverGroups.DELETEServerGroup;
|
import net.frozenorb.apiv3.route.serverGroups.DELETEServerGroupsId;
|
||||||
import net.frozenorb.apiv3.route.serverGroups.GETServerGroup;
|
import net.frozenorb.apiv3.route.serverGroups.GETServerGroupsId;
|
||||||
import net.frozenorb.apiv3.route.serverGroups.GETServerGroups;
|
import net.frozenorb.apiv3.route.serverGroups.GETServerGroups;
|
||||||
import net.frozenorb.apiv3.route.serverGroups.POSTServerGroup;
|
import net.frozenorb.apiv3.route.serverGroups.POSTServerGroups;
|
||||||
import net.frozenorb.apiv3.route.servers.*;
|
import net.frozenorb.apiv3.route.servers.*;
|
||||||
import net.frozenorb.apiv3.route.users.*;
|
import net.frozenorb.apiv3.route.users.*;
|
||||||
import net.frozenorb.apiv3.serialization.gson.FollowAnnotationExclusionStrategy;
|
import net.frozenorb.apiv3.serialization.gson.FollowAnnotationExclusionStrategy;
|
||||||
@ -75,18 +72,14 @@ import org.bson.Document;
|
|||||||
import org.bson.codecs.BsonValueCodecProvider;
|
import org.bson.codecs.BsonValueCodecProvider;
|
||||||
import org.bson.codecs.DocumentCodecProvider;
|
import org.bson.codecs.DocumentCodecProvider;
|
||||||
import org.bson.codecs.ValueCodecProvider;
|
import org.bson.codecs.ValueCodecProvider;
|
||||||
import org.bson.codecs.configuration.CodecProvider;
|
|
||||||
import org.bson.codecs.configuration.CodecRegistries;
|
import org.bson.codecs.configuration.CodecRegistries;
|
||||||
import org.bson.codecs.configuration.CodecRegistry;
|
|
||||||
|
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.List;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.Properties;
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public final class APIv3 extends AbstractVerticle {
|
public final class APIv3 extends AbstractVerticle {
|
||||||
@ -144,7 +137,13 @@ public final class APIv3 extends AbstractVerticle {
|
|||||||
|
|
||||||
MongoClient mongoClient = MongoClients.create(MongoClientSettings
|
MongoClient mongoClient = MongoClients.create(MongoClientSettings
|
||||||
.builder()
|
.builder()
|
||||||
.codecRegistry(createCodecRegistry())
|
.codecRegistry(CodecRegistries.fromProviders(ImmutableList.of(
|
||||||
|
new UuidCodecProvider(), // MHQ, fixes uuid serialization
|
||||||
|
new ValueCodecProvider(),
|
||||||
|
new DocumentCodecProvider(),
|
||||||
|
new BsonValueCodecProvider(),
|
||||||
|
new JacksonCodecProvider(createMongoJacksonMapper()) // Jackson codec, provides serialization/deserialization
|
||||||
|
)))
|
||||||
.credentialList(credentials)
|
.credentialList(credentials)
|
||||||
.clusterSettings(ClusterSettings.builder()
|
.clusterSettings(ClusterSettings.builder()
|
||||||
.applyConnectionString(connectionString)
|
.applyConnectionString(connectionString)
|
||||||
@ -187,34 +186,21 @@ public final class APIv3 extends AbstractVerticle {
|
|||||||
), (a, b) -> {});
|
), (a, b) -> {});
|
||||||
}
|
}
|
||||||
|
|
||||||
private CodecRegistry createCodecRegistry() {
|
private ObjectMapper createMongoJacksonMapper() {
|
||||||
ObjectMapper objectMapper = ObjectMapperFactory.createObjectMapper();
|
ObjectMapper mongoJacksonMapper = ObjectMapperFactory.createObjectMapper();
|
||||||
SimpleModule simpleModule = new SimpleModule();
|
SimpleModule module = new SimpleModule();
|
||||||
|
|
||||||
simpleModule.addSerializer(Instant.class, new InstantJsonSerializer());
|
module.addSerializer(Instant.class, new InstantJsonSerializer());
|
||||||
simpleModule.addDeserializer(Instant.class, new InstantJsonDeserializer());
|
module.addDeserializer(Instant.class, new InstantJsonDeserializer());
|
||||||
simpleModule.addSerializer(UUID.class, new UuidJsonSerializer());
|
module.addSerializer(UUID.class, new UuidJsonSerializer());
|
||||||
simpleModule.addDeserializer(UUID.class, new UuidJsonDeserializer());
|
module.addDeserializer(UUID.class, new UuidJsonDeserializer());
|
||||||
|
|
||||||
objectMapper.registerModule(simpleModule);
|
mongoJacksonMapper.registerModule(module);
|
||||||
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.NONE);
|
mongoJacksonMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.NONE);
|
||||||
objectMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
|
mongoJacksonMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
|
||||||
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
|
mongoJacksonMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
|
||||||
|
|
||||||
List<CodecProvider> providers = new ArrayList<>();
|
return mongoJacksonMapper;
|
||||||
|
|
||||||
// Our fixed uuid codec
|
|
||||||
providers.add(new UuidCodecProvider());
|
|
||||||
|
|
||||||
// Normal providers
|
|
||||||
providers.add(new ValueCodecProvider());
|
|
||||||
providers.add(new DocumentCodecProvider());
|
|
||||||
providers.add(new BsonValueCodecProvider());
|
|
||||||
|
|
||||||
// Jackson parser codec
|
|
||||||
providers.add(new JacksonCodecProvider(objectMapper));
|
|
||||||
|
|
||||||
return CodecRegistries.fromProviders(providers);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setupRedis() {
|
private void setupRedis() {
|
||||||
@ -235,99 +221,95 @@ public final class APIv3 extends AbstractVerticle {
|
|||||||
|
|
||||||
// TODO: blockingHandler -> handler
|
// TODO: blockingHandler -> handler
|
||||||
private void setupHttpServer() {
|
private void setupHttpServer() {
|
||||||
HttpServer webServer = vertx.createHttpServer();
|
HttpServer webServer = vertx.createHttpServer(
|
||||||
Router mainRouter = Router.router(vertx);
|
new HttpServerOptions()
|
||||||
|
//.setSsl(true)
|
||||||
|
.setCompressionSupported(true)
|
||||||
|
);
|
||||||
|
|
||||||
mainRouter.route().handler(new LoaderIoHandler());
|
Router http = Router.router(vertx);
|
||||||
mainRouter.route().handler(new ActorAttributeHandler());
|
|
||||||
mainRouter.route().handler(new AuthorizationHandler());
|
http.route().handler(LoggerHandler.create(LoggerFormat.TINY));
|
||||||
mainRouter.route().handler(LoggerHandler.create(LoggerFormat.TINY));
|
http.route().handler(TimeoutHandler.create(TimeUnit.SECONDS.toMillis(5)));
|
||||||
mainRouter.route().method(HttpMethod.PUT).method(HttpMethod.POST).handler(BodyHandler.create());
|
http.route().method(HttpMethod.PUT).method(HttpMethod.POST).handler(BodyHandler.create());
|
||||||
|
http.route().handler(new ActorAttributeHandler());
|
||||||
|
http.route().handler(new AuthorizationHandler());
|
||||||
|
http.exceptionHandler(Throwable::printStackTrace); // TODO: BUGSNAG
|
||||||
|
|
||||||
// TODO: The commented out routes
|
// TODO: The commented out routes
|
||||||
|
|
||||||
mainRouter.get("/announcements/:id").handler(new GETAnnouncements());
|
http.get("/auditLog").handler(new GETAuditLog());
|
||||||
mainRouter.put("/announcements/:id").handler(new PUTAnnouncements());
|
http.post("/auditLog").handler(new POSTAuditLog());
|
||||||
|
|
||||||
mainRouter.get("/auditLog").handler(new GETAuditLog());
|
http.get("/chatFilter").handler(new GETChatFilter());
|
||||||
mainRouter.post("/user/:id/auditLogEntry").handler(new POSTUserAuditLogEntry());
|
|
||||||
|
|
||||||
mainRouter.get("/emailToken/:emailToken/owner").blockingHandler(new GETEmailTokenOwner(), false);
|
http.get("/emailTokens/:emailToken/owner").blockingHandler(new GETEmailTokensOwner(), false);
|
||||||
mainRouter.post("/emailToken/:emailToken/confirm").blockingHandler(new POSTEmailTokenConfirm(), false);
|
http.post("/emailTokens/:emailToken/confirm").blockingHandler(new POSTEmailTokensConfirm(), false);
|
||||||
|
|
||||||
mainRouter.get("/chatFilterList").handler(new GETChatFilterList());
|
http.get("/grants/:id").handler(new GETGrantsId());
|
||||||
|
http.get("/grants").handler(new GETGrants());
|
||||||
|
http.post("/grants").blockingHandler(new POSTGrants(), false);
|
||||||
|
http.delete("/grants/:id").blockingHandler(new DELETEGrantsId(), false);
|
||||||
|
|
||||||
mainRouter.get("/grant/:id").handler(new GETGrant());
|
http.get("/ipBans/:id").handler(new GETIpBan());
|
||||||
mainRouter.get("/grants").handler(new GETGrants());
|
http.get("/ipBans").handler(new GETIpBans());
|
||||||
mainRouter.get("/user/:id/grants").handler(new GETUserGrants());
|
http.post("/ipBans").blockingHandler(new POSTIpBans(), false);
|
||||||
mainRouter.post("/user/:id/grant").blockingHandler(new POSTUserGrant(), false);
|
http.delete("/ipBans/:id").blockingHandler(new DELETEIpBan(), false);
|
||||||
mainRouter.delete("/grant/:id").blockingHandler(new DELETEGrant(), false);
|
|
||||||
|
|
||||||
mainRouter.get("/ipBan/:id").handler(new GETIpBan());
|
http.get("/ipIntel").handler(new GETIpIntel());
|
||||||
mainRouter.get("/ipBans").handler(new GETIpBans());
|
|
||||||
mainRouter.get("/ip/:id/ipBans").handler(new GETIpIpBans());
|
|
||||||
mainRouter.post("/ip/:id/ipBan").blockingHandler(new POSTIpIpBan(), false);
|
|
||||||
mainRouter.delete("/ipBan/:id").blockingHandler(new DELETEIpBan(), false);
|
|
||||||
|
|
||||||
mainRouter.get("/ip/:id/intel").handler(new GETIpIntel());
|
http.get("/ipLog").handler(new GETIpLog());
|
||||||
|
|
||||||
mainRouter.get("/user/:id/ipLog").handler(new GETUserIpLog());
|
http.get("/notificationTemplates/:id").handler(new GETNotificationTemplatesId());
|
||||||
|
http.get("/notificationTemplates").handler(new GETNotificationTemplates());
|
||||||
|
http.post("/notificationTemplates").blockingHandler(new POSTNotificationTemplates(), false);
|
||||||
|
//http.put("/notificationTemplates/:id").blockingHandler(new PUTNotificationTemplates(), false);
|
||||||
|
http.delete("/notificationTemplates/:id").blockingHandler(new DELETENotificationTemplatesId(), false);
|
||||||
|
|
||||||
mainRouter.get("/notificationTemplate/:id").handler(new GETNotificationTemplate());
|
http.get("/punishments/:id").handler(new GETPunishmentsId());
|
||||||
mainRouter.get("/notificationTemplates").handler(new GETNotificationTemplates());
|
http.get("/punishments").handler(new GETPunishments());
|
||||||
mainRouter.post("/notificationTemplate").blockingHandler(new POSTNotificationTemplate(), false);
|
http.post("/punishments").blockingHandler(new POSTUserPunish(), false);
|
||||||
//mainRouter.put("/notificationTemplate/:id").blockingHandler(new PUTNotificationTemplate(), false);
|
http.delete("/punishments/:id").blockingHandler(new DELETEPunishments(), false);
|
||||||
mainRouter.delete("/notificationTemplate/:id").blockingHandler(new DELETENotificationTemplate(), false);
|
http.delete("/user/:id/activePunishment").blockingHandler(new DELETEUserActivePunishment(), false);
|
||||||
|
|
||||||
mainRouter.get("/punishment/:id").handler(new GETPunishment());
|
http.get("/ranks/:id").handler(new GETRanksId());
|
||||||
mainRouter.get("/punishments").handler(new GETPunishments());
|
http.get("/ranks").handler(new GETRanks());
|
||||||
mainRouter.get("/user/:id/punishments").handler(new GETUserPunishments());
|
http.post("/ranks").blockingHandler(new POSTRanks(), false);
|
||||||
mainRouter.post("/user/:id/punish").blockingHandler(new POSTUserPunish(), false);
|
//http.put("/ranks/:id").blockingHandler(new PUTRank(), false);
|
||||||
mainRouter.delete("/punishment/:id").blockingHandler(new DELETEPunishment(), false);
|
http.delete("/ranks/:id").blockingHandler(new DELETERanksId(), false);
|
||||||
mainRouter.delete("/user/:id/punishment").blockingHandler(new DELETEUserPunishment(), false);
|
|
||||||
|
|
||||||
mainRouter.get("/rank/:id").handler(new GETRank());
|
http.get("/serverGroups/:id").handler(new GETServerGroupsId());
|
||||||
mainRouter.get("/ranks").handler(new GETRanks());
|
http.get("/serverGroups").handler(new GETServerGroups());
|
||||||
mainRouter.post("/rank").blockingHandler(new POSTRank(), false);
|
http.post("/serverGroups").blockingHandler(new POSTServerGroups(), false);
|
||||||
//mainRouter.put("/rank/:id").blockingHandler(new PUTRank(), false);
|
//http.put("/serverGroups/:id").blockingHandler(new PUTServerGroup(), false);
|
||||||
mainRouter.delete("/rank/:id").blockingHandler(new DELETERank(), false);
|
http.delete("/serverGroups/:id").blockingHandler(new DELETEServerGroupsId(), false);
|
||||||
|
|
||||||
mainRouter.get("/serverGroup/:id").handler(new GETServerGroup());
|
http.get("/servers/:id").handler(new GETServersId());
|
||||||
mainRouter.get("/serverGroups").handler(new GETServerGroups());
|
http.get("/servers").handler(new GETServers());
|
||||||
mainRouter.post("/serverGroup").blockingHandler(new POSTServerGroup(), false);
|
http.post("/servers/heartbeat").handler(new POSTServersHeartbeat());
|
||||||
//mainRouter.put("/serverGroup/:id").blockingHandler(new PUTServerGroup(), false);
|
http.post("/servers").blockingHandler(new POSTServers(), false);
|
||||||
mainRouter.delete("/serverGroup/:id").blockingHandler(new DELETEServerGroup(), false);
|
//http.put("/servers/:id").blockingHandler(new PUTServer(), false);
|
||||||
|
http.delete("/servers/:id").blockingHandler(new DELETEServersId(), false);
|
||||||
|
|
||||||
mainRouter.get("/server/:id").handler(new GETServer());
|
http.get("/staff").blockingHandler(new GETStaff(), false);
|
||||||
mainRouter.get("/servers").handler(new GETServers());
|
http.get("/users/:id").handler(new GETUser());
|
||||||
mainRouter.post("/server/heartbeat").handler(new POSTServerHeartbeat());
|
http.get("/users/:id/details").blockingHandler(new GETUserDetails(), false);
|
||||||
mainRouter.post("/server").blockingHandler(new POSTServer(), false);
|
http.get("/users/:id/permissions").blockingHandler(new GETUserPermissions(), false);
|
||||||
//mainRouter.put("/server/:id").blockingHandler(new PUTServer(), false);
|
http.get("/users/:id/requiresTOTP").handler(new GETUserRequiresTOTP());
|
||||||
mainRouter.delete("/server/:id").blockingHandler(new DELETEServer(), false);
|
http.get("/users/:id/verifyPassword").blockingHandler(new GETUserVerifyPassword(), false);
|
||||||
|
http.post("/users/:id/changePassword").blockingHandler(new POSTUserChangePassword(), false);
|
||||||
|
http.post("/users/:id/leave").handler(new POSTUserLeave());
|
||||||
|
http.post("/users/:id/login").blockingHandler(new POSTUserLogin());
|
||||||
|
http.post("/users/:id/notify").blockingHandler(new POSTUserNotify(), false);
|
||||||
|
http.post("/users/:id/register").blockingHandler(new POSTUserRegister(), false);
|
||||||
|
http.post("/users/:id/setupTOTP").blockingHandler(new POSTUserSetupTOTP(), false);
|
||||||
|
http.post("/users/:id/verifyTOTP").blockingHandler(new POSTUserVerifyTOTP(), false);
|
||||||
|
|
||||||
mainRouter.get("/staff").blockingHandler(new GETStaff(), false);
|
http.get("/dumps/:type").handler(new GETDumps());
|
||||||
mainRouter.get("/user/:id").handler(new GETUser());
|
http.get("/whoami").handler(new GETWhoAmI());
|
||||||
mainRouter.get("/user/:id/details").blockingHandler(new GETUserDetails(), false);
|
|
||||||
mainRouter.get("/user/:id/meta/:serverGroup").blockingHandler(new GETUserMeta(), false);
|
|
||||||
mainRouter.get("/user/:id/permissions").blockingHandler(new GETUserPermissions(), false);
|
|
||||||
mainRouter.get("/user/:id/requiresTOTP").handler(new GETUserRequiresTOTP());
|
|
||||||
mainRouter.get("/user/:id/verifyPassword").blockingHandler(new GETUserVerifyPassword(), false);
|
|
||||||
mainRouter.post("/user/:id/changePassword").blockingHandler(new POSTUserChangePassword(), false);
|
|
||||||
mainRouter.post("/user/:id/leave").handler(new POSTUserLeave());
|
|
||||||
mainRouter.post("/user/:id/login").blockingHandler(new POSTUserLogin());
|
|
||||||
mainRouter.post("/user/:id/notify").blockingHandler(new POSTUserNotify(), false);
|
|
||||||
mainRouter.post("/user/:id/register").blockingHandler(new POSTUserRegister(), false);
|
|
||||||
mainRouter.post("/user/:id/setupTOTP").blockingHandler(new POSTUserSetupTOTP(), false);
|
|
||||||
mainRouter.post("/user/:id/verifyTOTP").blockingHandler(new POSTUserVerifyTOTP(), false);
|
|
||||||
mainRouter.put("/user/:id/meta/:serverGroup").blockingHandler(new PUTUserMeta(), false);
|
|
||||||
mainRouter.delete("/user/:id/meta/:serverGroup").blockingHandler(new DELETEUserMeta(), false);
|
|
||||||
|
|
||||||
mainRouter.get("/dump/:type").handler(new GETDump());
|
|
||||||
mainRouter.get("/whoami").handler(new GETWhoAmI());
|
|
||||||
mainRouter.post("/metrics").handler(new POSTMetrics());
|
|
||||||
|
|
||||||
int port = Integer.parseInt(config.getProperty("http.port"));
|
int port = Integer.parseInt(config.getProperty("http.port"));
|
||||||
webServer.requestHandler(mainRouter::accept).listen(port);
|
webServer.requestHandler(http::accept).listen(port);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setupHttpClient() {
|
private void setupHttpClient() {
|
||||||
|
@ -1,19 +0,0 @@
|
|||||||
package net.frozenorb.apiv3.handler;
|
|
||||||
|
|
||||||
import io.vertx.core.Handler;
|
|
||||||
import io.vertx.ext.web.RoutingContext;
|
|
||||||
|
|
||||||
public final class LoaderIoHandler implements Handler<RoutingContext> {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void handle(RoutingContext ctx) {
|
|
||||||
String path = ctx.request().path().replace("/", "");
|
|
||||||
|
|
||||||
if (path.equals("loaderio-1c81aa574f79c573e7220e15e30a96aa")) {
|
|
||||||
ctx.response().end(path);
|
|
||||||
} else {
|
|
||||||
ctx.next();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -34,16 +34,12 @@ public final class AuditLogEntry {
|
|||||||
@Getter private AuditLogActionType type;
|
@Getter private AuditLogActionType type;
|
||||||
@Getter private Map<String, Object> metadata;
|
@Getter private Map<String, Object> metadata;
|
||||||
|
|
||||||
public static List<AuditLogEntry> findByUserSync(UUID user) {
|
|
||||||
return SyncUtils.blockMulti(auditLogCollection.find(new Document("user", user)));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void findAllPaginated(int skip, int pageSize, SingleResultCallback<List<AuditLogEntry>> callback) {
|
public static void findAllPaginated(int skip, int pageSize, SingleResultCallback<List<AuditLogEntry>> callback) {
|
||||||
auditLogCollection.find().sort(new Document("performedAt", -1)).skip(skip).limit(pageSize).into(new ArrayList<>(), callback);
|
auditLogCollection.find().sort(new Document("performedAt", -1)).skip(skip).limit(pageSize).into(new ArrayList<>(), callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void findByUser(UUID user, SingleResultCallback<List<AuditLogEntry>> callback) {
|
public static void find(Document query, SingleResultCallback<List<AuditLogEntry>> callback) {
|
||||||
auditLogCollection.find(new Document("user", user)).into(new ArrayList<>(), callback);
|
auditLogCollection.find(query).into(new ArrayList<>(), callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
public AuditLogEntry() {} // For Jackson
|
public AuditLogEntry() {} // For Jackson
|
||||||
|
@ -29,7 +29,7 @@ public final class ServerGroup {
|
|||||||
|
|
||||||
@Getter @Id private String id;
|
@Getter @Id private String id;
|
||||||
@Getter private String image;
|
@Getter private String image;
|
||||||
@Getter @Setter @ExcludeFromReplies private Set<String> announcements;
|
@Getter @Setter private Set<String> announcements;
|
||||||
@Getter @Setter @ExcludeFromReplies private Map<String, List<String>> permissions;
|
@Getter @Setter @ExcludeFromReplies private Map<String, List<String>> permissions;
|
||||||
|
|
||||||
// make this and other stuff async
|
// make this and other stuff async
|
||||||
|
@ -40,8 +40,8 @@ public final class User {
|
|||||||
@Getter @ExcludeFromReplies @Setter private String totpSecret;
|
@Getter @ExcludeFromReplies @Setter private String totpSecret;
|
||||||
@Getter @ExcludeFromReplies private String password;
|
@Getter @ExcludeFromReplies private String password;
|
||||||
@Getter private String email;
|
@Getter private String email;
|
||||||
@Getter @ExcludeFromReplies private Instant registeredAt;
|
@Getter private Instant registeredAt;
|
||||||
@Getter private String pendingEmail;
|
@Getter @ExcludeFromReplies private String pendingEmail;
|
||||||
@Getter @ExcludeFromReplies private String pendingEmailToken;
|
@Getter @ExcludeFromReplies private String pendingEmailToken;
|
||||||
@Getter @ExcludeFromReplies private Instant pendingEmailTokenSetAt;
|
@Getter @ExcludeFromReplies private Instant pendingEmailTokenSetAt;
|
||||||
@Getter private String phoneNumber;
|
@Getter private String phoneNumber;
|
||||||
@ -238,6 +238,7 @@ public final class User {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: CLEAN
|
||||||
public enum RequiresTotpResult {
|
public enum RequiresTotpResult {
|
||||||
|
|
||||||
NOT_REQUIRED_NOT_SET,
|
NOT_REQUIRED_NOT_SET,
|
||||||
|
@ -1,65 +0,0 @@
|
|||||||
package net.frozenorb.apiv3.model;
|
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableMap;
|
|
||||||
import com.mongodb.async.client.MongoCollection;
|
|
||||||
import com.mongodb.client.result.DeleteResult;
|
|
||||||
import com.mongodb.client.result.UpdateResult;
|
|
||||||
import fr.javatic.mongo.jacksonCodec.Entity;
|
|
||||||
import fr.javatic.mongo.jacksonCodec.objectId.Id;
|
|
||||||
import lombok.Getter;
|
|
||||||
import lombok.Setter;
|
|
||||||
import net.frozenorb.apiv3.APIv3;
|
|
||||||
import net.frozenorb.apiv3.unsorted.BlockingCallback;
|
|
||||||
import net.frozenorb.apiv3.util.SyncUtils;
|
|
||||||
import org.bson.Document;
|
|
||||||
import org.bson.types.ObjectId;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
@Entity
|
|
||||||
public final class UserMetaEntry {
|
|
||||||
|
|
||||||
private static final MongoCollection<UserMetaEntry> userMetaCollection = APIv3.getDatabase().getCollection("userMeta", UserMetaEntry.class);
|
|
||||||
|
|
||||||
@Getter @Id private String id;
|
|
||||||
@Getter private UUID user;
|
|
||||||
@Getter private String serverGroup;
|
|
||||||
@Getter @Setter private Map<String, Object> data;
|
|
||||||
|
|
||||||
public static UserMetaEntry findByUserAndGroupSync(User user, ServerGroup serverGroup) {
|
|
||||||
return findByUserAndGroupSync(user.getId(), serverGroup);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static UserMetaEntry findByUserAndGroupSync(UUID user, ServerGroup serverGroup) {
|
|
||||||
return SyncUtils.blockOne(userMetaCollection.find(new Document("user", user).append("serverGroup", serverGroup.getId())));
|
|
||||||
}
|
|
||||||
|
|
||||||
public UserMetaEntry() {} // For Jackson
|
|
||||||
|
|
||||||
public UserMetaEntry(User user, ServerGroup serverGroup, Map<String, Object> data) {
|
|
||||||
this.id = new ObjectId().toString();
|
|
||||||
this.user = user.getId();
|
|
||||||
this.serverGroup = serverGroup.getId();
|
|
||||||
this.data = ImmutableMap.copyOf(data);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void insert() {
|
|
||||||
BlockingCallback<Void> callback = new BlockingCallback<>();
|
|
||||||
userMetaCollection.insertOne(this, callback);
|
|
||||||
callback.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void save() {
|
|
||||||
BlockingCallback<UpdateResult> callback = new BlockingCallback<>();
|
|
||||||
userMetaCollection.replaceOne(new Document("_id", id), this, callback);
|
|
||||||
callback.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void delete() {
|
|
||||||
BlockingCallback<DeleteResult> callback = new BlockingCallback<>();
|
|
||||||
userMetaCollection.deleteOne(new Document("_id", id), callback);
|
|
||||||
callback.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -11,13 +11,13 @@ import net.frozenorb.apiv3.util.ErrorUtils;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
public final class GETDump implements Handler<RoutingContext> {
|
public final class GETDumps implements Handler<RoutingContext> {
|
||||||
|
|
||||||
private List<UUID> banCache = new ArrayList<>();
|
private List<UUID> banCache = new ArrayList<>();
|
||||||
private List<UUID> blacklistCache = new ArrayList<>();
|
private List<UUID> blacklistCache = new ArrayList<>();
|
||||||
private Map<String, List<UUID>> grantCache = new HashMap<>();
|
private Map<String, List<UUID>> grantCache = new HashMap<>();
|
||||||
|
|
||||||
public GETDump() {
|
public GETDumps() {
|
||||||
// TODO: Use vertx scheduler
|
// TODO: Use vertx scheduler
|
||||||
Thread dumpUpdater = new Thread() {
|
Thread dumpUpdater = new Thread() {
|
||||||
|
|
||||||
@ -45,8 +45,8 @@ public final class GETDump implements Handler<RoutingContext> {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
GETDump.this.banCache = banCache;
|
GETDumps.this.banCache = banCache;
|
||||||
GETDump.this.blacklistCache = blacklistCache;
|
GETDumps.this.blacklistCache = blacklistCache;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tick == 0 || tick % 2 == 0) {
|
if (tick == 0 || tick % 2 == 0) {
|
||||||
@ -65,7 +65,7 @@ public final class GETDump implements Handler<RoutingContext> {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
GETDump.this.grantCache = grantCache;
|
GETDumps.this.grantCache = grantCache;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
@ -1,14 +0,0 @@
|
|||||||
package net.frozenorb.apiv3.route;
|
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableMap;
|
|
||||||
import io.vertx.core.Handler;
|
|
||||||
import io.vertx.ext.web.RoutingContext;
|
|
||||||
import net.frozenorb.apiv3.APIv3;
|
|
||||||
|
|
||||||
public final class POSTMetrics implements Handler<RoutingContext> {
|
|
||||||
|
|
||||||
public void handle(RoutingContext ctx) {
|
|
||||||
APIv3.respondJson(ctx, ImmutableMap.of());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,21 +0,0 @@
|
|||||||
package net.frozenorb.apiv3.route.announcements;
|
|
||||||
|
|
||||||
import io.vertx.core.Handler;
|
|
||||||
import io.vertx.ext.web.RoutingContext;
|
|
||||||
import net.frozenorb.apiv3.APIv3;
|
|
||||||
import net.frozenorb.apiv3.model.ServerGroup;
|
|
||||||
import net.frozenorb.apiv3.util.ErrorUtils;
|
|
||||||
|
|
||||||
public final class GETAnnouncements implements Handler<RoutingContext> {
|
|
||||||
|
|
||||||
public void handle(RoutingContext ctx) {
|
|
||||||
ServerGroup serverGroup = ServerGroup.findById(ctx.request().getParam("id"));
|
|
||||||
|
|
||||||
if (serverGroup == null) {
|
|
||||||
ErrorUtils.respondNotFound(ctx, "Server group", ctx.request().getParam("id"));
|
|
||||||
} else {
|
|
||||||
APIv3.respondJson(ctx, serverGroup.getAnnouncements());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,37 +0,0 @@
|
|||||||
package net.frozenorb.apiv3.route.announcements;
|
|
||||||
|
|
||||||
import io.vertx.core.Handler;
|
|
||||||
import io.vertx.ext.web.RoutingContext;
|
|
||||||
import net.frozenorb.apiv3.APIv3;
|
|
||||||
import net.frozenorb.apiv3.model.ServerGroup;
|
|
||||||
import net.frozenorb.apiv3.util.ErrorUtils;
|
|
||||||
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
public final class PUTAnnouncements implements Handler<RoutingContext> {
|
|
||||||
|
|
||||||
public void handle(RoutingContext ctx) {
|
|
||||||
ServerGroup serverGroup = ServerGroup.findById(ctx.request().getParam("id"));
|
|
||||||
|
|
||||||
if (serverGroup == null) {
|
|
||||||
ErrorUtils.respondNotFound(ctx, "Server group", ctx.request().getParam("id"));
|
|
||||||
} else {
|
|
||||||
Set<String> announcements = new HashSet<>();
|
|
||||||
|
|
||||||
for (Object announcement : ctx.getBodyAsJsonArray()) {
|
|
||||||
announcements.add((String) announcement);
|
|
||||||
}
|
|
||||||
|
|
||||||
serverGroup.setAnnouncements(announcements);
|
|
||||||
serverGroup.save((ignored, error) -> {
|
|
||||||
if (error != null) {
|
|
||||||
ErrorUtils.respondInternalError(ctx, error);
|
|
||||||
} else {
|
|
||||||
APIv3.respondJson(ctx, serverGroup.getAnnouncements());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -10,7 +10,7 @@ import net.frozenorb.apiv3.util.ErrorUtils;
|
|||||||
import net.frozenorb.apiv3.util.IpUtils;
|
import net.frozenorb.apiv3.util.IpUtils;
|
||||||
import org.bson.Document;
|
import org.bson.Document;
|
||||||
|
|
||||||
public final class POSTUserAuditLogEntry implements Handler<RoutingContext> {
|
public final class POSTAuditLog implements Handler<RoutingContext> {
|
||||||
|
|
||||||
public void handle(RoutingContext ctx) {
|
public void handle(RoutingContext ctx) {
|
||||||
User.findById(ctx.request().getParam("id"), (user, error) -> {
|
User.findById(ctx.request().getParam("id"), (user, error) -> {
|
@ -5,7 +5,7 @@ import io.vertx.core.Handler;
|
|||||||
import io.vertx.ext.web.RoutingContext;
|
import io.vertx.ext.web.RoutingContext;
|
||||||
import net.frozenorb.apiv3.APIv3;
|
import net.frozenorb.apiv3.APIv3;
|
||||||
|
|
||||||
public final class GETChatFilterList implements Handler<RoutingContext> {
|
public final class GETChatFilter implements Handler<RoutingContext> {
|
||||||
|
|
||||||
public void handle(RoutingContext ctx) {
|
public void handle(RoutingContext ctx) {
|
||||||
// TODO
|
// TODO
|
@ -6,7 +6,7 @@ import net.frozenorb.apiv3.APIv3;
|
|||||||
import net.frozenorb.apiv3.model.User;
|
import net.frozenorb.apiv3.model.User;
|
||||||
import net.frozenorb.apiv3.util.ErrorUtils;
|
import net.frozenorb.apiv3.util.ErrorUtils;
|
||||||
|
|
||||||
public final class GETEmailTokenOwner implements Handler<RoutingContext> {
|
public final class GETEmailTokensOwner implements Handler<RoutingContext> {
|
||||||
|
|
||||||
public void handle(RoutingContext ctx) {
|
public void handle(RoutingContext ctx) {
|
||||||
User.findByEmailTokenSync(ctx.request().getParam("id"), (user, error) -> {
|
User.findByEmailTokenSync(ctx.request().getParam("id"), (user, error) -> {
|
@ -9,7 +9,7 @@ import net.frozenorb.apiv3.util.ErrorUtils;
|
|||||||
|
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
public final class POSTEmailTokenConfirm implements Handler<RoutingContext> {
|
public final class POSTEmailTokensConfirm implements Handler<RoutingContext> {
|
||||||
|
|
||||||
public void handle(RoutingContext ctx) {
|
public void handle(RoutingContext ctx) {
|
||||||
User user = User.findByEmailTokenSync(ctx.request().getParam("emailToken"));
|
User user = User.findByEmailTokenSync(ctx.request().getParam("emailToken"));
|
@ -12,7 +12,7 @@ import net.frozenorb.apiv3.model.User;
|
|||||||
import net.frozenorb.apiv3.unsorted.BlockingCallback;
|
import net.frozenorb.apiv3.unsorted.BlockingCallback;
|
||||||
import net.frozenorb.apiv3.util.ErrorUtils;
|
import net.frozenorb.apiv3.util.ErrorUtils;
|
||||||
|
|
||||||
public final class DELETEGrant implements Handler<RoutingContext> {
|
public final class DELETEGrantsId implements Handler<RoutingContext> {
|
||||||
|
|
||||||
public void handle(RoutingContext ctx) {
|
public void handle(RoutingContext ctx) {
|
||||||
Grant grant = Grant.findByIdSync(ctx.request().getParam("id"));
|
Grant grant = Grant.findByIdSync(ctx.request().getParam("id"));
|
@ -6,7 +6,7 @@ import net.frozenorb.apiv3.APIv3;
|
|||||||
import net.frozenorb.apiv3.model.Grant;
|
import net.frozenorb.apiv3.model.Grant;
|
||||||
import net.frozenorb.apiv3.util.ErrorUtils;
|
import net.frozenorb.apiv3.util.ErrorUtils;
|
||||||
|
|
||||||
public final class GETGrant implements Handler<RoutingContext> {
|
public final class GETGrantsId implements Handler<RoutingContext> {
|
||||||
|
|
||||||
public void handle(RoutingContext ctx) {
|
public void handle(RoutingContext ctx) {
|
||||||
Grant.findById(ctx.request().getParam("id"), (grant, error) -> {
|
Grant.findById(ctx.request().getParam("id"), (grant, error) -> {
|
@ -1,30 +0,0 @@
|
|||||||
package net.frozenorb.apiv3.route.grants;
|
|
||||||
|
|
||||||
import io.vertx.core.Handler;
|
|
||||||
import io.vertx.ext.web.RoutingContext;
|
|
||||||
import net.frozenorb.apiv3.APIv3;
|
|
||||||
import net.frozenorb.apiv3.model.Grant;
|
|
||||||
import net.frozenorb.apiv3.model.User;
|
|
||||||
import net.frozenorb.apiv3.util.ErrorUtils;
|
|
||||||
|
|
||||||
public final class GETUserGrants implements Handler<RoutingContext> {
|
|
||||||
|
|
||||||
public void handle(RoutingContext ctx) {
|
|
||||||
User.findById(ctx.request().getParam("id"), (user, error) -> {
|
|
||||||
if (error != null) {
|
|
||||||
ErrorUtils.respondInternalError(ctx, error);
|
|
||||||
} else if (user == null) {
|
|
||||||
ErrorUtils.respondNotFound(ctx, "User", ctx.request().getParam("id"));
|
|
||||||
} else {
|
|
||||||
Grant.findByUser(user, (grants, error2) -> {
|
|
||||||
if (error2 != null) {
|
|
||||||
ErrorUtils.respondInternalError(ctx, error2);
|
|
||||||
} else {
|
|
||||||
APIv3.respondJson(ctx, grants);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -13,7 +13,7 @@ import java.time.Instant;
|
|||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
public final class POSTUserGrant implements Handler<RoutingContext> {
|
public final class POSTGrants implements Handler<RoutingContext> {
|
||||||
|
|
||||||
public void handle(RoutingContext ctx) {
|
public void handle(RoutingContext ctx) {
|
||||||
User target = User.findByIdSync(ctx.request().getParam("id"));
|
User target = User.findByIdSync(ctx.request().getParam("id"));
|
@ -1,29 +0,0 @@
|
|||||||
package net.frozenorb.apiv3.route.ipBans;
|
|
||||||
|
|
||||||
import io.vertx.core.Handler;
|
|
||||||
import io.vertx.ext.web.RoutingContext;
|
|
||||||
import net.frozenorb.apiv3.APIv3;
|
|
||||||
import net.frozenorb.apiv3.model.IpBan;
|
|
||||||
import net.frozenorb.apiv3.util.ErrorUtils;
|
|
||||||
import net.frozenorb.apiv3.util.IpUtils;
|
|
||||||
|
|
||||||
public final class GETIpIpBans implements Handler<RoutingContext> {
|
|
||||||
|
|
||||||
public void handle(RoutingContext ctx) {
|
|
||||||
String userIp = ctx.request().getParam("id");
|
|
||||||
|
|
||||||
if (!IpUtils.isValidIp(userIp)) {
|
|
||||||
ErrorUtils.respondInvalidInput(ctx, "Ip address \"" + userIp + "\" is not valid.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
IpBan.findByIp(userIp, (ipBans, error) -> {
|
|
||||||
if (error != null) {
|
|
||||||
ErrorUtils.respondInternalError(ctx, error);
|
|
||||||
} else {
|
|
||||||
APIv3.respondJson(ctx, ipBans);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -10,7 +10,7 @@ import net.frozenorb.apiv3.util.IpUtils;
|
|||||||
|
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
|
|
||||||
public final class POSTIpIpBan implements Handler<RoutingContext> {
|
public final class POSTIpBans implements Handler<RoutingContext> {
|
||||||
|
|
||||||
public void handle(RoutingContext ctx) {
|
public void handle(RoutingContext ctx) {
|
||||||
String userIp = ctx.request().getParam("id");
|
String userIp = ctx.request().getParam("id");
|
@ -7,7 +7,7 @@ import net.frozenorb.apiv3.model.IpLogEntry;
|
|||||||
import net.frozenorb.apiv3.model.User;
|
import net.frozenorb.apiv3.model.User;
|
||||||
import net.frozenorb.apiv3.util.ErrorUtils;
|
import net.frozenorb.apiv3.util.ErrorUtils;
|
||||||
|
|
||||||
public final class GETUserIpLog implements Handler<RoutingContext> {
|
public final class GETIpLog implements Handler<RoutingContext> {
|
||||||
|
|
||||||
public void handle(RoutingContext ctx) {
|
public void handle(RoutingContext ctx) {
|
||||||
User.findById(ctx.request().getParam("id"), (user, error) -> {
|
User.findById(ctx.request().getParam("id"), (user, error) -> {
|
@ -6,7 +6,7 @@ import net.frozenorb.apiv3.APIv3;
|
|||||||
import net.frozenorb.apiv3.model.NotificationTemplate;
|
import net.frozenorb.apiv3.model.NotificationTemplate;
|
||||||
import net.frozenorb.apiv3.util.ErrorUtils;
|
import net.frozenorb.apiv3.util.ErrorUtils;
|
||||||
|
|
||||||
public final class DELETENotificationTemplate implements Handler<RoutingContext> {
|
public final class DELETENotificationTemplatesId implements Handler<RoutingContext> {
|
||||||
|
|
||||||
public void handle(RoutingContext ctx) {
|
public void handle(RoutingContext ctx) {
|
||||||
NotificationTemplate notificationTemplate = NotificationTemplate.findByIdSync(ctx.request().getParam("id"));
|
NotificationTemplate notificationTemplate = NotificationTemplate.findByIdSync(ctx.request().getParam("id"));
|
@ -6,7 +6,7 @@ import net.frozenorb.apiv3.APIv3;
|
|||||||
import net.frozenorb.apiv3.model.NotificationTemplate;
|
import net.frozenorb.apiv3.model.NotificationTemplate;
|
||||||
import net.frozenorb.apiv3.util.ErrorUtils;
|
import net.frozenorb.apiv3.util.ErrorUtils;
|
||||||
|
|
||||||
public final class GETNotificationTemplate implements Handler<RoutingContext> {
|
public final class GETNotificationTemplatesId implements Handler<RoutingContext> {
|
||||||
|
|
||||||
public void handle(RoutingContext ctx) {
|
public void handle(RoutingContext ctx) {
|
||||||
NotificationTemplate.findById(ctx.request().getParam("id"), (notificationTemplate, error) -> {
|
NotificationTemplate.findById(ctx.request().getParam("id"), (notificationTemplate, error) -> {
|
@ -5,7 +5,7 @@ import io.vertx.ext.web.RoutingContext;
|
|||||||
import net.frozenorb.apiv3.APIv3;
|
import net.frozenorb.apiv3.APIv3;
|
||||||
import net.frozenorb.apiv3.model.NotificationTemplate;
|
import net.frozenorb.apiv3.model.NotificationTemplate;
|
||||||
|
|
||||||
public final class POSTNotificationTemplate implements Handler<RoutingContext> {
|
public final class POSTNotificationTemplates implements Handler<RoutingContext> {
|
||||||
|
|
||||||
public void handle(RoutingContext ctx) {
|
public void handle(RoutingContext ctx) {
|
||||||
String id = ctx.request().getParam("id");
|
String id = ctx.request().getParam("id");
|
@ -12,7 +12,7 @@ import net.frozenorb.apiv3.model.User;
|
|||||||
import net.frozenorb.apiv3.unsorted.BlockingCallback;
|
import net.frozenorb.apiv3.unsorted.BlockingCallback;
|
||||||
import net.frozenorb.apiv3.util.ErrorUtils;
|
import net.frozenorb.apiv3.util.ErrorUtils;
|
||||||
|
|
||||||
public final class DELETEPunishment implements Handler<RoutingContext> {
|
public final class DELETEPunishments implements Handler<RoutingContext> {
|
||||||
|
|
||||||
public void handle(RoutingContext ctx) {
|
public void handle(RoutingContext ctx) {
|
||||||
Punishment punishment = Punishment.findByIdSync(ctx.request().getParam("id"));
|
Punishment punishment = Punishment.findByIdSync(ctx.request().getParam("id"));
|
@ -13,7 +13,7 @@ import net.frozenorb.apiv3.model.User;
|
|||||||
import net.frozenorb.apiv3.unsorted.BlockingCallback;
|
import net.frozenorb.apiv3.unsorted.BlockingCallback;
|
||||||
import net.frozenorb.apiv3.util.ErrorUtils;
|
import net.frozenorb.apiv3.util.ErrorUtils;
|
||||||
|
|
||||||
public final class DELETEUserPunishment implements Handler<RoutingContext> {
|
public final class DELETEUserActivePunishment implements Handler<RoutingContext> {
|
||||||
|
|
||||||
public void handle(RoutingContext ctx) {
|
public void handle(RoutingContext ctx) {
|
||||||
User target = User.findByIdSync(ctx.request().getParam("id"));
|
User target = User.findByIdSync(ctx.request().getParam("id"));
|
@ -6,7 +6,7 @@ import net.frozenorb.apiv3.APIv3;
|
|||||||
import net.frozenorb.apiv3.model.Punishment;
|
import net.frozenorb.apiv3.model.Punishment;
|
||||||
import net.frozenorb.apiv3.util.ErrorUtils;
|
import net.frozenorb.apiv3.util.ErrorUtils;
|
||||||
|
|
||||||
public final class GETPunishment implements Handler<RoutingContext> {
|
public final class GETPunishmentsId implements Handler<RoutingContext> {
|
||||||
|
|
||||||
public void handle(RoutingContext ctx) {
|
public void handle(RoutingContext ctx) {
|
||||||
Punishment.findById(ctx.request().getParam("id"), (punishment, error) -> {
|
Punishment.findById(ctx.request().getParam("id"), (punishment, error) -> {
|
@ -1,30 +0,0 @@
|
|||||||
package net.frozenorb.apiv3.route.punishments;
|
|
||||||
|
|
||||||
import io.vertx.core.Handler;
|
|
||||||
import io.vertx.ext.web.RoutingContext;
|
|
||||||
import net.frozenorb.apiv3.APIv3;
|
|
||||||
import net.frozenorb.apiv3.model.Punishment;
|
|
||||||
import net.frozenorb.apiv3.model.User;
|
|
||||||
import net.frozenorb.apiv3.util.ErrorUtils;
|
|
||||||
|
|
||||||
public final class GETUserPunishments implements Handler<RoutingContext> {
|
|
||||||
|
|
||||||
public void handle(RoutingContext ctx) {
|
|
||||||
User.findById(ctx.request().getParam("id"), (user, error) -> {
|
|
||||||
if (error != null) {
|
|
||||||
ErrorUtils.respondInternalError(ctx, error);
|
|
||||||
} else if (user == null) {
|
|
||||||
ErrorUtils.respondNotFound(ctx, "User", ctx.request().getParam("id"));
|
|
||||||
} else {
|
|
||||||
Punishment.findByUser(user, (punishments, error2) -> {
|
|
||||||
if (error2 != null) {
|
|
||||||
ErrorUtils.respondInternalError(ctx, error2);
|
|
||||||
} else {
|
|
||||||
APIv3.respondJson(ctx, punishments);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -6,7 +6,7 @@ import net.frozenorb.apiv3.APIv3;
|
|||||||
import net.frozenorb.apiv3.model.Rank;
|
import net.frozenorb.apiv3.model.Rank;
|
||||||
import net.frozenorb.apiv3.util.ErrorUtils;
|
import net.frozenorb.apiv3.util.ErrorUtils;
|
||||||
|
|
||||||
public final class DELETERank implements Handler<RoutingContext> {
|
public final class DELETERanksId implements Handler<RoutingContext> {
|
||||||
|
|
||||||
public void handle(RoutingContext ctx) {
|
public void handle(RoutingContext ctx) {
|
||||||
Rank rank = Rank.findById(ctx.request().getParam("id"));
|
Rank rank = Rank.findById(ctx.request().getParam("id"));
|
@ -5,7 +5,7 @@ import io.vertx.ext.web.RoutingContext;
|
|||||||
import net.frozenorb.apiv3.APIv3;
|
import net.frozenorb.apiv3.APIv3;
|
||||||
import net.frozenorb.apiv3.model.Rank;
|
import net.frozenorb.apiv3.model.Rank;
|
||||||
|
|
||||||
public final class GETRank implements Handler<RoutingContext> {
|
public final class GETRanksId implements Handler<RoutingContext> {
|
||||||
|
|
||||||
public void handle(RoutingContext ctx) {
|
public void handle(RoutingContext ctx) {
|
||||||
APIv3.respondJson(ctx, Rank.findById(ctx.request().getParam("id")));
|
APIv3.respondJson(ctx, Rank.findById(ctx.request().getParam("id")));
|
@ -5,7 +5,7 @@ import io.vertx.ext.web.RoutingContext;
|
|||||||
import net.frozenorb.apiv3.APIv3;
|
import net.frozenorb.apiv3.APIv3;
|
||||||
import net.frozenorb.apiv3.model.Rank;
|
import net.frozenorb.apiv3.model.Rank;
|
||||||
|
|
||||||
public final class POSTRank implements Handler<RoutingContext> {
|
public final class POSTRanks implements Handler<RoutingContext> {
|
||||||
|
|
||||||
public void handle(RoutingContext ctx) {
|
public void handle(RoutingContext ctx) {
|
||||||
String id = ctx.request().getParam("id");
|
String id = ctx.request().getParam("id");
|
@ -6,7 +6,7 @@ import net.frozenorb.apiv3.APIv3;
|
|||||||
import net.frozenorb.apiv3.model.ServerGroup;
|
import net.frozenorb.apiv3.model.ServerGroup;
|
||||||
import net.frozenorb.apiv3.util.ErrorUtils;
|
import net.frozenorb.apiv3.util.ErrorUtils;
|
||||||
|
|
||||||
public final class DELETEServerGroup implements Handler<RoutingContext> {
|
public final class DELETEServerGroupsId implements Handler<RoutingContext> {
|
||||||
|
|
||||||
public void handle(RoutingContext ctx) {
|
public void handle(RoutingContext ctx) {
|
||||||
ServerGroup serverGroup = ServerGroup.findById(ctx.request().getParam("id"));
|
ServerGroup serverGroup = ServerGroup.findById(ctx.request().getParam("id"));
|
@ -5,7 +5,7 @@ import io.vertx.ext.web.RoutingContext;
|
|||||||
import net.frozenorb.apiv3.APIv3;
|
import net.frozenorb.apiv3.APIv3;
|
||||||
import net.frozenorb.apiv3.model.ServerGroup;
|
import net.frozenorb.apiv3.model.ServerGroup;
|
||||||
|
|
||||||
public final class GETServerGroup implements Handler<RoutingContext> {
|
public final class GETServerGroupsId implements Handler<RoutingContext> {
|
||||||
|
|
||||||
public void handle(RoutingContext ctx) {
|
public void handle(RoutingContext ctx) {
|
||||||
APIv3.respondJson(ctx, ServerGroup.findById(ctx.request().getParam("id")));
|
APIv3.respondJson(ctx, ServerGroup.findById(ctx.request().getParam("id")));
|
@ -5,7 +5,7 @@ import io.vertx.ext.web.RoutingContext;
|
|||||||
import net.frozenorb.apiv3.APIv3;
|
import net.frozenorb.apiv3.APIv3;
|
||||||
import net.frozenorb.apiv3.model.ServerGroup;
|
import net.frozenorb.apiv3.model.ServerGroup;
|
||||||
|
|
||||||
public final class POSTServerGroup implements Handler<RoutingContext> {
|
public final class POSTServerGroups implements Handler<RoutingContext> {
|
||||||
|
|
||||||
public void handle(RoutingContext ctx) {
|
public void handle(RoutingContext ctx) {
|
||||||
String id = ctx.request().getParam("id");
|
String id = ctx.request().getParam("id");
|
@ -6,7 +6,7 @@ import net.frozenorb.apiv3.APIv3;
|
|||||||
import net.frozenorb.apiv3.model.Server;
|
import net.frozenorb.apiv3.model.Server;
|
||||||
import net.frozenorb.apiv3.util.ErrorUtils;
|
import net.frozenorb.apiv3.util.ErrorUtils;
|
||||||
|
|
||||||
public final class DELETEServer implements Handler<RoutingContext> {
|
public final class DELETEServersId implements Handler<RoutingContext> {
|
||||||
|
|
||||||
public void handle(RoutingContext ctx) {
|
public void handle(RoutingContext ctx) {
|
||||||
Server server = Server.findById(ctx.request().getParam("id"));
|
Server server = Server.findById(ctx.request().getParam("id"));
|
@ -5,7 +5,7 @@ import io.vertx.ext.web.RoutingContext;
|
|||||||
import net.frozenorb.apiv3.APIv3;
|
import net.frozenorb.apiv3.APIv3;
|
||||||
import net.frozenorb.apiv3.model.Server;
|
import net.frozenorb.apiv3.model.Server;
|
||||||
|
|
||||||
public final class GETServer implements Handler<RoutingContext> {
|
public final class GETServersId implements Handler<RoutingContext> {
|
||||||
|
|
||||||
public void handle(RoutingContext ctx) {
|
public void handle(RoutingContext ctx) {
|
||||||
APIv3.respondJson(ctx, Server.findById(ctx.request().getParam("id")));
|
APIv3.respondJson(ctx, Server.findById(ctx.request().getParam("id")));
|
@ -11,7 +11,7 @@ import net.frozenorb.apiv3.util.IpUtils;
|
|||||||
import java.math.BigInteger;
|
import java.math.BigInteger;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
public final class POSTServer implements Handler<RoutingContext> {
|
public final class POSTServers implements Handler<RoutingContext> {
|
||||||
|
|
||||||
public void handle(RoutingContext ctx) {
|
public void handle(RoutingContext ctx) {
|
||||||
String id = ctx.request().getParam("id");
|
String id = ctx.request().getParam("id");
|
@ -22,7 +22,7 @@ import java.util.Map;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public final class POSTServerHeartbeat implements Handler<RoutingContext> {
|
public final class POSTServersHeartbeat implements Handler<RoutingContext> {
|
||||||
|
|
||||||
public void handle(RoutingContext ctx) {
|
public void handle(RoutingContext ctx) {
|
||||||
Actor actor = ctx.get("actor");
|
Actor actor = ctx.get("actor");
|
@ -1,39 +0,0 @@
|
|||||||
package net.frozenorb.apiv3.route.users;
|
|
||||||
|
|
||||||
import io.vertx.core.Handler;
|
|
||||||
import io.vertx.ext.web.RoutingContext;
|
|
||||||
import net.frozenorb.apiv3.APIv3;
|
|
||||||
import net.frozenorb.apiv3.model.ServerGroup;
|
|
||||||
import net.frozenorb.apiv3.model.User;
|
|
||||||
import net.frozenorb.apiv3.model.UserMetaEntry;
|
|
||||||
import net.frozenorb.apiv3.util.ErrorUtils;
|
|
||||||
import org.bson.Document;
|
|
||||||
|
|
||||||
public final class DELETEUserMeta implements Handler<RoutingContext> {
|
|
||||||
|
|
||||||
public void handle(RoutingContext ctx) {
|
|
||||||
User user = User.findByIdSync(ctx.request().getParam("id"));
|
|
||||||
|
|
||||||
if (user == null) {
|
|
||||||
ErrorUtils.respondNotFound(ctx, "User", ctx.request().getParam("id"));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ServerGroup serverGroup = ServerGroup.findById(ctx.request().getParam("serverGroup"));
|
|
||||||
|
|
||||||
if (serverGroup == null) {
|
|
||||||
ErrorUtils.respondNotFound(ctx, "Server group", ctx.request().getParam("serverGroup"));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
UserMetaEntry userMetaEntry = UserMetaEntry.findByUserAndGroupSync(user, serverGroup);
|
|
||||||
|
|
||||||
if (userMetaEntry != null) {
|
|
||||||
userMetaEntry.delete();
|
|
||||||
APIv3.respondJson(ctx, userMetaEntry.getData());
|
|
||||||
} else {
|
|
||||||
APIv3.respondJson(ctx, new Document());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,32 +0,0 @@
|
|||||||
package net.frozenorb.apiv3.route.users;
|
|
||||||
|
|
||||||
import io.vertx.core.Handler;
|
|
||||||
import io.vertx.ext.web.RoutingContext;
|
|
||||||
import net.frozenorb.apiv3.APIv3;
|
|
||||||
import net.frozenorb.apiv3.model.ServerGroup;
|
|
||||||
import net.frozenorb.apiv3.model.User;
|
|
||||||
import net.frozenorb.apiv3.model.UserMetaEntry;
|
|
||||||
import net.frozenorb.apiv3.util.ErrorUtils;
|
|
||||||
|
|
||||||
public final class GETUserMeta implements Handler<RoutingContext> {
|
|
||||||
|
|
||||||
public void handle(RoutingContext ctx) {
|
|
||||||
User user = User.findByIdSync(ctx.request().getParam("id"));
|
|
||||||
|
|
||||||
if (user == null) {
|
|
||||||
ErrorUtils.respondNotFound(ctx, "User", ctx.request().getParam("id"));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ServerGroup serverGroup = ServerGroup.findById(ctx.request().getParam("serverGroup"));
|
|
||||||
|
|
||||||
if (serverGroup == null) {
|
|
||||||
ErrorUtils.respondNotFound(ctx, "Server group", ctx.request().getParam("serverGroup"));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
UserMetaEntry userMetaEntry = UserMetaEntry.findByUserAndGroupSync(user, serverGroup);
|
|
||||||
APIv3.respondJson(ctx, userMetaEntry.getData());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,43 +0,0 @@
|
|||||||
package net.frozenorb.apiv3.route.users;
|
|
||||||
|
|
||||||
import io.vertx.core.Handler;
|
|
||||||
import io.vertx.ext.web.RoutingContext;
|
|
||||||
import net.frozenorb.apiv3.APIv3;
|
|
||||||
import net.frozenorb.apiv3.model.ServerGroup;
|
|
||||||
import net.frozenorb.apiv3.model.User;
|
|
||||||
import net.frozenorb.apiv3.model.UserMetaEntry;
|
|
||||||
import net.frozenorb.apiv3.util.ErrorUtils;
|
|
||||||
import org.bson.Document;
|
|
||||||
|
|
||||||
public final class PUTUserMeta implements Handler<RoutingContext> {
|
|
||||||
|
|
||||||
public void handle(RoutingContext ctx) {
|
|
||||||
User user = User.findByIdSync(ctx.request().getParam("id"));
|
|
||||||
|
|
||||||
if (user == null) {
|
|
||||||
ErrorUtils.respondNotFound(ctx, "User", ctx.request().getParam("id"));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ServerGroup serverGroup = ServerGroup.findById(ctx.request().getParam("serverGroup"));
|
|
||||||
|
|
||||||
if (serverGroup == null) {
|
|
||||||
ErrorUtils.respondNotFound(ctx, "Server group", ctx.request().getParam("serverGroup"));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Document reqJson = Document.parse(ctx.getBodyAsString());
|
|
||||||
UserMetaEntry metaEntry = UserMetaEntry.findByUserAndGroupSync(user, serverGroup);
|
|
||||||
|
|
||||||
if (metaEntry == null) {
|
|
||||||
metaEntry = new UserMetaEntry(user, serverGroup, reqJson);
|
|
||||||
metaEntry.insert();
|
|
||||||
} else {
|
|
||||||
metaEntry.setData(reqJson);
|
|
||||||
metaEntry.save();
|
|
||||||
}
|
|
||||||
|
|
||||||
APIv3.respondJson(ctx, reqJson);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user