Add some more async functionality
This commit is contained in:
parent
07e0a3328a
commit
26e84251b6
@ -131,16 +131,49 @@ public final class IpBan {
|
||||
return removedBy != null;
|
||||
}
|
||||
|
||||
public String getAccessDenialReason() {
|
||||
String accessDenialReason = "Your ip address has been suspended from the MineHQ Network. \n\n";
|
||||
// TODO: CLEANUP
|
||||
public void getAccessDenialReason(SingleResultCallback<String> callback) {
|
||||
Punishment.findByLinkedIpBanId(id, (punishment, error) -> {
|
||||
if (error != null) {
|
||||
callback.onResult(null, error);
|
||||
return;
|
||||
};
|
||||
|
||||
if (getExpiresAt() != null) {
|
||||
accessDenialReason += "Expires in " + TimeUtils.formatIntoDetailedString(TimeUtils.getSecondsBetween(getExpiresAt(), Instant.now()));
|
||||
} else {
|
||||
accessDenialReason += "Appeal at MineHQ.com/appeal";
|
||||
}
|
||||
if (punishment != null) {
|
||||
User.findById(punishment.getUser(), (user, error2) -> {
|
||||
if (error2 != null) {
|
||||
callback.onResult(null, error2);
|
||||
return;
|
||||
}
|
||||
|
||||
return accessDenialReason;
|
||||
String accessDenialReason;
|
||||
|
||||
if (user != null) {
|
||||
accessDenialReason = "Your IP address has been suspended from the MineHQ Network for a punishment related to " + user.getLastUsername() + ". \n\n";
|
||||
} else {
|
||||
accessDenialReason = "Your IP address has been suspended from the MineHQ Network. \n\n";
|
||||
}
|
||||
|
||||
if (getExpiresAt() != null) {
|
||||
accessDenialReason += "Expires in " + TimeUtils.formatIntoDetailedString(TimeUtils.getSecondsBetween(getExpiresAt(), Instant.now()));
|
||||
} else {
|
||||
accessDenialReason += "Appeal at MineHQ.com/appeal";
|
||||
}
|
||||
|
||||
callback.onResult(accessDenialReason, null);
|
||||
});
|
||||
} else {
|
||||
String accessDenialReason = "Your IP address has been suspended from the MineHQ Network. \n\n";
|
||||
|
||||
if (getExpiresAt() != null) {
|
||||
accessDenialReason += "Expires in " + TimeUtils.formatIntoDetailedString(TimeUtils.getSecondsBetween(getExpiresAt(), Instant.now()));
|
||||
} else {
|
||||
accessDenialReason += "Appeal at MineHQ.com/appeal";
|
||||
}
|
||||
|
||||
callback.onResult(accessDenialReason, null);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void insert() {
|
||||
|
@ -13,18 +13,19 @@ import fr.javatic.mongo.jacksonCodec.Entity;
|
||||
import fr.javatic.mongo.jacksonCodec.objectId.Id;
|
||||
import io.vertx.core.CompositeFuture;
|
||||
import io.vertx.core.Future;
|
||||
import io.vertx.core.cli.converters.BooleanConverter;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import net.frozenorb.apiv3.APIv3;
|
||||
import net.frozenorb.apiv3.serialization.gson.ExcludeFromReplies;
|
||||
import net.frozenorb.apiv3.serialization.jackson.UUIDJsonDeserializer;
|
||||
import net.frozenorb.apiv3.serialization.jackson.UUIDJsonSerializer;
|
||||
import net.frozenorb.apiv3.serialization.jackson.UuidJsonDeserializer;
|
||||
import net.frozenorb.apiv3.serialization.jackson.UuidJsonSerializer;
|
||||
import net.frozenorb.apiv3.unsorted.BlockingCallback;
|
||||
import net.frozenorb.apiv3.util.MojangUtils;
|
||||
import net.frozenorb.apiv3.util.PermissionUtils;
|
||||
import net.frozenorb.apiv3.util.SyncUtils;
|
||||
import net.frozenorb.apiv3.util.UUIDUtils;
|
||||
import net.frozenorb.apiv3.util.UuidUtils;
|
||||
import org.bson.Document;
|
||||
|
||||
import java.time.Instant;
|
||||
@ -36,7 +37,7 @@ public final class User {
|
||||
|
||||
private static final MongoCollection<User> usersCollection = APIv3.getDatabase().getCollection("users", User.class);
|
||||
|
||||
@Getter @Id @JsonSerialize(using=UUIDJsonSerializer.class) @JsonDeserialize(using=UUIDJsonDeserializer.class) private UUID id;
|
||||
@Getter @Id @JsonSerialize(using=UuidJsonSerializer.class) @JsonDeserialize(using=UuidJsonDeserializer.class) private UUID id;
|
||||
@Getter private String lastUsername;
|
||||
@Getter @ExcludeFromReplies private Map<String, Instant> aliases = new HashMap<>();
|
||||
@Getter @ExcludeFromReplies @Setter private String totpSecret;
|
||||
@ -59,7 +60,7 @@ public final class User {
|
||||
|
||||
try {
|
||||
uuid = UUID.fromString(id);
|
||||
} catch (IllegalArgumentException ex) {
|
||||
} catch (NullPointerException | IllegalArgumentException ex) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ -67,7 +68,7 @@ public final class User {
|
||||
}
|
||||
|
||||
public static User findByIdSync(UUID id) {
|
||||
if (UUIDUtils.isAcceptableUUID(id)) {
|
||||
if (UuidUtils.isAcceptableUuid(id)) {
|
||||
return SyncUtils.blockOne(usersCollection.find(new Document("_id", id)));
|
||||
} else {
|
||||
return null;
|
||||
@ -96,7 +97,7 @@ public final class User {
|
||||
}
|
||||
|
||||
public static void findById(UUID id, SingleResultCallback<User> callback) {
|
||||
if (UUIDUtils.isAcceptableUUID(id)) {
|
||||
if (UuidUtils.isAcceptableUuid(id)) {
|
||||
usersCollection.find(new Document("_id", id)).first(callback);
|
||||
} else {
|
||||
callback.onResult(null, null);
|
||||
@ -133,6 +134,8 @@ public final class User {
|
||||
|
||||
public User() {} // For Morphia
|
||||
|
||||
// TODO: THIS IS CURRENTLY BLOCKING. MAYBE FOR THE HEARTBEAT WE CAN DO SOMETHING
|
||||
// TO MAKE IT NOT SO BLOCKING
|
||||
public User(UUID id, String lastUsername) {
|
||||
this.id = id;
|
||||
this.lastUsername = ""; // Intentional, so updateUsername actually does something.
|
||||
@ -145,13 +148,16 @@ public final class User {
|
||||
this.lastSeenAt = Instant.now();
|
||||
this.firstSeenAt = Instant.now();
|
||||
|
||||
// TODO: MAKE THIS ASYNC? SOMEHOW?
|
||||
BlockingCallback<Void> blockingCallback = new BlockingCallback<>();
|
||||
updateUsername(lastUsername, blockingCallback);
|
||||
blockingCallback.get();
|
||||
updateUsername(lastUsername);
|
||||
}
|
||||
|
||||
public boolean hasPermissionAnywhere(String permission) {
|
||||
Map<String, Boolean> globalPermissions = getGlobalPermissions();
|
||||
return globalPermissions.containsKey(permission) && globalPermissions.get(permission);
|
||||
}
|
||||
|
||||
// TODO: ASYNC
|
||||
public Map<String, Boolean> getGlobalPermissions() {
|
||||
Map<String, Boolean> globalPermissions = PermissionUtils.getDefaultPermissions(getHighestRankAnywhere());
|
||||
|
||||
for (Map.Entry<ServerGroup, Rank> serverGroupEntry : getHighestRanks().entrySet()) {
|
||||
@ -164,7 +170,7 @@ public final class User {
|
||||
);
|
||||
}
|
||||
|
||||
return globalPermissions.containsKey(permission) && globalPermissions.get(permission);
|
||||
return ImmutableMap.copyOf(globalPermissions);
|
||||
}
|
||||
|
||||
// TODO: Clean
|
||||
@ -188,31 +194,20 @@ public final class User {
|
||||
this.online = false;
|
||||
}
|
||||
|
||||
public void updateUsername(String newUsername, SingleResultCallback<Void> callback) {
|
||||
this.aliases.put(newUsername, Instant.now());
|
||||
public void updateUsername(String newUsername) {
|
||||
if (!newUsername.equals(lastUsername)) {
|
||||
this.lastUsername = newUsername;
|
||||
|
||||
if (newUsername.equalsIgnoreCase(lastUsername)) {
|
||||
callback.onResult(null, null);
|
||||
return;
|
||||
User withNewUsername;
|
||||
|
||||
while ((withNewUsername = User.findByLastUsernameSync(newUsername)) != null) {
|
||||
BlockingCallback<String> callback = new BlockingCallback<>();
|
||||
MojangUtils.getName(withNewUsername.getId(), callback);
|
||||
withNewUsername.updateUsername(callback.get());
|
||||
}
|
||||
}
|
||||
|
||||
this.lastUsername = newUsername;
|
||||
|
||||
User.findByLastUsername(newUsername, (otherUser, error) -> {
|
||||
if (error != null) {
|
||||
callback.onResult(null, error);
|
||||
} else if (otherUser != null) {
|
||||
MojangUtils.getName(otherUser.getId(), (newName, error2) -> {
|
||||
if (error2 != null) {
|
||||
callback.onResult(null, error2);
|
||||
} else {
|
||||
otherUser.updateUsername(newName, callback);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
callback.onResult(null, null);
|
||||
}
|
||||
});
|
||||
this.aliases.put(newUsername, Instant.now());
|
||||
}
|
||||
|
||||
public void setPassword(String input) {
|
||||
@ -378,9 +373,14 @@ public final class User {
|
||||
"activeBanId", activeBan.getId()
|
||||
);
|
||||
} else if (activeIpBan != null) {
|
||||
// TODO: ASYNC
|
||||
BlockingCallback<String> callback = new BlockingCallback<>();
|
||||
activeIpBan.getAccessDenialReason(callback);
|
||||
String reason = callback.get();
|
||||
|
||||
access = ImmutableMap.of(
|
||||
"allowed", false,
|
||||
"message", activeIpBan.getAccessDenialReason(),
|
||||
"message", reason,
|
||||
"activeIpBanId", activeIpBan.getId()
|
||||
);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user