diff --git a/application.yml b/application.yml index 339e4eb..dafef5f 100644 --- a/application.yml +++ b/application.yml @@ -1,5 +1,5 @@ -mongoUri: mongodb://localhost:27017/HQAPI -redisUri: redis://localhost:6379 +mongoUri: mongodb://Admin:admin@15.160.229.161:27017/HQAPI?authMechanism=SCRAM-SHA-1&authSource=admin +redisUri: redis://15.160.229.161:6379 network: name: MineHQ Network diff --git a/src/main/java/net/frozenorb/apiv3/APIv3.java b/src/main/java/net/frozenorb/apiv3/APIv3.java index 9309e4b..25b4b07 100644 --- a/src/main/java/net/frozenorb/apiv3/APIv3.java +++ b/src/main/java/net/frozenorb/apiv3/APIv3.java @@ -80,22 +80,7 @@ import net.frozenorb.apiv3.web.route.servers.GETServersId; import net.frozenorb.apiv3.web.route.servers.GETServersPlayerCountId; import net.frozenorb.apiv3.web.route.servers.POSTServers; import net.frozenorb.apiv3.web.route.servers.POSTServersHeartbeat; -import net.frozenorb.apiv3.web.route.users.GETStaff; -import net.frozenorb.apiv3.web.route.users.GETUsersId; -import net.frozenorb.apiv3.web.route.users.GETUsersIdCompoundedPermissions; -import net.frozenorb.apiv3.web.route.users.GETUsersIdDetails; -import net.frozenorb.apiv3.web.route.users.GETUsersIdRequiresTotp; -import net.frozenorb.apiv3.web.route.users.GETUsersIdVerifyPassword; -import net.frozenorb.apiv3.web.route.users.POSTUsersIdChangePassword; -import net.frozenorb.apiv3.web.route.users.POSTUsersIdConfirmPhone; -import net.frozenorb.apiv3.web.route.users.POSTUsersIdLogin; -import net.frozenorb.apiv3.web.route.users.POSTUsersIdNotify; -import net.frozenorb.apiv3.web.route.users.POSTUsersIdPasswordReset; -import net.frozenorb.apiv3.web.route.users.POSTUsersIdRegisterEmail; -import net.frozenorb.apiv3.web.route.users.POSTUsersIdRegisterPhone; -import net.frozenorb.apiv3.web.route.users.POSTUsersIdSetupTotp; -import net.frozenorb.apiv3.web.route.users.POSTUsersIdVerifyTotp; -import net.frozenorb.apiv3.web.route.users.POSTUsersUsePasswordResetToken; +import net.frozenorb.apiv3.web.route.users.*; import net.frozenorb.apiv3.util.SpringUtils; import org.springframework.beans.factory.annotation.Value; @@ -223,7 +208,7 @@ public final class APIv3 { httpDelete(router, "/ranks/:rankId", DELETERanksId.class); httpGet(router, "/serverGroups/:serverGroupId", GETServerGroupsId.class); - httpGet(router, "/serverGroups/:serverGroupId/playerCount", GETServerGroupsPlayerCount.class); + httpGet(router, "/serverGroups/:serverGroupId/playerCount", GETServerGroupsPlayerCount.class); httpGet(router, "/serverGroups", GETServerGroups.class); httpPost(router, "/serverGroups", POSTServerGroups.class); //httpPut(router, "/serverGroups/:serverGroupId", PUTServerGroupsId.class); @@ -237,7 +222,6 @@ public final class APIv3 { //httpPut(router, "/servers/:serverId", PUTServersId.class); httpDelete(router, "/servers/:serverId", DELETEServersId.class); - httpGet(router, "/prefixes/:prefixId", GETPrefixesId.class); httpGet(router, "/prefixes", GETPrefixes.class); httpPost(router, "/prefixes", POSTPrefixes.class); @@ -266,6 +250,8 @@ public final class APIv3 { httpPost(router, "/users/usePasswordResetToken", POSTUsersUsePasswordResetToken.class); httpPost(router, "/users/:userId/setupTotp", POSTUsersIdSetupTotp.class); httpPost(router, "/users/:userId/verifyTotp", POSTUsersIdVerifyTotp.class); + httpPost(router, "/users/:userId/colors", POSTUsersIdChangeColors.class); + httpPost(router, "/users/:userId/prefix", POSTUsersIdChangePrefix.class); httpGet(router, "/dumps/:dumpType", GETDumpsType.class); httpGet(router, "/search", GETSearch.class); @@ -288,17 +274,17 @@ public final class APIv3 { } } - public static void respondRawJson(RoutingContext ctx, int code, String response) { - ctx.response().putHeader(HttpHeaders.CONTENT_TYPE, MediaType.JSON_UTF_8.toString()); + public static void respondRawJson(RoutingContext ctx, int code, String response) { + ctx.response().putHeader(HttpHeaders.CONTENT_TYPE, MediaType.JSON_UTF_8.toString()); - if (response == null) { - ctx.response().setStatusCode(404); - ctx.response().end("{}"); - } else { - ctx.response().setStatusCode(code); - ctx.response().end(response); - } - } + if (response == null) { + ctx.response().setStatusCode(404); + ctx.response().end("{}"); + } else { + ctx.response().setStatusCode(code); + ctx.response().end(response); + } + } private void httpGet(Router router, String route, Class handler) { router.get(route).blockingHandler((Handler) SpringUtils.getBean(handler), false); diff --git a/src/main/java/net/frozenorb/apiv3/domain/User.java b/src/main/java/net/frozenorb/apiv3/domain/User.java index 9efd93f..592af7c 100644 --- a/src/main/java/net/frozenorb/apiv3/domain/User.java +++ b/src/main/java/net/frozenorb/apiv3/domain/User.java @@ -14,8 +14,6 @@ import com.mongodb.async.SingleResultCallback; import com.mongodb.async.client.MongoCollection; import com.mongodb.async.client.MongoDatabase; -import net.frozenorb.apiv3.service.geoip.GeoIpInfo; -import net.frozenorb.apiv3.service.geoip.GeoIpUserType; import net.frozenorb.apiv3.service.mojang.MojangService; import net.frozenorb.apiv3.serialization.gson.ExcludeFromReplies; import net.frozenorb.apiv3.serialization.jackson.UuidJsonDeserializer; @@ -66,7 +64,7 @@ public final class User { @Getter @Id @JsonSerialize(using = UuidJsonSerializer.class) @JsonDeserialize(using = UuidJsonDeserializer.class) private UUID id; @Getter private String lastUsername; - @Getter private String lastUsernameLower; + @Getter private String lastUsernameLower; @Getter @ExcludeFromReplies private Map aliases = new HashMap<>(); @Getter @ExcludeFromReplies @Setter private String totpSecret; @Getter @ExcludeFromReplies private String password; @@ -88,6 +86,9 @@ public final class User { @Getter private Instant lastSeenAt; @Getter private Instant firstSeenAt; @Getter private boolean online; + @Getter private String activePrefix; + @Getter private String iconColor; + @Getter private String nameColor; public static void findAll(SingleResultCallback> callback) { usersCollection.find().sort(new Document("lastSeenAt", -1)).into(new LinkedList<>(), SyncUtils.vertxWrap(callback)); @@ -178,26 +179,26 @@ public final class User { usersCollection.find(new Document("lastUsername", lastUsername)).first(SyncUtils.vertxWrap(callback)); } - public static void findByLastUsernameLower(String lastUsernameLower, SingleResultCallback callback) { - usersCollection.find(new Document("lastUsernameLower", lastUsernameLower.toLowerCase())).first(SyncUtils.vertxWrap(callback)); - } + public static void findByLastUsernameLower(String lastUsernameLower, SingleResultCallback callback) { + usersCollection.find(new Document("lastUsernameLower", lastUsernameLower.toLowerCase())).first(SyncUtils.vertxWrap(callback)); + } - public static void findByIdGrouped(Set search, SingleResultCallback> callback) { - usersCollection.find(new Document("_id", new Document("$in", search))).into(new LinkedList<>(), SyncUtils.vertxWrap((users, error) -> { - if (error != null) { - callback.onResult(null, error); - return; - } + public static void findByIdGrouped(Set search, SingleResultCallback> callback) { + usersCollection.find(new Document("_id", new Document("$in", search))).into(new LinkedList<>(), SyncUtils.vertxWrap((users, error) -> { + if (error != null) { + callback.onResult(null, error); + return; + } - Map result = new HashMap<>(); + Map result = new HashMap<>(); - for (User user : users) { - result.put(user.getId(), user); - } + for (User user : users) { + result.put(user.getId(), user); + } - callback.onResult(result, null); - })); - } + callback.onResult(result, null); + })); + } public static void findOrCreateByIdGrouped(Map search, SingleResultCallback> callback) { usersCollection.find(new Document("_id", new Document("$in", search.keySet()))).into(new LinkedList<>(), SyncUtils.vertxWrap((users, error) -> { @@ -256,7 +257,7 @@ public final class User { public User(UUID id, String lastUsername) { this.id = id; this.lastUsername = lastUsername; - this.lastUsernameLower = lastUsername.toLowerCase(); + this.lastUsernameLower = lastUsername.toLowerCase(); this.aliases = new HashMap<>(); this.lastSeenAt = Instant.now(); this.firstSeenAt = Instant.now(); @@ -267,7 +268,7 @@ public final class User { public void updateUsername(String newUsername) { this.aliases.put(newUsername, Instant.now()); this.lastUsername = newUsername; - this.lastUsernameLower = newUsername.toLowerCase(); + this.lastUsernameLower = newUsername.toLowerCase(); } public void checkNameCollisions(SingleResultCallback callback) { @@ -311,6 +312,7 @@ public final class User { Future> punishmentsFuture = Future.future(); Future> ipBansFuture = Future.future(); Future> grantsFuture = Future.future(); + Future> prefixGrantsFuture = Future.future(); Punishment.findByUserAndType(this, ImmutableSet.of( Punishment.PunishmentType.BLACKLIST, @@ -325,8 +327,9 @@ public final class User { } Grant.findByUser(this, new MongoToVertxCallback<>(grantsFuture)); + PrefixGrant.findByUser(this, new MongoToVertxCallback<>(prefixGrantsFuture)); - CompositeFuture.all(punishmentsFuture, ipBansFuture, grantsFuture).setHandler((result) -> { + CompositeFuture.all(punishmentsFuture, ipBansFuture, grantsFuture, prefixGrantsFuture).setHandler((result) -> { if (result.failed()) { callback.onResult(null, result.cause()); return; @@ -335,8 +338,9 @@ public final class User { Iterable punishments = result.result().result(0); Iterable ipBans = result.result().result(1); Iterable grants = result.result().result(2); + Iterable prefixGrants = result.result().result(3); - getLoginInfo(server, punishments, ipBans, grants, (loginInfo, error) -> { + getLoginInfo(server, punishments, ipBans, grants, prefixGrants, (loginInfo, error) -> { if (error != null) { callback.onResult(null, error); } else { @@ -347,7 +351,7 @@ public final class User { } // This is only used to help batch requests to mongo - public void getLoginInfo(Server server, Iterable punishments, Iterable ipBans, Iterable grants, SingleResultCallback> callback) { + public void getLoginInfo(Server server, Iterable punishments, Iterable ipBans, Iterable grants, Iterable prefixGrants, SingleResultCallback> callback) { getAccessInfo(punishments, ipBans, (accessInfo, error) -> { if (error != null) { callback.onResult(null, error); @@ -390,6 +394,23 @@ public final class User { result.put("access", accessInfo); } + if (iconColor != null) { + result.put("iconColor", iconColor); + } + + if (nameColor != null) { + result.put("nameColor", nameColor); + } + + List prefixes = getPrefixesScoped(serverGroup, prefixGrants); + if (!prefixes.isEmpty()) { + result.put("prefixes", Collections2.transform(prefixes, Prefix::getId)); + } + + if (activePrefix != null) { + result.put("activePrefix", activePrefix); + } + callback.onResult(result, null); }); } @@ -603,6 +624,15 @@ public final class User { this.phoneVerificationFailedAttempts = null; } + public void updateColors(String iconColor, String nameColor) { + this.iconColor = iconColor; + this.nameColor = nameColor; + } + + public void updateActivePrefix(String prefix) { + this.activePrefix = prefix; + } + public void hasPermissionAnywhere(String permission, SingleResultCallback callback) { getCompoundedPermissions((permissions, error) -> { if (error != null) { @@ -690,16 +720,14 @@ public final class User { } Rank parent = otherRank; - if(parent != null) { - // Iterate up the inheritance tree to detect rank redundancies. - while (parent.getInheritsFromId() != null) { - if (parent == grantedRank) { - grantedRanks.remove(grantedRank); - } - - parent = Rank.findById(parent.getInheritsFromId()); + // Iterate up the inheritance tree to detect rank redundancies. + while (parent.getInheritsFromId() != null) { + if (parent == grantedRank) { + grantedRanks.remove(grantedRank); } + + parent = Rank.findById(parent.getInheritsFromId()); } } } @@ -709,6 +737,27 @@ public final class User { return ImmutableList.copyOf(grantedRanksList); } + private List getPrefixesScoped(ServerGroup serverGroup, Iterable grants) { + Set grantedPrefixes = new HashSet<>(); + + for (PrefixGrant grant : grants) { + if (!grant.isActive() || (serverGroup != null && !grant.appliesOn(serverGroup))) { + continue; + } + + Prefix grantedPrefix = Prefix.findById(grant.getPrefix()); + + if (grantedPrefix != null) { + grantedPrefixes.add(grantedPrefix); + } else { + log.warn(lastUsername + " (" + id + ") has a grant for a non-existant rank: " + grant.getPrefix()); + } + } + + List grantedRanksList = new ArrayList<>(grantedPrefixes); + return ImmutableList.copyOf(grantedRanksList); + } + public void insert(SingleResultCallback callback) { usersCollection.insertOne(this, SyncUtils.vertxWrap(callback)); } @@ -717,4 +766,4 @@ public final class User { usersCollection.replaceOne(new Document("_id", id), this, SyncUtils.vertxWrap(new MongoToVoidMongoCallback<>(callback))); } -} +} \ No newline at end of file diff --git a/src/main/java/net/frozenorb/apiv3/service/auditlog/AuditLogActionType.java b/src/main/java/net/frozenorb/apiv3/service/auditlog/AuditLogActionType.java index ed005c4..2c6b2c1 100644 --- a/src/main/java/net/frozenorb/apiv3/service/auditlog/AuditLogActionType.java +++ b/src/main/java/net/frozenorb/apiv3/service/auditlog/AuditLogActionType.java @@ -30,7 +30,6 @@ public enum AuditLogActionType { PREFIXGRANT_CREATE(false), PREFIXGRANT_UPDATE(false), PREFIXGRANT_DELETE(false), - IP_BAN_CREATE(false), IP_BAN_UPDATE(false), IP_BAN_DELETE(false), @@ -69,8 +68,6 @@ public enum AuditLogActionType { PREFIX_CREATE(false), PREFIX_UPDATE(false), PREFIX_DELETE(false), - - SERVER_GROUP_CREATE(false), SERVER_GROUP_UPDATE(false), SERVER_GROUP_DELETE(false), @@ -86,7 +83,9 @@ public enum AuditLogActionType { USER_CONFIRM_EMAIL(false), USER_CONFIRM_PHONE(false), USER_SETUP_TOTP(false), - USER_VERIFY_TOTP(false); + USER_VERIFY_TOTP(false), + USER_CHANGE_COLORS(false), + USER_CHANGE_PREFIX(false); @Getter private boolean reversible; diff --git a/src/main/java/net/frozenorb/apiv3/unsorted/Permissions.java b/src/main/java/net/frozenorb/apiv3/unsorted/Permissions.java index 2ec4198..cc2c976 100644 --- a/src/main/java/net/frozenorb/apiv3/unsorted/Permissions.java +++ b/src/main/java/net/frozenorb/apiv3/unsorted/Permissions.java @@ -19,4 +19,5 @@ public class Permissions { public static final String CREATE_PREFIXGRANT = rootPermission + ".prefixgrant.create"; public static final String REMOVE_PREFIXGRANT = rootPermission + ".prefixgrant.remove"; + } \ No newline at end of file diff --git a/src/main/java/net/frozenorb/apiv3/web/route/prefix/GETPrefixes.java b/src/main/java/net/frozenorb/apiv3/web/route/prefix/GETPrefixes.java index ddb5a24..67c3bc3 100644 --- a/src/main/java/net/frozenorb/apiv3/web/route/prefix/GETPrefixes.java +++ b/src/main/java/net/frozenorb/apiv3/web/route/prefix/GETPrefixes.java @@ -4,11 +4,8 @@ import io.vertx.core.Handler; import io.vertx.ext.web.RoutingContext; import net.frozenorb.apiv3.APIv3; import net.frozenorb.apiv3.domain.Prefix; -import net.frozenorb.apiv3.domain.Rank; import org.springframework.stereotype.Component; -import java.util.ArrayList; - @Component public final class GETPrefixes implements Handler { diff --git a/src/main/java/net/frozenorb/apiv3/web/route/prefixGrants/GETPrefixGrants.java b/src/main/java/net/frozenorb/apiv3/web/route/prefixGrants/GETPrefixGrants.java index b800678..825dc25 100644 --- a/src/main/java/net/frozenorb/apiv3/web/route/prefixGrants/GETPrefixGrants.java +++ b/src/main/java/net/frozenorb/apiv3/web/route/prefixGrants/GETPrefixGrants.java @@ -1,18 +1,16 @@ package net.frozenorb.apiv3.web.route.prefixGrants; +import io.vertx.core.Handler; +import io.vertx.ext.web.RoutingContext; import net.frozenorb.apiv3.APIv3; import net.frozenorb.apiv3.domain.PrefixGrant; import net.frozenorb.apiv3.util.ErrorUtils; import net.frozenorb.apiv3.util.UuidUtils; - import org.bson.Document; import org.springframework.stereotype.Component; import java.util.stream.Collectors; -import io.vertx.core.Handler; -import io.vertx.ext.web.RoutingContext; - @Component public final class GETPrefixGrants implements Handler { diff --git a/src/main/java/net/frozenorb/apiv3/web/route/prefixGrants/GETPrefixGrantsId.java b/src/main/java/net/frozenorb/apiv3/web/route/prefixGrants/GETPrefixGrantsId.java index fcfcae4..02f662f 100644 --- a/src/main/java/net/frozenorb/apiv3/web/route/prefixGrants/GETPrefixGrantsId.java +++ b/src/main/java/net/frozenorb/apiv3/web/route/prefixGrants/GETPrefixGrantsId.java @@ -3,7 +3,6 @@ package net.frozenorb.apiv3.web.route.prefixGrants; import io.vertx.core.Handler; import io.vertx.ext.web.RoutingContext; import net.frozenorb.apiv3.APIv3; -import net.frozenorb.apiv3.domain.Grant; import net.frozenorb.apiv3.domain.PrefixGrant; import net.frozenorb.apiv3.util.ErrorUtils; import org.springframework.stereotype.Component; diff --git a/src/main/java/net/frozenorb/apiv3/web/route/prefixGrants/POSTPrefixGrants.java b/src/main/java/net/frozenorb/apiv3/web/route/prefixGrants/POSTPrefixGrants.java index 99fddd7..080f4af 100644 --- a/src/main/java/net/frozenorb/apiv3/web/route/prefixGrants/POSTPrefixGrants.java +++ b/src/main/java/net/frozenorb/apiv3/web/route/prefixGrants/POSTPrefixGrants.java @@ -5,7 +5,10 @@ import io.vertx.core.Handler; import io.vertx.core.json.JsonObject; import io.vertx.ext.web.RoutingContext; import net.frozenorb.apiv3.APIv3; -import net.frozenorb.apiv3.domain.*; +import net.frozenorb.apiv3.domain.Prefix; +import net.frozenorb.apiv3.domain.PrefixGrant; +import net.frozenorb.apiv3.domain.ServerGroup; +import net.frozenorb.apiv3.domain.User; import net.frozenorb.apiv3.service.auditlog.AuditLog; import net.frozenorb.apiv3.service.auditlog.AuditLogActionType; import net.frozenorb.apiv3.service.totp.TotpAuthorizationResult; diff --git a/src/main/java/net/frozenorb/apiv3/web/route/servers/POSTServersHeartbeat.java b/src/main/java/net/frozenorb/apiv3/web/route/servers/POSTServersHeartbeat.java index 666173c..74381f5 100644 --- a/src/main/java/net/frozenorb/apiv3/web/route/servers/POSTServersHeartbeat.java +++ b/src/main/java/net/frozenorb/apiv3/web/route/servers/POSTServersHeartbeat.java @@ -4,14 +4,9 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import net.frozenorb.apiv3.APIv3; +import net.frozenorb.apiv3.domain.*; import net.frozenorb.apiv3.unsorted.actor.Actor; import net.frozenorb.apiv3.unsorted.actor.ActorType; -import net.frozenorb.apiv3.domain.Grant; -import net.frozenorb.apiv3.domain.Punishment; -import net.frozenorb.apiv3.domain.Rank; -import net.frozenorb.apiv3.domain.Server; -import net.frozenorb.apiv3.domain.ServerGroup; -import net.frozenorb.apiv3.domain.User; import net.frozenorb.apiv3.unsorted.MongoToVertxCallback; import net.frozenorb.apiv3.util.ErrorUtils; import net.frozenorb.apiv3.util.IpUtils; @@ -40,16 +35,14 @@ public final class POSTServersHeartbeat implements Handler { public void handle(RoutingContext ctx) { Actor actor = ctx.get("actor"); + if (actor.getType() != ActorType.SERVER) { - ErrorUtils.respondOther(ctx, 403, - "This action can only be performed when requested by a server.", "serverOnly", ImmutableMap.of()); + ErrorUtils.respondOther(ctx, 403, "This action can only be performed when requested by a server.", "serverOnly", ImmutableMap.of()); return; } Server actorServer = Server.findById(actor.getName()); - JsonObject requestBody = ctx.getBodyAsJson(); - JsonObject players = requestBody.getJsonObject("players"); Map playerNames = extractPlayerNames(players); Map playerIps = extractPlayerIps(players); @@ -69,46 +62,44 @@ public final class POSTServersHeartbeat implements Handler { "events", result.result().result(3) )); } else { - result.cause().printStackTrace(); ErrorUtils.respondInternalError(ctx, result.cause()); } }); } private Future createInfoResponse(Server server, double tps, Map playerNames) { - Future callback = Future.future(); - if (server != null && playerNames != null) { - server.receivedHeartbeat(tps, playerNames.keySet()); - server.save((ignored, error) -> { - if (error != null) { - callback.fail(error); - } else { - callback.complete(); - } - }); - } + server.receivedHeartbeat(tps, playerNames.keySet()); + server.save((ignored, error) -> { + if (error != null) { + callback.fail(error); + } else { + callback.complete(); + } + }); return callback; } private Future> createPlayerResponse(Server server, Map playerNames, Map playerIps) { - Future> callback = Future.future(); Future> userLookupCallback = Future.future(); Future>> grantLookupCallback = Future.future(); Future>> punishmentLookupCallback = Future.future(); + Future>> prefixGrantLookupCallback = Future.future(); User.findOrCreateByIdGrouped(playerNames, new MongoToVertxCallback<>(userLookupCallback)); Grant.findByUserGrouped(playerNames.keySet(), new MongoToVertxCallback<>(grantLookupCallback)); Punishment.findByUserGrouped(playerNames.keySet(), new MongoToVertxCallback<>(punishmentLookupCallback)); + PrefixGrant.findByUserGrouped(playerNames.keySet(), new MongoToVertxCallback<>(prefixGrantLookupCallback)); CompositeFuture.all( userLookupCallback, grantLookupCallback, - punishmentLookupCallback + punishmentLookupCallback, + prefixGrantLookupCallback ).setHandler((batchLookupInfo) -> { if (batchLookupInfo.failed()) { callback.fail(batchLookupInfo.cause()); @@ -118,11 +109,12 @@ public final class POSTServersHeartbeat implements Handler { Map users = batchLookupInfo.result().result(0); Map> grants = batchLookupInfo.result().result(1); Map> punishments = batchLookupInfo.result().result(2); + Map> prefixGrants = batchLookupInfo.result().result(3); Map loginInfoFutures = new HashMap<>(); users.forEach((uuid, user) -> { Future> loginInfoFuture = Future.future(); - createLoginInfo(user, server, grants.get(uuid), punishments.get(uuid), loginInfoFuture); + createLoginInfo(user, server, grants.get(uuid), punishments.get(uuid), prefixGrants.get(uuid), loginInfoFuture); loginInfoFutures.put(uuid, loginInfoFuture); }); @@ -142,19 +134,18 @@ public final class POSTServersHeartbeat implements Handler { } private Future> createPermissionsResponse(ServerGroup serverGroup) { - Future> callback = Future.future(); Map permissionsResponse = new HashMap<>(); for (Rank rank : Rank.findAll()) { - Map defaultCalculatedPermissions = ServerGroup.findDefault().calculatePermissions(rank); - Map calculatedPermissions = serverGroup.calculatePermissions(rank); Map scopedPermissions = PermissionUtils.mergePermissions( - defaultCalculatedPermissions, - calculatedPermissions + ServerGroup.findDefault().calculatePermissions(rank), + serverGroup.calculatePermissions(rank) ); + permissionsResponse.put(rank.getId(), PermissionUtils.convertToList(scopedPermissions)); } + callback.complete(permissionsResponse); return callback; } @@ -245,7 +236,7 @@ public final class POSTServersHeartbeat implements Handler { return result; } - private void createLoginInfo(User user, Server server, List grants, List punishments, Future> callback) { + private void createLoginInfo(User user, Server server, List grants, List punishments, List prefixGrants, Future> callback) { if (user.seenOnServer(server)) { user.save((ignored, error) -> { if (error != null) { @@ -253,10 +244,10 @@ public final class POSTServersHeartbeat implements Handler { return; } - user.getLoginInfo(server, punishments, ImmutableList.of(), grants, new MongoToVertxCallback<>(callback)); + user.getLoginInfo(server, punishments, ImmutableList.of(), grants, prefixGrants, new MongoToVertxCallback<>(callback)); }); } else { - user.getLoginInfo(server, punishments, ImmutableList.of(), grants, new MongoToVertxCallback<>(callback)); + user.getLoginInfo(server, punishments, ImmutableList.of(), grants, prefixGrants, new MongoToVertxCallback<>(callback)); } } diff --git a/src/main/java/net/frozenorb/apiv3/web/route/users/GETStaff.java b/src/main/java/net/frozenorb/apiv3/web/route/users/GETStaff.java index e661d2d..db699af 100644 --- a/src/main/java/net/frozenorb/apiv3/web/route/users/GETStaff.java +++ b/src/main/java/net/frozenorb/apiv3/web/route/users/GETStaff.java @@ -1,21 +1,15 @@ package net.frozenorb.apiv3.web.route.users; +import io.vertx.core.Handler; +import io.vertx.ext.web.RoutingContext; import net.frozenorb.apiv3.APIv3; import net.frozenorb.apiv3.domain.Grant; import net.frozenorb.apiv3.domain.Rank; import net.frozenorb.apiv3.domain.User; import net.frozenorb.apiv3.util.SyncUtils; - import org.springframework.stereotype.Component; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; - -import io.vertx.core.Handler; -import io.vertx.ext.web.RoutingContext; +import java.util.*; @Component public final class GETStaff implements Handler { diff --git a/src/main/java/net/frozenorb/apiv3/web/route/users/GETUsersId.java b/src/main/java/net/frozenorb/apiv3/web/route/users/GETUsersId.java index 8de15bb..584e245 100644 --- a/src/main/java/net/frozenorb/apiv3/web/route/users/GETUsersId.java +++ b/src/main/java/net/frozenorb/apiv3/web/route/users/GETUsersId.java @@ -1,13 +1,11 @@ package net.frozenorb.apiv3.web.route.users; -import net.frozenorb.apiv3.APIv3; -import net.frozenorb.apiv3.domain.User; -import net.frozenorb.apiv3.util.ErrorUtils; - -import org.springframework.stereotype.Component; - import io.vertx.core.Handler; import io.vertx.ext.web.RoutingContext; +import net.frozenorb.apiv3.APIv3; +import net.frozenorb.apiv3.domain.User; +import net.frozenorb.apiv3.util.ErrorUtils; +import org.springframework.stereotype.Component; @Component public final class GETUsersId implements Handler { diff --git a/src/main/java/net/frozenorb/apiv3/web/route/users/GETUsersIdCompoundedPermissions.java b/src/main/java/net/frozenorb/apiv3/web/route/users/GETUsersIdCompoundedPermissions.java index 20a615b..d482433 100644 --- a/src/main/java/net/frozenorb/apiv3/web/route/users/GETUsersIdCompoundedPermissions.java +++ b/src/main/java/net/frozenorb/apiv3/web/route/users/GETUsersIdCompoundedPermissions.java @@ -1,15 +1,13 @@ package net.frozenorb.apiv3.web.route.users; +import io.vertx.core.Handler; +import io.vertx.ext.web.RoutingContext; import net.frozenorb.apiv3.APIv3; import net.frozenorb.apiv3.domain.User; import net.frozenorb.apiv3.util.ErrorUtils; import net.frozenorb.apiv3.util.PermissionUtils; - import org.springframework.stereotype.Component; -import io.vertx.core.Handler; -import io.vertx.ext.web.RoutingContext; - @Component public final class GETUsersIdCompoundedPermissions implements Handler { diff --git a/src/main/java/net/frozenorb/apiv3/web/route/users/GETUsersIdDetails.java b/src/main/java/net/frozenorb/apiv3/web/route/users/GETUsersIdDetails.java index 681eb3a..8ee8b4a 100644 --- a/src/main/java/net/frozenorb/apiv3/web/route/users/GETUsersIdDetails.java +++ b/src/main/java/net/frozenorb/apiv3/web/route/users/GETUsersIdDetails.java @@ -1,5 +1,7 @@ package net.frozenorb.apiv3.web.route.users; +import io.vertx.core.Handler; +import io.vertx.ext.web.RoutingContext; import net.frozenorb.apiv3.APIv3; import net.frozenorb.apiv3.domain.Grant; import net.frozenorb.apiv3.domain.IpLogEntry; @@ -7,16 +9,12 @@ import net.frozenorb.apiv3.domain.Punishment; import net.frozenorb.apiv3.domain.User; import net.frozenorb.apiv3.util.ErrorUtils; import net.frozenorb.apiv3.util.SyncUtils; - import org.springframework.stereotype.Component; import java.util.HashMap; import java.util.List; import java.util.Map; -import io.vertx.core.Handler; -import io.vertx.ext.web.RoutingContext; - @Component public final class GETUsersIdDetails implements Handler { diff --git a/src/main/java/net/frozenorb/apiv3/web/route/users/GETUsersIdRequiresTotp.java b/src/main/java/net/frozenorb/apiv3/web/route/users/GETUsersIdRequiresTotp.java index 185aa9b..b655ab4 100644 --- a/src/main/java/net/frozenorb/apiv3/web/route/users/GETUsersIdRequiresTotp.java +++ b/src/main/java/net/frozenorb/apiv3/web/route/users/GETUsersIdRequiresTotp.java @@ -1,18 +1,15 @@ package net.frozenorb.apiv3.web.route.users; import com.google.common.collect.ImmutableMap; - +import io.vertx.core.Handler; +import io.vertx.ext.web.RoutingContext; import net.frozenorb.apiv3.APIv3; import net.frozenorb.apiv3.domain.User; import net.frozenorb.apiv3.service.totp.RequiresTotpResult; import net.frozenorb.apiv3.util.ErrorUtils; import net.frozenorb.apiv3.util.IpUtils; - import org.springframework.stereotype.Component; -import io.vertx.core.Handler; -import io.vertx.ext.web.RoutingContext; - @Component public final class GETUsersIdRequiresTotp implements Handler { diff --git a/src/main/java/net/frozenorb/apiv3/web/route/users/GETUsersIdVerifyPassword.java b/src/main/java/net/frozenorb/apiv3/web/route/users/GETUsersIdVerifyPassword.java index b4e2ad8..5b20cea 100644 --- a/src/main/java/net/frozenorb/apiv3/web/route/users/GETUsersIdVerifyPassword.java +++ b/src/main/java/net/frozenorb/apiv3/web/route/users/GETUsersIdVerifyPassword.java @@ -1,16 +1,16 @@ package net.frozenorb.apiv3.web.route.users; import com.mongodb.async.SingleResultCallback; - +import io.vertx.core.Handler; +import io.vertx.ext.web.RoutingContext; import net.frozenorb.apiv3.APIv3; +import net.frozenorb.apiv3.domain.User; import net.frozenorb.apiv3.service.auditlog.AuditLog; import net.frozenorb.apiv3.service.auditlog.AuditLogActionType; -import net.frozenorb.apiv3.domain.User; import net.frozenorb.apiv3.service.usersession.UserSessionService; import net.frozenorb.apiv3.util.ErrorUtils; import net.frozenorb.apiv3.util.IpUtils; import net.frozenorb.apiv3.util.SyncUtils; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -18,9 +18,6 @@ import java.util.HashMap; import java.util.Map; import java.util.UUID; -import io.vertx.core.Handler; -import io.vertx.ext.web.RoutingContext; - @Component public final class GETUsersIdVerifyPassword implements Handler { diff --git a/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersIdChangeColors.java b/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersIdChangeColors.java new file mode 100644 index 0000000..b43f624 --- /dev/null +++ b/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersIdChangeColors.java @@ -0,0 +1,36 @@ +package net.frozenorb.apiv3.web.route.users; + +import com.google.common.collect.ImmutableMap; +import io.vertx.core.Handler; +import io.vertx.core.json.JsonObject; +import io.vertx.ext.web.RoutingContext; +import net.frozenorb.apiv3.APIv3; +import net.frozenorb.apiv3.domain.User; +import net.frozenorb.apiv3.util.ErrorUtils; +import net.frozenorb.apiv3.util.SyncUtils; +import org.springframework.stereotype.Component; + +@Component +public final class POSTUsersIdChangeColors implements Handler { + @Override + public void handle(RoutingContext ctx) { + User user = SyncUtils.runBlocking(v -> User.findById(ctx.request().getParam("userId"), v)); + + if (user == null) { + ErrorUtils.respondNotFound(ctx, "User", ctx.request().getParam("userId")); + return; + } + + JsonObject requestBody = ctx.getBodyAsJson(); + + String iconColor = requestBody.getString("iconColor"); + String nameColor = requestBody.getString("nameColor"); + + user.updateColors(iconColor, nameColor); + SyncUtils.runBlocking(user::save); + + APIv3.respondJson(ctx, 200, ImmutableMap.of( + "success", true + )); + } +} diff --git a/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersIdChangePassword.java b/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersIdChangePassword.java index 6db8f78..2f9fcee 100644 --- a/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersIdChangePassword.java +++ b/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersIdChangePassword.java @@ -1,11 +1,13 @@ package net.frozenorb.apiv3.web.route.users; import com.google.common.collect.ImmutableMap; - +import io.vertx.core.Handler; +import io.vertx.core.json.JsonObject; +import io.vertx.ext.web.RoutingContext; import net.frozenorb.apiv3.APIv3; +import net.frozenorb.apiv3.domain.User; import net.frozenorb.apiv3.service.auditlog.AuditLog; import net.frozenorb.apiv3.service.auditlog.AuditLogActionType; -import net.frozenorb.apiv3.domain.User; import net.frozenorb.apiv3.service.totp.RequiresTotpResult; import net.frozenorb.apiv3.service.totp.TotpAuthorizationResult; import net.frozenorb.apiv3.service.usersession.UserSessionService; @@ -13,14 +15,9 @@ import net.frozenorb.apiv3.util.ErrorUtils; import net.frozenorb.apiv3.util.IpUtils; import net.frozenorb.apiv3.util.PasswordUtils; import net.frozenorb.apiv3.util.SyncUtils; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import io.vertx.core.Handler; -import io.vertx.core.json.JsonObject; -import io.vertx.ext.web.RoutingContext; - @Component public final class POSTUsersIdChangePassword implements Handler { diff --git a/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersIdChangePrefix.java b/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersIdChangePrefix.java new file mode 100644 index 0000000..f60249f --- /dev/null +++ b/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersIdChangePrefix.java @@ -0,0 +1,44 @@ +package net.frozenorb.apiv3.web.route.users; + +import com.google.common.collect.ImmutableMap; +import io.vertx.core.Handler; +import io.vertx.core.json.JsonObject; +import io.vertx.ext.web.RoutingContext; +import net.frozenorb.apiv3.APIv3; +import net.frozenorb.apiv3.domain.Prefix; +import net.frozenorb.apiv3.domain.User; +import net.frozenorb.apiv3.util.ErrorUtils; +import net.frozenorb.apiv3.util.SyncUtils; +import org.springframework.stereotype.Component; + +@Component +public final class POSTUsersIdChangePrefix implements Handler { + @Override + public void handle(RoutingContext ctx) { + User user = SyncUtils.runBlocking(v -> User.findById(ctx.request().getParam("userId"), v)); + + if (user == null) { + ErrorUtils.respondNotFound(ctx, "User", ctx.request().getParam("userId")); + return; + } + + JsonObject requestBody = ctx.getBodyAsJson(); + String prefixId = requestBody.getString("prefix"); + + // prefixid can be null + if (prefixId != null) { + Prefix prefix = Prefix.findById(prefixId); + if (prefix == null) { + ErrorUtils.respondNotFound(ctx, "Prefix", requestBody.getString("prefix")); + return; + } + } + + user.updateActivePrefix(prefixId); + SyncUtils.runBlocking(user::save); + + APIv3.respondJson(ctx, 200, ImmutableMap.of( + "success", true + )); + } +} diff --git a/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersIdConfirmPhone.java b/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersIdConfirmPhone.java index 39e6195..5edf763 100644 --- a/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersIdConfirmPhone.java +++ b/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersIdConfirmPhone.java @@ -1,22 +1,19 @@ package net.frozenorb.apiv3.web.route.users; import com.google.common.collect.ImmutableMap; - -import net.frozenorb.apiv3.APIv3; -import net.frozenorb.apiv3.service.auditlog.AuditLog; -import net.frozenorb.apiv3.service.auditlog.AuditLogActionType; -import net.frozenorb.apiv3.domain.User; -import net.frozenorb.apiv3.util.ErrorUtils; -import net.frozenorb.apiv3.util.IpUtils; -import net.frozenorb.apiv3.util.SyncUtils; - -import org.springframework.stereotype.Component; - -import java.util.concurrent.TimeUnit; - import io.vertx.core.Handler; import io.vertx.core.json.JsonObject; import io.vertx.ext.web.RoutingContext; +import net.frozenorb.apiv3.APIv3; +import net.frozenorb.apiv3.domain.User; +import net.frozenorb.apiv3.service.auditlog.AuditLog; +import net.frozenorb.apiv3.service.auditlog.AuditLogActionType; +import net.frozenorb.apiv3.util.ErrorUtils; +import net.frozenorb.apiv3.util.IpUtils; +import net.frozenorb.apiv3.util.SyncUtils; +import org.springframework.stereotype.Component; + +import java.util.concurrent.TimeUnit; @Component public final class POSTUsersIdConfirmPhone implements Handler { diff --git a/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersIdLogin.java b/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersIdLogin.java index 768a596..78da196 100644 --- a/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersIdLogin.java +++ b/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersIdLogin.java @@ -1,26 +1,22 @@ package net.frozenorb.apiv3.web.route.users; import com.google.common.collect.ImmutableMap; - import com.mongodb.async.SingleResultCallback; - -import net.frozenorb.apiv3.APIv3; -import net.frozenorb.apiv3.unsorted.actor.Actor; -import net.frozenorb.apiv3.unsorted.actor.ActorType; -import net.frozenorb.apiv3.domain.IpLogEntry; -import net.frozenorb.apiv3.domain.Server; -import net.frozenorb.apiv3.domain.User; -import net.frozenorb.apiv3.util.ErrorUtils; -import net.frozenorb.apiv3.util.IpUtils; -import net.frozenorb.apiv3.util.UuidUtils; - -import org.springframework.stereotype.Component; - -import java.util.UUID; - import io.vertx.core.Handler; import io.vertx.core.json.JsonObject; import io.vertx.ext.web.RoutingContext; +import net.frozenorb.apiv3.APIv3; +import net.frozenorb.apiv3.domain.IpLogEntry; +import net.frozenorb.apiv3.domain.Server; +import net.frozenorb.apiv3.domain.User; +import net.frozenorb.apiv3.unsorted.actor.Actor; +import net.frozenorb.apiv3.unsorted.actor.ActorType; +import net.frozenorb.apiv3.util.ErrorUtils; +import net.frozenorb.apiv3.util.IpUtils; +import net.frozenorb.apiv3.util.UuidUtils; +import org.springframework.stereotype.Component; + +import java.util.UUID; @Component public final class POSTUsersIdLogin implements Handler { diff --git a/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersIdNotify.java b/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersIdNotify.java index 4933d14..a942f3b 100644 --- a/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersIdNotify.java +++ b/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersIdNotify.java @@ -1,24 +1,21 @@ package net.frozenorb.apiv3.web.route.users; import com.google.common.collect.ImmutableMap; - +import io.vertx.core.Handler; +import io.vertx.core.json.JsonObject; +import io.vertx.ext.web.RoutingContext; import net.frozenorb.apiv3.APIv3; -import net.frozenorb.apiv3.service.email.EmailService; import net.frozenorb.apiv3.domain.NotificationTemplate; import net.frozenorb.apiv3.domain.User; +import net.frozenorb.apiv3.service.email.EmailService; import net.frozenorb.apiv3.unsorted.Notification; import net.frozenorb.apiv3.util.ErrorUtils; import net.frozenorb.apiv3.util.SyncUtils; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.Map; -import io.vertx.core.Handler; -import io.vertx.core.json.JsonObject; -import io.vertx.ext.web.RoutingContext; - @Component public final class POSTUsersIdNotify implements Handler { diff --git a/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersIdPasswordReset.java b/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersIdPasswordReset.java index af728a3..380a5a9 100644 --- a/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersIdPasswordReset.java +++ b/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersIdPasswordReset.java @@ -1,28 +1,25 @@ package net.frozenorb.apiv3.web.route.users; import com.google.common.collect.ImmutableMap; - +import io.vertx.core.Handler; +import io.vertx.core.json.JsonObject; +import io.vertx.ext.web.RoutingContext; import net.frozenorb.apiv3.APIv3; +import net.frozenorb.apiv3.domain.NotificationTemplate; +import net.frozenorb.apiv3.domain.User; import net.frozenorb.apiv3.service.auditlog.AuditLog; import net.frozenorb.apiv3.service.auditlog.AuditLogActionType; import net.frozenorb.apiv3.service.email.EmailService; -import net.frozenorb.apiv3.domain.NotificationTemplate; -import net.frozenorb.apiv3.domain.User; import net.frozenorb.apiv3.unsorted.Notification; import net.frozenorb.apiv3.util.ErrorUtils; import net.frozenorb.apiv3.util.IpUtils; import net.frozenorb.apiv3.util.SyncUtils; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.Map; import java.util.concurrent.TimeUnit; -import io.vertx.core.Handler; -import io.vertx.core.json.JsonObject; -import io.vertx.ext.web.RoutingContext; - @Component public final class POSTUsersIdPasswordReset implements Handler { diff --git a/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersIdRegisterEmail.java b/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersIdRegisterEmail.java index 56f73a6..46df68b 100644 --- a/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersIdRegisterEmail.java +++ b/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersIdRegisterEmail.java @@ -1,30 +1,27 @@ package net.frozenorb.apiv3.web.route.users; import com.google.common.collect.ImmutableMap; - +import io.vertx.core.Handler; +import io.vertx.core.json.JsonObject; +import io.vertx.ext.web.RoutingContext; import net.frozenorb.apiv3.APIv3; -import net.frozenorb.apiv3.service.auditlog.AuditLog; -import net.frozenorb.apiv3.service.auditlog.AuditLogActionType; -import net.frozenorb.apiv3.service.emaildomain.EmailDomainService; -import net.frozenorb.apiv3.service.email.EmailService; import net.frozenorb.apiv3.domain.NotificationTemplate; import net.frozenorb.apiv3.domain.User; +import net.frozenorb.apiv3.service.auditlog.AuditLog; +import net.frozenorb.apiv3.service.auditlog.AuditLogActionType; +import net.frozenorb.apiv3.service.email.EmailService; +import net.frozenorb.apiv3.service.emaildomain.EmailDomainService; import net.frozenorb.apiv3.unsorted.Notification; import net.frozenorb.apiv3.util.EmailUtils; import net.frozenorb.apiv3.util.ErrorUtils; import net.frozenorb.apiv3.util.IpUtils; import net.frozenorb.apiv3.util.SyncUtils; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.Map; import java.util.concurrent.TimeUnit; -import io.vertx.core.Handler; -import io.vertx.core.json.JsonObject; -import io.vertx.ext.web.RoutingContext; - @Component public final class POSTUsersIdRegisterEmail implements Handler { diff --git a/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersIdRegisterPhone.java b/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersIdRegisterPhone.java index 6265578..cfd1e9c 100644 --- a/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersIdRegisterPhone.java +++ b/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersIdRegisterPhone.java @@ -1,31 +1,28 @@ package net.frozenorb.apiv3.web.route.users; import com.google.common.collect.ImmutableMap; - +import io.vertx.core.Handler; +import io.vertx.core.json.JsonObject; +import io.vertx.ext.web.RoutingContext; import net.frozenorb.apiv3.APIv3; -import net.frozenorb.apiv3.service.auditlog.AuditLog; -import net.frozenorb.apiv3.service.auditlog.AuditLogActionType; import net.frozenorb.apiv3.domain.BannedCellCarrier; import net.frozenorb.apiv3.domain.NotificationTemplate; import net.frozenorb.apiv3.domain.PhoneIntel; import net.frozenorb.apiv3.domain.User; +import net.frozenorb.apiv3.service.auditlog.AuditLog; +import net.frozenorb.apiv3.service.auditlog.AuditLogActionType; import net.frozenorb.apiv3.service.sms.SmsService; import net.frozenorb.apiv3.unsorted.Notification; import net.frozenorb.apiv3.util.ErrorUtils; import net.frozenorb.apiv3.util.IpUtils; import net.frozenorb.apiv3.util.PhoneUtils; import net.frozenorb.apiv3.util.SyncUtils; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.Map; import java.util.concurrent.TimeUnit; -import io.vertx.core.Handler; -import io.vertx.core.json.JsonObject; -import io.vertx.ext.web.RoutingContext; - @Component public final class POSTUsersIdRegisterPhone implements Handler { diff --git a/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersIdSetupTotp.java b/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersIdSetupTotp.java index c89557c..411b9d8 100644 --- a/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersIdSetupTotp.java +++ b/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersIdSetupTotp.java @@ -1,23 +1,20 @@ package net.frozenorb.apiv3.web.route.users; import com.google.common.collect.ImmutableMap; - +import io.vertx.core.Handler; +import io.vertx.core.json.JsonObject; +import io.vertx.ext.web.RoutingContext; import net.frozenorb.apiv3.APIv3; +import net.frozenorb.apiv3.domain.User; import net.frozenorb.apiv3.service.auditlog.AuditLog; import net.frozenorb.apiv3.service.auditlog.AuditLogActionType; -import net.frozenorb.apiv3.domain.User; import net.frozenorb.apiv3.service.totp.TotpService; import net.frozenorb.apiv3.util.ErrorUtils; import net.frozenorb.apiv3.util.IpUtils; import net.frozenorb.apiv3.util.SyncUtils; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import io.vertx.core.Handler; -import io.vertx.core.json.JsonObject; -import io.vertx.ext.web.RoutingContext; - @Component public final class POSTUsersIdSetupTotp implements Handler { diff --git a/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersIdVerifyTotp.java b/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersIdVerifyTotp.java index 425f277..25758d1 100644 --- a/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersIdVerifyTotp.java +++ b/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersIdVerifyTotp.java @@ -1,19 +1,16 @@ package net.frozenorb.apiv3.web.route.users; import com.google.common.collect.ImmutableMap; - -import net.frozenorb.apiv3.APIv3; -import net.frozenorb.apiv3.service.auditlog.AuditLog; -import net.frozenorb.apiv3.service.auditlog.AuditLogActionType; -import net.frozenorb.apiv3.domain.User; -import net.frozenorb.apiv3.util.ErrorUtils; -import net.frozenorb.apiv3.util.IpUtils; - -import org.springframework.stereotype.Component; - import io.vertx.core.Handler; import io.vertx.core.json.JsonObject; import io.vertx.ext.web.RoutingContext; +import net.frozenorb.apiv3.APIv3; +import net.frozenorb.apiv3.domain.User; +import net.frozenorb.apiv3.service.auditlog.AuditLog; +import net.frozenorb.apiv3.service.auditlog.AuditLogActionType; +import net.frozenorb.apiv3.util.ErrorUtils; +import net.frozenorb.apiv3.util.IpUtils; +import org.springframework.stereotype.Component; @Component public final class POSTUsersIdVerifyTotp implements Handler { diff --git a/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersUsePasswordResetToken.java b/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersUsePasswordResetToken.java index 5427a04..5ed1caa 100644 --- a/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersUsePasswordResetToken.java +++ b/src/main/java/net/frozenorb/apiv3/web/route/users/POSTUsersUsePasswordResetToken.java @@ -1,26 +1,23 @@ package net.frozenorb.apiv3.web.route.users; import com.google.common.collect.ImmutableMap; - +import io.vertx.core.Handler; +import io.vertx.core.json.JsonObject; +import io.vertx.ext.web.RoutingContext; import net.frozenorb.apiv3.APIv3; +import net.frozenorb.apiv3.domain.User; import net.frozenorb.apiv3.service.auditlog.AuditLog; import net.frozenorb.apiv3.service.auditlog.AuditLogActionType; -import net.frozenorb.apiv3.domain.User; import net.frozenorb.apiv3.service.usersession.UserSessionService; import net.frozenorb.apiv3.util.ErrorUtils; import net.frozenorb.apiv3.util.IpUtils; import net.frozenorb.apiv3.util.PasswordUtils; import net.frozenorb.apiv3.util.SyncUtils; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.concurrent.TimeUnit; -import io.vertx.core.Handler; -import io.vertx.core.json.JsonObject; -import io.vertx.ext.web.RoutingContext; - @Component public final class POSTUsersUsePasswordResetToken implements Handler {