From 8ade7066f9831b799d0d837e5fecaaf996bb27c2 Mon Sep 17 00:00:00 2001 From: Colin McDonald Date: Tue, 21 Jun 2016 17:08:17 -0400 Subject: [PATCH] Part 1 of the big "make this closer to a RESTful api" commit --- src/main/java/net/frozenorb/apiv3/APIv3.java | 238 ++++++++---------- .../apiv3/handler/LoaderIoHandler.java | 19 -- .../frozenorb/apiv3/model/AuditLogEntry.java | 8 +- .../frozenorb/apiv3/model/ServerGroup.java | 2 +- .../java/net/frozenorb/apiv3/model/User.java | 5 +- .../frozenorb/apiv3/model/UserMetaEntry.java | 65 ----- .../route/{GETDump.java => GETDumps.java} | 10 +- .../frozenorb/apiv3/route/POSTMetrics.java | 14 -- .../route/announcements/GETAnnouncements.java | 21 -- .../route/announcements/PUTAnnouncements.java | 37 --- ...erAuditLogEntry.java => POSTAuditLog.java} | 2 +- ...ChatFilterList.java => GETChatFilter.java} | 2 +- ...kenOwner.java => GETEmailTokensOwner.java} | 2 +- ...nfirm.java => POSTEmailTokensConfirm.java} | 2 +- .../{DELETEGrant.java => DELETEGrantsId.java} | 2 +- .../{GETGrant.java => GETGrantsId.java} | 2 +- .../apiv3/route/grants/GETUserGrants.java | 30 --- .../{POSTUserGrant.java => POSTGrants.java} | 2 +- .../apiv3/route/ipBans/GETIpIpBans.java | 29 --- .../{POSTIpIpBan.java => POSTIpBans.java} | 2 +- .../{GETUserIpLog.java => GETIpLog.java} | 2 +- ...ava => DELETENotificationTemplatesId.java} | 2 +- ...e.java => GETNotificationTemplatesId.java} | 2 +- ...te.java => POSTNotificationTemplates.java} | 2 +- ...Punishment.java => DELETEPunishments.java} | 2 +- ...t.java => DELETEUserActivePunishment.java} | 2 +- ...TPunishment.java => GETPunishmentsId.java} | 2 +- .../route/punishments/GETUserPunishments.java | 30 --- .../{DELETERank.java => DELETERanksId.java} | 2 +- .../ranks/{GETRank.java => GETRanksId.java} | 2 +- .../ranks/{POSTRank.java => POSTRanks.java} | 2 +- ...erGroup.java => DELETEServerGroupsId.java} | 2 +- ...erverGroup.java => GETServerGroupsId.java} | 2 +- ...ServerGroup.java => POSTServerGroups.java} | 2 +- ...DELETEServer.java => DELETEServersId.java} | 2 +- .../{GETServer.java => GETServersId.java} | 2 +- .../{POSTServer.java => POSTServers.java} | 2 +- ...artbeat.java => POSTServersHeartbeat.java} | 2 +- .../apiv3/route/users/DELETEUserMeta.java | 39 --- .../apiv3/route/users/GETUserMeta.java | 32 --- .../apiv3/route/users/PUTUserMeta.java | 43 ---- 41 files changed, 146 insertions(+), 526 deletions(-) delete mode 100644 src/main/java/net/frozenorb/apiv3/handler/LoaderIoHandler.java delete mode 100644 src/main/java/net/frozenorb/apiv3/model/UserMetaEntry.java rename src/main/java/net/frozenorb/apiv3/route/{GETDump.java => GETDumps.java} (93%) delete mode 100644 src/main/java/net/frozenorb/apiv3/route/POSTMetrics.java delete mode 100644 src/main/java/net/frozenorb/apiv3/route/announcements/GETAnnouncements.java delete mode 100644 src/main/java/net/frozenorb/apiv3/route/announcements/PUTAnnouncements.java rename src/main/java/net/frozenorb/apiv3/route/auditLog/{POSTUserAuditLogEntry.java => POSTAuditLog.java} (95%) rename src/main/java/net/frozenorb/apiv3/route/chatFilterList/{GETChatFilterList.java => GETChatFilter.java} (83%) rename src/main/java/net/frozenorb/apiv3/route/emailToken/{GETEmailTokenOwner.java => GETEmailTokensOwner.java} (87%) rename src/main/java/net/frozenorb/apiv3/route/emailToken/{POSTEmailTokenConfirm.java => POSTEmailTokensConfirm.java} (95%) rename src/main/java/net/frozenorb/apiv3/route/grants/{DELETEGrant.java => DELETEGrantsId.java} (95%) rename src/main/java/net/frozenorb/apiv3/route/grants/{GETGrant.java => GETGrantsId.java} (88%) delete mode 100644 src/main/java/net/frozenorb/apiv3/route/grants/GETUserGrants.java rename src/main/java/net/frozenorb/apiv3/route/grants/{POSTUserGrant.java => POSTGrants.java} (97%) delete mode 100644 src/main/java/net/frozenorb/apiv3/route/ipBans/GETIpIpBans.java rename src/main/java/net/frozenorb/apiv3/route/ipBans/{POSTIpIpBan.java => POSTIpBans.java} (95%) rename src/main/java/net/frozenorb/apiv3/route/ipLog/{GETUserIpLog.java => GETIpLog.java} (93%) rename src/main/java/net/frozenorb/apiv3/route/notificationTemplates/{DELETENotificationTemplate.java => DELETENotificationTemplatesId.java} (88%) rename src/main/java/net/frozenorb/apiv3/route/notificationTemplates/{GETNotificationTemplate.java => GETNotificationTemplatesId.java} (88%) rename src/main/java/net/frozenorb/apiv3/route/notificationTemplates/{POSTNotificationTemplate.java => POSTNotificationTemplates.java} (88%) rename src/main/java/net/frozenorb/apiv3/route/punishments/{DELETEPunishment.java => DELETEPunishments.java} (95%) rename src/main/java/net/frozenorb/apiv3/route/punishments/{DELETEUserPunishment.java => DELETEUserActivePunishment.java} (96%) rename src/main/java/net/frozenorb/apiv3/route/punishments/{GETPunishment.java => GETPunishmentsId.java} (88%) delete mode 100644 src/main/java/net/frozenorb/apiv3/route/punishments/GETUserPunishments.java rename src/main/java/net/frozenorb/apiv3/route/ranks/{DELETERank.java => DELETERanksId.java} (88%) rename src/main/java/net/frozenorb/apiv3/route/ranks/{GETRank.java => GETRanksId.java} (82%) rename src/main/java/net/frozenorb/apiv3/route/ranks/{POSTRank.java => POSTRanks.java} (92%) rename src/main/java/net/frozenorb/apiv3/route/serverGroups/{DELETEServerGroup.java => DELETEServerGroupsId.java} (88%) rename src/main/java/net/frozenorb/apiv3/route/serverGroups/{GETServerGroup.java => GETServerGroupsId.java} (81%) rename src/main/java/net/frozenorb/apiv3/route/serverGroups/{POSTServerGroup.java => POSTServerGroups.java} (87%) rename src/main/java/net/frozenorb/apiv3/route/servers/{DELETEServer.java => DELETEServersId.java} (88%) rename src/main/java/net/frozenorb/apiv3/route/servers/{GETServer.java => GETServersId.java} (82%) rename src/main/java/net/frozenorb/apiv3/route/servers/{POSTServer.java => POSTServers.java} (94%) rename src/main/java/net/frozenorb/apiv3/route/servers/{POSTServerHeartbeat.java => POSTServersHeartbeat.java} (98%) delete mode 100644 src/main/java/net/frozenorb/apiv3/route/users/DELETEUserMeta.java delete mode 100644 src/main/java/net/frozenorb/apiv3/route/users/GETUserMeta.java delete mode 100644 src/main/java/net/frozenorb/apiv3/route/users/PUTUserMeta.java diff --git a/src/main/java/net/frozenorb/apiv3/APIv3.java b/src/main/java/net/frozenorb/apiv3/APIv3.java index fcecc57..5a1c4d4 100644 --- a/src/main/java/net/frozenorb/apiv3/APIv3.java +++ b/src/main/java/net/frozenorb/apiv3/APIv3.java @@ -27,40 +27,37 @@ import io.vertx.ext.web.RoutingContext; import io.vertx.ext.web.handler.BodyHandler; import io.vertx.ext.web.handler.LoggerFormat; import io.vertx.ext.web.handler.LoggerHandler; +import io.vertx.ext.web.handler.TimeoutHandler; import io.vertx.redis.RedisClient; import io.vertx.redis.RedisOptions; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import net.frozenorb.apiv3.handler.ActorAttributeHandler; import net.frozenorb.apiv3.handler.AuthorizationHandler; -import net.frozenorb.apiv3.handler.LoaderIoHandler; -import net.frozenorb.apiv3.route.GETDump; +import net.frozenorb.apiv3.route.GETDumps; 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.POSTUserAuditLogEntry; -import net.frozenorb.apiv3.route.chatFilterList.GETChatFilterList; -import net.frozenorb.apiv3.route.emailToken.GETEmailTokenOwner; -import net.frozenorb.apiv3.route.emailToken.POSTEmailTokenConfirm; +import net.frozenorb.apiv3.route.auditLog.POSTAuditLog; +import net.frozenorb.apiv3.route.chatFilterList.GETChatFilter; +import net.frozenorb.apiv3.route.emailToken.GETEmailTokensOwner; +import net.frozenorb.apiv3.route.emailToken.POSTEmailTokensConfirm; import net.frozenorb.apiv3.route.grants.*; import net.frozenorb.apiv3.route.ipBans.*; import net.frozenorb.apiv3.route.ipIntel.GETIpIntel; -import net.frozenorb.apiv3.route.ipLog.GETUserIpLog; -import net.frozenorb.apiv3.route.notificationTemplates.DELETENotificationTemplate; -import net.frozenorb.apiv3.route.notificationTemplates.GETNotificationTemplate; +import net.frozenorb.apiv3.route.ipLog.GETIpLog; +import net.frozenorb.apiv3.route.notificationTemplates.DELETENotificationTemplatesId; +import net.frozenorb.apiv3.route.notificationTemplates.GETNotificationTemplatesId; 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.ranks.DELETERank; -import net.frozenorb.apiv3.route.ranks.GETRank; +import net.frozenorb.apiv3.route.ranks.DELETERanksId; +import net.frozenorb.apiv3.route.ranks.GETRanksId; import net.frozenorb.apiv3.route.ranks.GETRanks; -import net.frozenorb.apiv3.route.ranks.POSTRank; -import net.frozenorb.apiv3.route.serverGroups.DELETEServerGroup; -import net.frozenorb.apiv3.route.serverGroups.GETServerGroup; +import net.frozenorb.apiv3.route.ranks.POSTRanks; +import net.frozenorb.apiv3.route.serverGroups.DELETEServerGroupsId; +import net.frozenorb.apiv3.route.serverGroups.GETServerGroupsId; 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.users.*; import net.frozenorb.apiv3.serialization.gson.FollowAnnotationExclusionStrategy; @@ -75,18 +72,14 @@ import org.bson.Document; import org.bson.codecs.BsonValueCodecProvider; import org.bson.codecs.DocumentCodecProvider; import org.bson.codecs.ValueCodecProvider; -import org.bson.codecs.configuration.CodecProvider; import org.bson.codecs.configuration.CodecRegistries; -import org.bson.codecs.configuration.CodecRegistry; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.time.Instant; -import java.util.ArrayList; -import java.util.List; -import java.util.Properties; -import java.util.UUID; +import java.util.*; +import java.util.concurrent.TimeUnit; @Slf4j public final class APIv3 extends AbstractVerticle { @@ -97,9 +90,9 @@ public final class APIv3 extends AbstractVerticle { @Getter private static Properties config = new Properties(); @Getter private static RedisClient redisClient; private static final Gson gson = new GsonBuilder() - .registerTypeAdapter(Instant.class, new InstantTypeAdapter()) - .setExclusionStrategies(new FollowAnnotationExclusionStrategy()) - .create(); + .registerTypeAdapter(Instant.class, new InstantTypeAdapter()) + .setExclusionStrategies(new FollowAnnotationExclusionStrategy()) + .create(); @Override public void start() { @@ -144,7 +137,13 @@ public final class APIv3 extends AbstractVerticle { MongoClient mongoClient = MongoClients.create(MongoClientSettings .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) .clusterSettings(ClusterSettings.builder() .applyConnectionString(connectionString) @@ -187,34 +186,21 @@ public final class APIv3 extends AbstractVerticle { ), (a, b) -> {}); } - private CodecRegistry createCodecRegistry() { - ObjectMapper objectMapper = ObjectMapperFactory.createObjectMapper(); - SimpleModule simpleModule = new SimpleModule(); + private ObjectMapper createMongoJacksonMapper() { + ObjectMapper mongoJacksonMapper = ObjectMapperFactory.createObjectMapper(); + SimpleModule module = new SimpleModule(); - simpleModule.addSerializer(Instant.class, new InstantJsonSerializer()); - simpleModule.addDeserializer(Instant.class, new InstantJsonDeserializer()); - simpleModule.addSerializer(UUID.class, new UuidJsonSerializer()); - simpleModule.addDeserializer(UUID.class, new UuidJsonDeserializer()); + module.addSerializer(Instant.class, new InstantJsonSerializer()); + module.addDeserializer(Instant.class, new InstantJsonDeserializer()); + module.addSerializer(UUID.class, new UuidJsonSerializer()); + module.addDeserializer(UUID.class, new UuidJsonDeserializer()); - objectMapper.registerModule(simpleModule); - objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.NONE); - objectMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY); - objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); + mongoJacksonMapper.registerModule(module); + mongoJacksonMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.NONE); + mongoJacksonMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY); + mongoJacksonMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); - List providers = new ArrayList<>(); - - // 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); + return mongoJacksonMapper; } private void setupRedis() { @@ -235,99 +221,95 @@ public final class APIv3 extends AbstractVerticle { // TODO: blockingHandler -> handler private void setupHttpServer() { - HttpServer webServer = vertx.createHttpServer(); - Router mainRouter = Router.router(vertx); + HttpServer webServer = vertx.createHttpServer( + new HttpServerOptions() + //.setSsl(true) + .setCompressionSupported(true) + ); - mainRouter.route().handler(new LoaderIoHandler()); - mainRouter.route().handler(new ActorAttributeHandler()); - mainRouter.route().handler(new AuthorizationHandler()); - mainRouter.route().handler(LoggerHandler.create(LoggerFormat.TINY)); - mainRouter.route().method(HttpMethod.PUT).method(HttpMethod.POST).handler(BodyHandler.create()); + Router http = Router.router(vertx); + + http.route().handler(LoggerHandler.create(LoggerFormat.TINY)); + http.route().handler(TimeoutHandler.create(TimeUnit.SECONDS.toMillis(5))); + 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 - mainRouter.get("/announcements/:id").handler(new GETAnnouncements()); - mainRouter.put("/announcements/:id").handler(new PUTAnnouncements()); + http.get("/auditLog").handler(new GETAuditLog()); + http.post("/auditLog").handler(new POSTAuditLog()); - mainRouter.get("/auditLog").handler(new GETAuditLog()); - mainRouter.post("/user/:id/auditLogEntry").handler(new POSTUserAuditLogEntry()); + http.get("/chatFilter").handler(new GETChatFilter()); - mainRouter.get("/emailToken/:emailToken/owner").blockingHandler(new GETEmailTokenOwner(), false); - mainRouter.post("/emailToken/:emailToken/confirm").blockingHandler(new POSTEmailTokenConfirm(), false); + http.get("/emailTokens/:emailToken/owner").blockingHandler(new GETEmailTokensOwner(), 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()); - mainRouter.get("/grants").handler(new GETGrants()); - mainRouter.get("/user/:id/grants").handler(new GETUserGrants()); - mainRouter.post("/user/:id/grant").blockingHandler(new POSTUserGrant(), false); - mainRouter.delete("/grant/:id").blockingHandler(new DELETEGrant(), false); + http.get("/ipBans/:id").handler(new GETIpBan()); + http.get("/ipBans").handler(new GETIpBans()); + http.post("/ipBans").blockingHandler(new POSTIpBans(), false); + http.delete("/ipBans/:id").blockingHandler(new DELETEIpBan(), false); - mainRouter.get("/ipBan/:id").handler(new GETIpBan()); - 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); + http.get("/ipIntel").handler(new GETIpIntel()); - 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()); - mainRouter.get("/notificationTemplates").handler(new GETNotificationTemplates()); - mainRouter.post("/notificationTemplate").blockingHandler(new POSTNotificationTemplate(), false); - //mainRouter.put("/notificationTemplate/:id").blockingHandler(new PUTNotificationTemplate(), false); - mainRouter.delete("/notificationTemplate/:id").blockingHandler(new DELETENotificationTemplate(), false); + http.get("/punishments/:id").handler(new GETPunishmentsId()); + http.get("/punishments").handler(new GETPunishments()); + http.post("/punishments").blockingHandler(new POSTUserPunish(), false); + http.delete("/punishments/:id").blockingHandler(new DELETEPunishments(), false); + http.delete("/user/:id/activePunishment").blockingHandler(new DELETEUserActivePunishment(), false); - mainRouter.get("/punishment/:id").handler(new GETPunishment()); - mainRouter.get("/punishments").handler(new GETPunishments()); - mainRouter.get("/user/:id/punishments").handler(new GETUserPunishments()); - mainRouter.post("/user/:id/punish").blockingHandler(new POSTUserPunish(), false); - mainRouter.delete("/punishment/:id").blockingHandler(new DELETEPunishment(), false); - mainRouter.delete("/user/:id/punishment").blockingHandler(new DELETEUserPunishment(), false); + http.get("/ranks/:id").handler(new GETRanksId()); + http.get("/ranks").handler(new GETRanks()); + http.post("/ranks").blockingHandler(new POSTRanks(), false); + //http.put("/ranks/:id").blockingHandler(new PUTRank(), false); + http.delete("/ranks/:id").blockingHandler(new DELETERanksId(), false); - mainRouter.get("/rank/:id").handler(new GETRank()); - mainRouter.get("/ranks").handler(new GETRanks()); - mainRouter.post("/rank").blockingHandler(new POSTRank(), false); - //mainRouter.put("/rank/:id").blockingHandler(new PUTRank(), false); - mainRouter.delete("/rank/:id").blockingHandler(new DELETERank(), false); + http.get("/serverGroups/:id").handler(new GETServerGroupsId()); + http.get("/serverGroups").handler(new GETServerGroups()); + http.post("/serverGroups").blockingHandler(new POSTServerGroups(), false); + //http.put("/serverGroups/:id").blockingHandler(new PUTServerGroup(), false); + http.delete("/serverGroups/:id").blockingHandler(new DELETEServerGroupsId(), false); - mainRouter.get("/serverGroup/:id").handler(new GETServerGroup()); - mainRouter.get("/serverGroups").handler(new GETServerGroups()); - mainRouter.post("/serverGroup").blockingHandler(new POSTServerGroup(), false); - //mainRouter.put("/serverGroup/:id").blockingHandler(new PUTServerGroup(), false); - mainRouter.delete("/serverGroup/:id").blockingHandler(new DELETEServerGroup(), false); + http.get("/servers/:id").handler(new GETServersId()); + http.get("/servers").handler(new GETServers()); + http.post("/servers/heartbeat").handler(new POSTServersHeartbeat()); + http.post("/servers").blockingHandler(new POSTServers(), false); + //http.put("/servers/:id").blockingHandler(new PUTServer(), false); + http.delete("/servers/:id").blockingHandler(new DELETEServersId(), false); - mainRouter.get("/server/:id").handler(new GETServer()); - mainRouter.get("/servers").handler(new GETServers()); - mainRouter.post("/server/heartbeat").handler(new POSTServerHeartbeat()); - mainRouter.post("/server").blockingHandler(new POSTServer(), false); - //mainRouter.put("/server/:id").blockingHandler(new PUTServer(), false); - mainRouter.delete("/server/:id").blockingHandler(new DELETEServer(), false); + http.get("/staff").blockingHandler(new GETStaff(), false); + http.get("/users/:id").handler(new GETUser()); + http.get("/users/:id/details").blockingHandler(new GETUserDetails(), false); + http.get("/users/:id/permissions").blockingHandler(new GETUserPermissions(), false); + http.get("/users/:id/requiresTOTP").handler(new GETUserRequiresTOTP()); + 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); - mainRouter.get("/user/:id").handler(new GETUser()); - 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()); + http.get("/dumps/:type").handler(new GETDumps()); + http.get("/whoami").handler(new GETWhoAmI()); int port = Integer.parseInt(config.getProperty("http.port")); - webServer.requestHandler(mainRouter::accept).listen(port); + webServer.requestHandler(http::accept).listen(port); } private void setupHttpClient() { diff --git a/src/main/java/net/frozenorb/apiv3/handler/LoaderIoHandler.java b/src/main/java/net/frozenorb/apiv3/handler/LoaderIoHandler.java deleted file mode 100644 index 8c46e06..0000000 --- a/src/main/java/net/frozenorb/apiv3/handler/LoaderIoHandler.java +++ /dev/null @@ -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 { - - @Override - public void handle(RoutingContext ctx) { - String path = ctx.request().path().replace("/", ""); - - if (path.equals("loaderio-1c81aa574f79c573e7220e15e30a96aa")) { - ctx.response().end(path); - } else { - ctx.next(); - } - } - -} \ No newline at end of file diff --git a/src/main/java/net/frozenorb/apiv3/model/AuditLogEntry.java b/src/main/java/net/frozenorb/apiv3/model/AuditLogEntry.java index ac5ddba..5ce8c38 100644 --- a/src/main/java/net/frozenorb/apiv3/model/AuditLogEntry.java +++ b/src/main/java/net/frozenorb/apiv3/model/AuditLogEntry.java @@ -34,16 +34,12 @@ public final class AuditLogEntry { @Getter private AuditLogActionType type; @Getter private Map metadata; - public static List findByUserSync(UUID user) { - return SyncUtils.blockMulti(auditLogCollection.find(new Document("user", user))); - } - public static void findAllPaginated(int skip, int pageSize, SingleResultCallback> callback) { auditLogCollection.find().sort(new Document("performedAt", -1)).skip(skip).limit(pageSize).into(new ArrayList<>(), callback); } - public static void findByUser(UUID user, SingleResultCallback> callback) { - auditLogCollection.find(new Document("user", user)).into(new ArrayList<>(), callback); + public static void find(Document query, SingleResultCallback> callback) { + auditLogCollection.find(query).into(new ArrayList<>(), callback); } public AuditLogEntry() {} // For Jackson diff --git a/src/main/java/net/frozenorb/apiv3/model/ServerGroup.java b/src/main/java/net/frozenorb/apiv3/model/ServerGroup.java index 64bd245..c735b3b 100644 --- a/src/main/java/net/frozenorb/apiv3/model/ServerGroup.java +++ b/src/main/java/net/frozenorb/apiv3/model/ServerGroup.java @@ -29,7 +29,7 @@ public final class ServerGroup { @Getter @Id private String id; @Getter private String image; - @Getter @Setter @ExcludeFromReplies private Set announcements; + @Getter @Setter private Set announcements; @Getter @Setter @ExcludeFromReplies private Map> permissions; // make this and other stuff async diff --git a/src/main/java/net/frozenorb/apiv3/model/User.java b/src/main/java/net/frozenorb/apiv3/model/User.java index 475e560..49dabce 100644 --- a/src/main/java/net/frozenorb/apiv3/model/User.java +++ b/src/main/java/net/frozenorb/apiv3/model/User.java @@ -40,8 +40,8 @@ public final class User { @Getter @ExcludeFromReplies @Setter private String totpSecret; @Getter @ExcludeFromReplies private String password; @Getter private String email; - @Getter @ExcludeFromReplies private Instant registeredAt; - @Getter private String pendingEmail; + @Getter private Instant registeredAt; + @Getter @ExcludeFromReplies private String pendingEmail; @Getter @ExcludeFromReplies private String pendingEmailToken; @Getter @ExcludeFromReplies private Instant pendingEmailTokenSetAt; @Getter private String phoneNumber; @@ -238,6 +238,7 @@ public final class User { }); } + // TODO: CLEAN public enum RequiresTotpResult { NOT_REQUIRED_NOT_SET, diff --git a/src/main/java/net/frozenorb/apiv3/model/UserMetaEntry.java b/src/main/java/net/frozenorb/apiv3/model/UserMetaEntry.java deleted file mode 100644 index 08aec82..0000000 --- a/src/main/java/net/frozenorb/apiv3/model/UserMetaEntry.java +++ /dev/null @@ -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 userMetaCollection = APIv3.getDatabase().getCollection("userMeta", UserMetaEntry.class); - - @Getter @Id private String id; - @Getter private UUID user; - @Getter private String serverGroup; - @Getter @Setter private Map 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 data) { - this.id = new ObjectId().toString(); - this.user = user.getId(); - this.serverGroup = serverGroup.getId(); - this.data = ImmutableMap.copyOf(data); - } - - public void insert() { - BlockingCallback callback = new BlockingCallback<>(); - userMetaCollection.insertOne(this, callback); - callback.get(); - } - - public void save() { - BlockingCallback callback = new BlockingCallback<>(); - userMetaCollection.replaceOne(new Document("_id", id), this, callback); - callback.get(); - } - - public void delete() { - BlockingCallback callback = new BlockingCallback<>(); - userMetaCollection.deleteOne(new Document("_id", id), callback); - callback.get(); - } - -} \ No newline at end of file diff --git a/src/main/java/net/frozenorb/apiv3/route/GETDump.java b/src/main/java/net/frozenorb/apiv3/route/GETDumps.java similarity index 93% rename from src/main/java/net/frozenorb/apiv3/route/GETDump.java rename to src/main/java/net/frozenorb/apiv3/route/GETDumps.java index d90c193..635cc32 100644 --- a/src/main/java/net/frozenorb/apiv3/route/GETDump.java +++ b/src/main/java/net/frozenorb/apiv3/route/GETDumps.java @@ -11,13 +11,13 @@ import net.frozenorb.apiv3.util.ErrorUtils; import java.util.*; import java.util.concurrent.TimeUnit; -public final class GETDump implements Handler { +public final class GETDumps implements Handler { private List banCache = new ArrayList<>(); private List blacklistCache = new ArrayList<>(); private Map> grantCache = new HashMap<>(); - public GETDump() { + public GETDumps() { // TODO: Use vertx scheduler Thread dumpUpdater = new Thread() { @@ -45,8 +45,8 @@ public final class GETDump implements Handler { } }); - GETDump.this.banCache = banCache; - GETDump.this.blacklistCache = blacklistCache; + GETDumps.this.banCache = banCache; + GETDumps.this.blacklistCache = blacklistCache; } if (tick == 0 || tick % 2 == 0) { @@ -65,7 +65,7 @@ public final class GETDump implements Handler { } }); - GETDump.this.grantCache = grantCache; + GETDumps.this.grantCache = grantCache; } try { diff --git a/src/main/java/net/frozenorb/apiv3/route/POSTMetrics.java b/src/main/java/net/frozenorb/apiv3/route/POSTMetrics.java deleted file mode 100644 index f4cc292..0000000 --- a/src/main/java/net/frozenorb/apiv3/route/POSTMetrics.java +++ /dev/null @@ -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 { - - public void handle(RoutingContext ctx) { - APIv3.respondJson(ctx, ImmutableMap.of()); - } - -} \ No newline at end of file diff --git a/src/main/java/net/frozenorb/apiv3/route/announcements/GETAnnouncements.java b/src/main/java/net/frozenorb/apiv3/route/announcements/GETAnnouncements.java deleted file mode 100644 index 3d104ce..0000000 --- a/src/main/java/net/frozenorb/apiv3/route/announcements/GETAnnouncements.java +++ /dev/null @@ -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 { - - 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()); - } - } - -} \ No newline at end of file diff --git a/src/main/java/net/frozenorb/apiv3/route/announcements/PUTAnnouncements.java b/src/main/java/net/frozenorb/apiv3/route/announcements/PUTAnnouncements.java deleted file mode 100644 index 3fc9f67..0000000 --- a/src/main/java/net/frozenorb/apiv3/route/announcements/PUTAnnouncements.java +++ /dev/null @@ -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 { - - 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 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()); - } - }); - } - } - -} \ No newline at end of file diff --git a/src/main/java/net/frozenorb/apiv3/route/auditLog/POSTUserAuditLogEntry.java b/src/main/java/net/frozenorb/apiv3/route/auditLog/POSTAuditLog.java similarity index 95% rename from src/main/java/net/frozenorb/apiv3/route/auditLog/POSTUserAuditLogEntry.java rename to src/main/java/net/frozenorb/apiv3/route/auditLog/POSTAuditLog.java index 5c29e73..1bc3205 100644 --- a/src/main/java/net/frozenorb/apiv3/route/auditLog/POSTUserAuditLogEntry.java +++ b/src/main/java/net/frozenorb/apiv3/route/auditLog/POSTAuditLog.java @@ -10,7 +10,7 @@ import net.frozenorb.apiv3.util.ErrorUtils; import net.frozenorb.apiv3.util.IpUtils; import org.bson.Document; -public final class POSTUserAuditLogEntry implements Handler { +public final class POSTAuditLog implements Handler { public void handle(RoutingContext ctx) { User.findById(ctx.request().getParam("id"), (user, error) -> { diff --git a/src/main/java/net/frozenorb/apiv3/route/chatFilterList/GETChatFilterList.java b/src/main/java/net/frozenorb/apiv3/route/chatFilterList/GETChatFilter.java similarity index 83% rename from src/main/java/net/frozenorb/apiv3/route/chatFilterList/GETChatFilterList.java rename to src/main/java/net/frozenorb/apiv3/route/chatFilterList/GETChatFilter.java index b4427d1..45ecbd3 100644 --- a/src/main/java/net/frozenorb/apiv3/route/chatFilterList/GETChatFilterList.java +++ b/src/main/java/net/frozenorb/apiv3/route/chatFilterList/GETChatFilter.java @@ -5,7 +5,7 @@ import io.vertx.core.Handler; import io.vertx.ext.web.RoutingContext; import net.frozenorb.apiv3.APIv3; -public final class GETChatFilterList implements Handler { +public final class GETChatFilter implements Handler { public void handle(RoutingContext ctx) { // TODO diff --git a/src/main/java/net/frozenorb/apiv3/route/emailToken/GETEmailTokenOwner.java b/src/main/java/net/frozenorb/apiv3/route/emailToken/GETEmailTokensOwner.java similarity index 87% rename from src/main/java/net/frozenorb/apiv3/route/emailToken/GETEmailTokenOwner.java rename to src/main/java/net/frozenorb/apiv3/route/emailToken/GETEmailTokensOwner.java index 7d4a94b..dcaad7b 100644 --- a/src/main/java/net/frozenorb/apiv3/route/emailToken/GETEmailTokenOwner.java +++ b/src/main/java/net/frozenorb/apiv3/route/emailToken/GETEmailTokensOwner.java @@ -6,7 +6,7 @@ import net.frozenorb.apiv3.APIv3; import net.frozenorb.apiv3.model.User; import net.frozenorb.apiv3.util.ErrorUtils; -public final class GETEmailTokenOwner implements Handler { +public final class GETEmailTokensOwner implements Handler { public void handle(RoutingContext ctx) { User.findByEmailTokenSync(ctx.request().getParam("id"), (user, error) -> { diff --git a/src/main/java/net/frozenorb/apiv3/route/emailToken/POSTEmailTokenConfirm.java b/src/main/java/net/frozenorb/apiv3/route/emailToken/POSTEmailTokensConfirm.java similarity index 95% rename from src/main/java/net/frozenorb/apiv3/route/emailToken/POSTEmailTokenConfirm.java rename to src/main/java/net/frozenorb/apiv3/route/emailToken/POSTEmailTokensConfirm.java index b355875..4f1ddeb 100644 --- a/src/main/java/net/frozenorb/apiv3/route/emailToken/POSTEmailTokenConfirm.java +++ b/src/main/java/net/frozenorb/apiv3/route/emailToken/POSTEmailTokensConfirm.java @@ -9,7 +9,7 @@ import net.frozenorb.apiv3.util.ErrorUtils; import java.util.concurrent.TimeUnit; -public final class POSTEmailTokenConfirm implements Handler { +public final class POSTEmailTokensConfirm implements Handler { public void handle(RoutingContext ctx) { User user = User.findByEmailTokenSync(ctx.request().getParam("emailToken")); diff --git a/src/main/java/net/frozenorb/apiv3/route/grants/DELETEGrant.java b/src/main/java/net/frozenorb/apiv3/route/grants/DELETEGrantsId.java similarity index 95% rename from src/main/java/net/frozenorb/apiv3/route/grants/DELETEGrant.java rename to src/main/java/net/frozenorb/apiv3/route/grants/DELETEGrantsId.java index c9b88d9..dc03e55 100644 --- a/src/main/java/net/frozenorb/apiv3/route/grants/DELETEGrant.java +++ b/src/main/java/net/frozenorb/apiv3/route/grants/DELETEGrantsId.java @@ -12,7 +12,7 @@ import net.frozenorb.apiv3.model.User; import net.frozenorb.apiv3.unsorted.BlockingCallback; import net.frozenorb.apiv3.util.ErrorUtils; -public final class DELETEGrant implements Handler { +public final class DELETEGrantsId implements Handler { public void handle(RoutingContext ctx) { Grant grant = Grant.findByIdSync(ctx.request().getParam("id")); diff --git a/src/main/java/net/frozenorb/apiv3/route/grants/GETGrant.java b/src/main/java/net/frozenorb/apiv3/route/grants/GETGrantsId.java similarity index 88% rename from src/main/java/net/frozenorb/apiv3/route/grants/GETGrant.java rename to src/main/java/net/frozenorb/apiv3/route/grants/GETGrantsId.java index 9754ceb..ec1971f 100644 --- a/src/main/java/net/frozenorb/apiv3/route/grants/GETGrant.java +++ b/src/main/java/net/frozenorb/apiv3/route/grants/GETGrantsId.java @@ -6,7 +6,7 @@ import net.frozenorb.apiv3.APIv3; import net.frozenorb.apiv3.model.Grant; import net.frozenorb.apiv3.util.ErrorUtils; -public final class GETGrant implements Handler { +public final class GETGrantsId implements Handler { public void handle(RoutingContext ctx) { Grant.findById(ctx.request().getParam("id"), (grant, error) -> { diff --git a/src/main/java/net/frozenorb/apiv3/route/grants/GETUserGrants.java b/src/main/java/net/frozenorb/apiv3/route/grants/GETUserGrants.java deleted file mode 100644 index 110a671..0000000 --- a/src/main/java/net/frozenorb/apiv3/route/grants/GETUserGrants.java +++ /dev/null @@ -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 { - - 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); - } - }); - } - }); - } - -} \ No newline at end of file diff --git a/src/main/java/net/frozenorb/apiv3/route/grants/POSTUserGrant.java b/src/main/java/net/frozenorb/apiv3/route/grants/POSTGrants.java similarity index 97% rename from src/main/java/net/frozenorb/apiv3/route/grants/POSTUserGrant.java rename to src/main/java/net/frozenorb/apiv3/route/grants/POSTGrants.java index 770970a..1739e53 100644 --- a/src/main/java/net/frozenorb/apiv3/route/grants/POSTUserGrant.java +++ b/src/main/java/net/frozenorb/apiv3/route/grants/POSTGrants.java @@ -13,7 +13,7 @@ import java.time.Instant; import java.util.HashSet; import java.util.Set; -public final class POSTUserGrant implements Handler { +public final class POSTGrants implements Handler { public void handle(RoutingContext ctx) { User target = User.findByIdSync(ctx.request().getParam("id")); diff --git a/src/main/java/net/frozenorb/apiv3/route/ipBans/GETIpIpBans.java b/src/main/java/net/frozenorb/apiv3/route/ipBans/GETIpIpBans.java deleted file mode 100644 index e5c1820..0000000 --- a/src/main/java/net/frozenorb/apiv3/route/ipBans/GETIpIpBans.java +++ /dev/null @@ -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 { - - 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); - } - }); - } - -} \ No newline at end of file diff --git a/src/main/java/net/frozenorb/apiv3/route/ipBans/POSTIpIpBan.java b/src/main/java/net/frozenorb/apiv3/route/ipBans/POSTIpBans.java similarity index 95% rename from src/main/java/net/frozenorb/apiv3/route/ipBans/POSTIpIpBan.java rename to src/main/java/net/frozenorb/apiv3/route/ipBans/POSTIpBans.java index 7476d60..21385bb 100644 --- a/src/main/java/net/frozenorb/apiv3/route/ipBans/POSTIpIpBan.java +++ b/src/main/java/net/frozenorb/apiv3/route/ipBans/POSTIpBans.java @@ -10,7 +10,7 @@ import net.frozenorb.apiv3.util.IpUtils; import java.time.Instant; -public final class POSTIpIpBan implements Handler { +public final class POSTIpBans implements Handler { public void handle(RoutingContext ctx) { String userIp = ctx.request().getParam("id"); diff --git a/src/main/java/net/frozenorb/apiv3/route/ipLog/GETUserIpLog.java b/src/main/java/net/frozenorb/apiv3/route/ipLog/GETIpLog.java similarity index 93% rename from src/main/java/net/frozenorb/apiv3/route/ipLog/GETUserIpLog.java rename to src/main/java/net/frozenorb/apiv3/route/ipLog/GETIpLog.java index 19637f2..1f6cb56 100644 --- a/src/main/java/net/frozenorb/apiv3/route/ipLog/GETUserIpLog.java +++ b/src/main/java/net/frozenorb/apiv3/route/ipLog/GETIpLog.java @@ -7,7 +7,7 @@ import net.frozenorb.apiv3.model.IpLogEntry; import net.frozenorb.apiv3.model.User; import net.frozenorb.apiv3.util.ErrorUtils; -public final class GETUserIpLog implements Handler { +public final class GETIpLog implements Handler { public void handle(RoutingContext ctx) { User.findById(ctx.request().getParam("id"), (user, error) -> { diff --git a/src/main/java/net/frozenorb/apiv3/route/notificationTemplates/DELETENotificationTemplate.java b/src/main/java/net/frozenorb/apiv3/route/notificationTemplates/DELETENotificationTemplatesId.java similarity index 88% rename from src/main/java/net/frozenorb/apiv3/route/notificationTemplates/DELETENotificationTemplate.java rename to src/main/java/net/frozenorb/apiv3/route/notificationTemplates/DELETENotificationTemplatesId.java index 2b0b472..48339b2 100644 --- a/src/main/java/net/frozenorb/apiv3/route/notificationTemplates/DELETENotificationTemplate.java +++ b/src/main/java/net/frozenorb/apiv3/route/notificationTemplates/DELETENotificationTemplatesId.java @@ -6,7 +6,7 @@ import net.frozenorb.apiv3.APIv3; import net.frozenorb.apiv3.model.NotificationTemplate; import net.frozenorb.apiv3.util.ErrorUtils; -public final class DELETENotificationTemplate implements Handler { +public final class DELETENotificationTemplatesId implements Handler { public void handle(RoutingContext ctx) { NotificationTemplate notificationTemplate = NotificationTemplate.findByIdSync(ctx.request().getParam("id")); diff --git a/src/main/java/net/frozenorb/apiv3/route/notificationTemplates/GETNotificationTemplate.java b/src/main/java/net/frozenorb/apiv3/route/notificationTemplates/GETNotificationTemplatesId.java similarity index 88% rename from src/main/java/net/frozenorb/apiv3/route/notificationTemplates/GETNotificationTemplate.java rename to src/main/java/net/frozenorb/apiv3/route/notificationTemplates/GETNotificationTemplatesId.java index 3874364..2560e8f 100644 --- a/src/main/java/net/frozenorb/apiv3/route/notificationTemplates/GETNotificationTemplate.java +++ b/src/main/java/net/frozenorb/apiv3/route/notificationTemplates/GETNotificationTemplatesId.java @@ -6,7 +6,7 @@ import net.frozenorb.apiv3.APIv3; import net.frozenorb.apiv3.model.NotificationTemplate; import net.frozenorb.apiv3.util.ErrorUtils; -public final class GETNotificationTemplate implements Handler { +public final class GETNotificationTemplatesId implements Handler { public void handle(RoutingContext ctx) { NotificationTemplate.findById(ctx.request().getParam("id"), (notificationTemplate, error) -> { diff --git a/src/main/java/net/frozenorb/apiv3/route/notificationTemplates/POSTNotificationTemplate.java b/src/main/java/net/frozenorb/apiv3/route/notificationTemplates/POSTNotificationTemplates.java similarity index 88% rename from src/main/java/net/frozenorb/apiv3/route/notificationTemplates/POSTNotificationTemplate.java rename to src/main/java/net/frozenorb/apiv3/route/notificationTemplates/POSTNotificationTemplates.java index 3ee8ccf..2e006b9 100644 --- a/src/main/java/net/frozenorb/apiv3/route/notificationTemplates/POSTNotificationTemplate.java +++ b/src/main/java/net/frozenorb/apiv3/route/notificationTemplates/POSTNotificationTemplates.java @@ -5,7 +5,7 @@ import io.vertx.ext.web.RoutingContext; import net.frozenorb.apiv3.APIv3; import net.frozenorb.apiv3.model.NotificationTemplate; -public final class POSTNotificationTemplate implements Handler { +public final class POSTNotificationTemplates implements Handler { public void handle(RoutingContext ctx) { String id = ctx.request().getParam("id"); diff --git a/src/main/java/net/frozenorb/apiv3/route/punishments/DELETEPunishment.java b/src/main/java/net/frozenorb/apiv3/route/punishments/DELETEPunishments.java similarity index 95% rename from src/main/java/net/frozenorb/apiv3/route/punishments/DELETEPunishment.java rename to src/main/java/net/frozenorb/apiv3/route/punishments/DELETEPunishments.java index 4200481..8137411 100644 --- a/src/main/java/net/frozenorb/apiv3/route/punishments/DELETEPunishment.java +++ b/src/main/java/net/frozenorb/apiv3/route/punishments/DELETEPunishments.java @@ -12,7 +12,7 @@ import net.frozenorb.apiv3.model.User; import net.frozenorb.apiv3.unsorted.BlockingCallback; import net.frozenorb.apiv3.util.ErrorUtils; -public final class DELETEPunishment implements Handler { +public final class DELETEPunishments implements Handler { public void handle(RoutingContext ctx) { Punishment punishment = Punishment.findByIdSync(ctx.request().getParam("id")); diff --git a/src/main/java/net/frozenorb/apiv3/route/punishments/DELETEUserPunishment.java b/src/main/java/net/frozenorb/apiv3/route/punishments/DELETEUserActivePunishment.java similarity index 96% rename from src/main/java/net/frozenorb/apiv3/route/punishments/DELETEUserPunishment.java rename to src/main/java/net/frozenorb/apiv3/route/punishments/DELETEUserActivePunishment.java index 9d2bab3..cae0110 100644 --- a/src/main/java/net/frozenorb/apiv3/route/punishments/DELETEUserPunishment.java +++ b/src/main/java/net/frozenorb/apiv3/route/punishments/DELETEUserActivePunishment.java @@ -13,7 +13,7 @@ import net.frozenorb.apiv3.model.User; import net.frozenorb.apiv3.unsorted.BlockingCallback; import net.frozenorb.apiv3.util.ErrorUtils; -public final class DELETEUserPunishment implements Handler { +public final class DELETEUserActivePunishment implements Handler { public void handle(RoutingContext ctx) { User target = User.findByIdSync(ctx.request().getParam("id")); diff --git a/src/main/java/net/frozenorb/apiv3/route/punishments/GETPunishment.java b/src/main/java/net/frozenorb/apiv3/route/punishments/GETPunishmentsId.java similarity index 88% rename from src/main/java/net/frozenorb/apiv3/route/punishments/GETPunishment.java rename to src/main/java/net/frozenorb/apiv3/route/punishments/GETPunishmentsId.java index 756d2e8..6a4c99c 100644 --- a/src/main/java/net/frozenorb/apiv3/route/punishments/GETPunishment.java +++ b/src/main/java/net/frozenorb/apiv3/route/punishments/GETPunishmentsId.java @@ -6,7 +6,7 @@ import net.frozenorb.apiv3.APIv3; import net.frozenorb.apiv3.model.Punishment; import net.frozenorb.apiv3.util.ErrorUtils; -public final class GETPunishment implements Handler { +public final class GETPunishmentsId implements Handler { public void handle(RoutingContext ctx) { Punishment.findById(ctx.request().getParam("id"), (punishment, error) -> { diff --git a/src/main/java/net/frozenorb/apiv3/route/punishments/GETUserPunishments.java b/src/main/java/net/frozenorb/apiv3/route/punishments/GETUserPunishments.java deleted file mode 100644 index 7fb06f4..0000000 --- a/src/main/java/net/frozenorb/apiv3/route/punishments/GETUserPunishments.java +++ /dev/null @@ -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 { - - 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); - } - }); - } - }); - } - -} \ No newline at end of file diff --git a/src/main/java/net/frozenorb/apiv3/route/ranks/DELETERank.java b/src/main/java/net/frozenorb/apiv3/route/ranks/DELETERanksId.java similarity index 88% rename from src/main/java/net/frozenorb/apiv3/route/ranks/DELETERank.java rename to src/main/java/net/frozenorb/apiv3/route/ranks/DELETERanksId.java index 3ce134a..cebfdbe 100644 --- a/src/main/java/net/frozenorb/apiv3/route/ranks/DELETERank.java +++ b/src/main/java/net/frozenorb/apiv3/route/ranks/DELETERanksId.java @@ -6,7 +6,7 @@ import net.frozenorb.apiv3.APIv3; import net.frozenorb.apiv3.model.Rank; import net.frozenorb.apiv3.util.ErrorUtils; -public final class DELETERank implements Handler { +public final class DELETERanksId implements Handler { public void handle(RoutingContext ctx) { Rank rank = Rank.findById(ctx.request().getParam("id")); diff --git a/src/main/java/net/frozenorb/apiv3/route/ranks/GETRank.java b/src/main/java/net/frozenorb/apiv3/route/ranks/GETRanksId.java similarity index 82% rename from src/main/java/net/frozenorb/apiv3/route/ranks/GETRank.java rename to src/main/java/net/frozenorb/apiv3/route/ranks/GETRanksId.java index 44e4df0..0878262 100644 --- a/src/main/java/net/frozenorb/apiv3/route/ranks/GETRank.java +++ b/src/main/java/net/frozenorb/apiv3/route/ranks/GETRanksId.java @@ -5,7 +5,7 @@ import io.vertx.ext.web.RoutingContext; import net.frozenorb.apiv3.APIv3; import net.frozenorb.apiv3.model.Rank; -public final class GETRank implements Handler { +public final class GETRanksId implements Handler { public void handle(RoutingContext ctx) { APIv3.respondJson(ctx, Rank.findById(ctx.request().getParam("id"))); diff --git a/src/main/java/net/frozenorb/apiv3/route/ranks/POSTRank.java b/src/main/java/net/frozenorb/apiv3/route/ranks/POSTRanks.java similarity index 92% rename from src/main/java/net/frozenorb/apiv3/route/ranks/POSTRank.java rename to src/main/java/net/frozenorb/apiv3/route/ranks/POSTRanks.java index b4869e5..d5dbff4 100644 --- a/src/main/java/net/frozenorb/apiv3/route/ranks/POSTRank.java +++ b/src/main/java/net/frozenorb/apiv3/route/ranks/POSTRanks.java @@ -5,7 +5,7 @@ import io.vertx.ext.web.RoutingContext; import net.frozenorb.apiv3.APIv3; import net.frozenorb.apiv3.model.Rank; -public final class POSTRank implements Handler { +public final class POSTRanks implements Handler { public void handle(RoutingContext ctx) { String id = ctx.request().getParam("id"); diff --git a/src/main/java/net/frozenorb/apiv3/route/serverGroups/DELETEServerGroup.java b/src/main/java/net/frozenorb/apiv3/route/serverGroups/DELETEServerGroupsId.java similarity index 88% rename from src/main/java/net/frozenorb/apiv3/route/serverGroups/DELETEServerGroup.java rename to src/main/java/net/frozenorb/apiv3/route/serverGroups/DELETEServerGroupsId.java index f6d1f86..13875c5 100644 --- a/src/main/java/net/frozenorb/apiv3/route/serverGroups/DELETEServerGroup.java +++ b/src/main/java/net/frozenorb/apiv3/route/serverGroups/DELETEServerGroupsId.java @@ -6,7 +6,7 @@ import net.frozenorb.apiv3.APIv3; import net.frozenorb.apiv3.model.ServerGroup; import net.frozenorb.apiv3.util.ErrorUtils; -public final class DELETEServerGroup implements Handler { +public final class DELETEServerGroupsId implements Handler { public void handle(RoutingContext ctx) { ServerGroup serverGroup = ServerGroup.findById(ctx.request().getParam("id")); diff --git a/src/main/java/net/frozenorb/apiv3/route/serverGroups/GETServerGroup.java b/src/main/java/net/frozenorb/apiv3/route/serverGroups/GETServerGroupsId.java similarity index 81% rename from src/main/java/net/frozenorb/apiv3/route/serverGroups/GETServerGroup.java rename to src/main/java/net/frozenorb/apiv3/route/serverGroups/GETServerGroupsId.java index 1d1fc32..711a3dc 100644 --- a/src/main/java/net/frozenorb/apiv3/route/serverGroups/GETServerGroup.java +++ b/src/main/java/net/frozenorb/apiv3/route/serverGroups/GETServerGroupsId.java @@ -5,7 +5,7 @@ import io.vertx.ext.web.RoutingContext; import net.frozenorb.apiv3.APIv3; import net.frozenorb.apiv3.model.ServerGroup; -public final class GETServerGroup implements Handler { +public final class GETServerGroupsId implements Handler { public void handle(RoutingContext ctx) { APIv3.respondJson(ctx, ServerGroup.findById(ctx.request().getParam("id"))); diff --git a/src/main/java/net/frozenorb/apiv3/route/serverGroups/POSTServerGroup.java b/src/main/java/net/frozenorb/apiv3/route/serverGroups/POSTServerGroups.java similarity index 87% rename from src/main/java/net/frozenorb/apiv3/route/serverGroups/POSTServerGroup.java rename to src/main/java/net/frozenorb/apiv3/route/serverGroups/POSTServerGroups.java index 3aad7cf..1c76f63 100644 --- a/src/main/java/net/frozenorb/apiv3/route/serverGroups/POSTServerGroup.java +++ b/src/main/java/net/frozenorb/apiv3/route/serverGroups/POSTServerGroups.java @@ -5,7 +5,7 @@ import io.vertx.ext.web.RoutingContext; import net.frozenorb.apiv3.APIv3; import net.frozenorb.apiv3.model.ServerGroup; -public final class POSTServerGroup implements Handler { +public final class POSTServerGroups implements Handler { public void handle(RoutingContext ctx) { String id = ctx.request().getParam("id"); diff --git a/src/main/java/net/frozenorb/apiv3/route/servers/DELETEServer.java b/src/main/java/net/frozenorb/apiv3/route/servers/DELETEServersId.java similarity index 88% rename from src/main/java/net/frozenorb/apiv3/route/servers/DELETEServer.java rename to src/main/java/net/frozenorb/apiv3/route/servers/DELETEServersId.java index 32245fb..8d70ba9 100644 --- a/src/main/java/net/frozenorb/apiv3/route/servers/DELETEServer.java +++ b/src/main/java/net/frozenorb/apiv3/route/servers/DELETEServersId.java @@ -6,7 +6,7 @@ import net.frozenorb.apiv3.APIv3; import net.frozenorb.apiv3.model.Server; import net.frozenorb.apiv3.util.ErrorUtils; -public final class DELETEServer implements Handler { +public final class DELETEServersId implements Handler { public void handle(RoutingContext ctx) { Server server = Server.findById(ctx.request().getParam("id")); diff --git a/src/main/java/net/frozenorb/apiv3/route/servers/GETServer.java b/src/main/java/net/frozenorb/apiv3/route/servers/GETServersId.java similarity index 82% rename from src/main/java/net/frozenorb/apiv3/route/servers/GETServer.java rename to src/main/java/net/frozenorb/apiv3/route/servers/GETServersId.java index b7fcaf7..25e9843 100644 --- a/src/main/java/net/frozenorb/apiv3/route/servers/GETServer.java +++ b/src/main/java/net/frozenorb/apiv3/route/servers/GETServersId.java @@ -5,7 +5,7 @@ import io.vertx.ext.web.RoutingContext; import net.frozenorb.apiv3.APIv3; import net.frozenorb.apiv3.model.Server; -public final class GETServer implements Handler { +public final class GETServersId implements Handler { public void handle(RoutingContext ctx) { APIv3.respondJson(ctx, Server.findById(ctx.request().getParam("id"))); diff --git a/src/main/java/net/frozenorb/apiv3/route/servers/POSTServer.java b/src/main/java/net/frozenorb/apiv3/route/servers/POSTServers.java similarity index 94% rename from src/main/java/net/frozenorb/apiv3/route/servers/POSTServer.java rename to src/main/java/net/frozenorb/apiv3/route/servers/POSTServers.java index 19e5ff0..1fb6cda 100644 --- a/src/main/java/net/frozenorb/apiv3/route/servers/POSTServer.java +++ b/src/main/java/net/frozenorb/apiv3/route/servers/POSTServers.java @@ -11,7 +11,7 @@ import net.frozenorb.apiv3.util.IpUtils; import java.math.BigInteger; import java.util.Random; -public final class POSTServer implements Handler { +public final class POSTServers implements Handler { public void handle(RoutingContext ctx) { String id = ctx.request().getParam("id"); diff --git a/src/main/java/net/frozenorb/apiv3/route/servers/POSTServerHeartbeat.java b/src/main/java/net/frozenorb/apiv3/route/servers/POSTServersHeartbeat.java similarity index 98% rename from src/main/java/net/frozenorb/apiv3/route/servers/POSTServerHeartbeat.java rename to src/main/java/net/frozenorb/apiv3/route/servers/POSTServersHeartbeat.java index afb492c..3461afd 100644 --- a/src/main/java/net/frozenorb/apiv3/route/servers/POSTServerHeartbeat.java +++ b/src/main/java/net/frozenorb/apiv3/route/servers/POSTServersHeartbeat.java @@ -22,7 +22,7 @@ import java.util.Map; import java.util.UUID; @Slf4j -public final class POSTServerHeartbeat implements Handler { +public final class POSTServersHeartbeat implements Handler { public void handle(RoutingContext ctx) { Actor actor = ctx.get("actor"); diff --git a/src/main/java/net/frozenorb/apiv3/route/users/DELETEUserMeta.java b/src/main/java/net/frozenorb/apiv3/route/users/DELETEUserMeta.java deleted file mode 100644 index 7461fe3..0000000 --- a/src/main/java/net/frozenorb/apiv3/route/users/DELETEUserMeta.java +++ /dev/null @@ -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 { - - 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()); - } - } - -} \ No newline at end of file diff --git a/src/main/java/net/frozenorb/apiv3/route/users/GETUserMeta.java b/src/main/java/net/frozenorb/apiv3/route/users/GETUserMeta.java deleted file mode 100644 index 91221a1..0000000 --- a/src/main/java/net/frozenorb/apiv3/route/users/GETUserMeta.java +++ /dev/null @@ -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 { - - 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()); - } - -} \ No newline at end of file diff --git a/src/main/java/net/frozenorb/apiv3/route/users/PUTUserMeta.java b/src/main/java/net/frozenorb/apiv3/route/users/PUTUserMeta.java deleted file mode 100644 index 8a5ea09..0000000 --- a/src/main/java/net/frozenorb/apiv3/route/users/PUTUserMeta.java +++ /dev/null @@ -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 { - - 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); - } - -} \ No newline at end of file