diff --git a/src/main/java/net/frozenorb/apiv3/accessor/AuditLog.java b/src/main/java/net/frozenorb/apiv3/accessor/AuditLog.java index 16f1246..0eaedac 100644 --- a/src/main/java/net/frozenorb/apiv3/accessor/AuditLog.java +++ b/src/main/java/net/frozenorb/apiv3/accessor/AuditLog.java @@ -4,7 +4,6 @@ import com.mongodb.async.SingleResultCallback; import lombok.experimental.UtilityClass; import net.frozenorb.apiv3.APIv3; import net.frozenorb.apiv3.model.AuditLogEntry; -import net.frozenorb.apiv3.util.IPUtils; import net.frozenorb.apiv3.util.MongoUtils; import org.bson.Document; import org.bson.types.ObjectId; @@ -12,7 +11,6 @@ import org.bson.types.ObjectId; import java.util.Collection; import java.util.Date; import java.util.UUID; -import java.util.concurrent.Callable; @UtilityClass public class AuditLog { @@ -28,21 +26,25 @@ public class AuditLog { MongoUtils.findAndTransform(COLLECTION_NAME, new Document("performedBy", performer.toString()), TIME_BASED_SORT, AuditLogEntry::new, callback); } - public static void findByPerformerIp(long machineIp, SingleResultCallback> callback) { - MongoUtils.findAndTransform(COLLECTION_NAME, new Document("performedFrom", machineIp), TIME_BASED_SORT, AuditLogEntry::new, callback); + public static void findByPerformerIp(String performerIp, SingleResultCallback> callback) { + MongoUtils.findAndTransform(COLLECTION_NAME, new Document("performedFrom", performerIp), TIME_BASED_SORT, AuditLogEntry::new, callback); } public static void findByActionType(String actionType, SingleResultCallback> callback) { MongoUtils.findAndTransform(COLLECTION_NAME, new Document("actionType", actionType), TIME_BASED_SORT, AuditLogEntry::new, callback); } + public static void findByEntryId(String entryId, SingleResultCallback callback) { + MongoUtils.findOneAndTransform(COLLECTION_NAME, new Document("_id", entryId), AuditLogEntry::new, callback); + } + public static void log(UUID user, String userIp, String actionType, Document data, SingleResultCallback callback) { Document insert = new Document(); insert.put("_id", new ObjectId().toString()); insert.put("performedBy", user.toString()); insert.put("performedAt", new Date()); - insert.put("performedFrom", IPUtils.humanToMachine(userIp)); + insert.put("performedFrom", userIp); insert.put("actionType", actionType); insert.put("actionData", data); diff --git a/src/main/java/net/frozenorb/apiv3/accessor/EmailTemplates.java b/src/main/java/net/frozenorb/apiv3/accessor/EmailTemplates.java index d1c0a28..108cdef 100644 --- a/src/main/java/net/frozenorb/apiv3/accessor/EmailTemplates.java +++ b/src/main/java/net/frozenorb/apiv3/accessor/EmailTemplates.java @@ -4,14 +4,11 @@ import com.mongodb.async.SingleResultCallback; import lombok.experimental.UtilityClass; import net.frozenorb.apiv3.APIv3; import net.frozenorb.apiv3.model.EmailTemplate; -import net.frozenorb.apiv3.util.IPUtils; import net.frozenorb.apiv3.util.MongoUtils; import org.bson.Document; -import org.bson.types.ObjectId; import java.time.Instant; import java.util.Collection; -import java.util.Date; import java.util.UUID; @UtilityClass diff --git a/src/main/java/net/frozenorb/apiv3/accessor/Grants.java b/src/main/java/net/frozenorb/apiv3/accessor/Grants.java index 974dc50..e3642d8 100644 --- a/src/main/java/net/frozenorb/apiv3/accessor/Grants.java +++ b/src/main/java/net/frozenorb/apiv3/accessor/Grants.java @@ -2,11 +2,16 @@ package net.frozenorb.apiv3.accessor; import com.mongodb.async.SingleResultCallback; import lombok.experimental.UtilityClass; +import net.frozenorb.apiv3.APIv3; import net.frozenorb.apiv3.model.Grant; import net.frozenorb.apiv3.util.MongoUtils; import org.bson.Document; +import org.bson.types.ObjectId; +import java.time.Instant; import java.util.Collection; +import java.util.Date; +import java.util.Set; import java.util.UUID; @UtilityClass @@ -31,4 +36,20 @@ public class Grants { MongoUtils.findAndTransform(COLLECTION_NAME, new Document("addedBy", addedBy.toString()), TIME_BASED_SORT, Grant::new, callback); } + public static void createGrant(UUID target, Set scopes, String rank, Instant expiresAt, UUID addedBy, String reason, SingleResultCallback callback) { + Document insert = new Document(); + + insert.put("_id", new ObjectId().toString()); + insert.put("target", target.toString()); + insert.put("reason", reason); + insert.put("scopes", scopes); + insert.put("rank", rank); + insert.put("expiresAt", expiresAt); + + insert.put("addedBy", addedBy.toString()); + insert.put("addedAt", Instant.now()); + + APIv3.getMongo().getCollection(COLLECTION_NAME).insertOne(insert, callback); + } + } \ 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 10a75ba..88aa73d 100644 --- a/src/main/java/net/frozenorb/apiv3/model/AuditLogEntry.java +++ b/src/main/java/net/frozenorb/apiv3/model/AuditLogEntry.java @@ -3,7 +3,6 @@ package net.frozenorb.apiv3.model; import lombok.Getter; import lombok.ToString; import net.frozenorb.apiv3.accessor.AuditLog; -import net.frozenorb.apiv3.util.IPUtils; import org.bson.Document; import java.time.Instant; @@ -15,7 +14,7 @@ public final class AuditLogEntry extends BaseModel { @Getter private String id; @Getter private UUID performedBy; @Getter private Instant performedAt; - @Getter private long performedFrom; + @Getter private String performedFrom; @Getter private String actionType; @Getter private Document actionData; @@ -25,7 +24,7 @@ public final class AuditLogEntry extends BaseModel { this.id = json.getString("_id"); this.performedBy = UUID.fromString(json.getString("performedBy")); this.performedAt = (Instant) json.get("performedAt"); - this.performedFrom = json.getLong("performedFrom"); + this.performedFrom = json.getString("performedFrom"); this.actionType = json.getString("actionType"); this.actionData = (Document) json.get("actionData"); @@ -38,7 +37,7 @@ public final class AuditLogEntry extends BaseModel { json.put("id", id); json.put("performedBy", performedBy.toString()); json.put("performedAt", performedAt.toString()); - json.put("performedFrom", IPUtils.machineToHuman(performedFrom)); + json.put("performedFrom", performedFrom); json.put("actionType", actionType); return json; diff --git a/src/main/java/net/frozenorb/apiv3/model/EmailTemplate.java b/src/main/java/net/frozenorb/apiv3/model/EmailTemplate.java index 7fb091d..ccf26c6 100644 --- a/src/main/java/net/frozenorb/apiv3/model/EmailTemplate.java +++ b/src/main/java/net/frozenorb/apiv3/model/EmailTemplate.java @@ -1,5 +1,8 @@ package net.frozenorb.apiv3.model; +import com.mongodb.async.SingleResultCallback; +import com.mongodb.client.result.DeleteResult; +import com.mongodb.client.result.UpdateResult; import lombok.Getter; import lombok.ToString; import net.frozenorb.apiv3.accessor.EmailTemplates; @@ -42,7 +45,7 @@ public final class EmailTemplate extends BaseModel { return json; } - public void update(String title, String body, UUID updatedBy) { + public void update(String title, String body, UUID updatedBy, SingleResultCallback callback) { this.title = title; this.body = body; this.lastUpdatedAt = Instant.now(); @@ -55,11 +58,11 @@ public final class EmailTemplate extends BaseModel { set.put("lastUpdatedAt", lastUpdatedAt.toString()); set.put("lastUpdatedBy", lastUpdatedBy.toString()); - super.update(new Document("$set", set), (result, error) -> {}); + super.update(new Document("$set", set), callback); } - public void delete() { - super.delete((result, error) -> {}); + public void delete(SingleResultCallback callback) { + super.delete(callback); } public String fillTitle(Map replacements) { diff --git a/src/main/java/net/frozenorb/apiv3/model/Grant.java b/src/main/java/net/frozenorb/apiv3/model/Grant.java index a060d82..b4a7f57 100644 --- a/src/main/java/net/frozenorb/apiv3/model/Grant.java +++ b/src/main/java/net/frozenorb/apiv3/model/Grant.java @@ -1,6 +1,9 @@ package net.frozenorb.apiv3.model; import com.google.common.collect.ImmutableSet; +import com.mongodb.async.SingleResultCallback; +import com.mongodb.client.result.DeleteResult; +import com.mongodb.client.result.UpdateResult; import lombok.Getter; import lombok.ToString; import net.frozenorb.apiv3.accessor.Grants; @@ -50,7 +53,7 @@ public final class Grant extends BaseModel { setId(id); } - public void delete(UUID removedBy, String reason) { + public void delete(UUID removedBy, String reason, SingleResultCallback callback) { this.removedBy = removedBy; this.removedAt = Instant.now(); this.removalReason = reason; @@ -61,7 +64,7 @@ public final class Grant extends BaseModel { set.put("removedAt", removedAt); set.put("removalReason", removalReason); - super.update(new Document("$set", set), (result, error) -> {}); + super.update(new Document("$set", set), callback); } public boolean isActive() { diff --git a/src/main/java/net/frozenorb/apiv3/model/IPLogEntry.java b/src/main/java/net/frozenorb/apiv3/model/IPLogEntry.java index 834caee..7a4fa9a 100644 --- a/src/main/java/net/frozenorb/apiv3/model/IPLogEntry.java +++ b/src/main/java/net/frozenorb/apiv3/model/IPLogEntry.java @@ -14,7 +14,7 @@ public final class IPLogEntry extends BaseModel { @Getter private String id; @Getter private UUID user; - @Getter private long ip; + @Getter private String ip; @Getter private Instant firstSeen; @Getter private Instant lastSeen; @Getter private int uses; @@ -24,7 +24,7 @@ public final class IPLogEntry extends BaseModel { this.id = json.getString("_id"); this.user = UUID.fromString(json.getString("user")); - this.ip = json.getLong("ip"); + this.ip = json.getString("ip"); this.lastSeen = (Instant) json.get("lastSeen"); this.firstSeen = (Instant) json.get("firstSeen"); this.uses = json.getInteger("uses"); diff --git a/src/main/java/net/frozenorb/apiv3/util/IPUtils.java b/src/main/java/net/frozenorb/apiv3/util/IPUtils.java deleted file mode 100644 index 15a8c9a..0000000 --- a/src/main/java/net/frozenorb/apiv3/util/IPUtils.java +++ /dev/null @@ -1,37 +0,0 @@ -package net.frozenorb.apiv3.util; - -import lombok.experimental.UtilityClass; - -@UtilityClass -public class IPUtils { - - public static String machineToHuman(long machine) { - StringBuilder builder = new StringBuilder(15); // All IPv4 addresses are 15 characters - - for (int i = 0; i < 4; i++) { - builder.insert(0, Long.toString(machine & 0xFF)); - - if (i < 3) { - builder.insert(0, '.'); - } - - machine >>= 8; - } - - return builder.toString(); - } - - public static long humanToMachine(String human) { - long result = 0; - String[] octets = human.split("\\."); - - for (int i = 3; i >= 0; i--) { - long ip = Long.parseLong(octets[3 - i]); - - result |= ip << (i * 8); - } - - return result; - } - -} \ No newline at end of file