Change to a better expiration system
This commit is contained in:
parent
18ce6548f6
commit
c28694c878
@ -16,6 +16,9 @@ import oshi.hardware.HardwareAbstractionLayer;
|
|||||||
import oshi.software.os.OperatingSystem;
|
import oshi.software.os.OperatingSystem;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.time.OffsetDateTime;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
import java.util.Date;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@ -85,14 +88,21 @@ public final class LicenseExample {
|
|||||||
JsonElement description = json.get("description");
|
JsonElement description = json.get("description");
|
||||||
JsonElement ownerSnowflake = json.get("ownerSnowflake");
|
JsonElement ownerSnowflake = json.get("ownerSnowflake");
|
||||||
JsonElement ownerName = json.get("ownerName");
|
JsonElement ownerName = json.get("ownerName");
|
||||||
JsonElement duration = json.get("duration");
|
|
||||||
|
// Parsing the expiration date if we have one
|
||||||
|
JsonElement expires = json.get("expires");
|
||||||
|
Date expiresDate = null;
|
||||||
|
if (!expires.isJsonNull()) {
|
||||||
|
OffsetDateTime offsetDateTime = OffsetDateTime.parse(expires.getAsString(), DateTimeFormatter.ISO_OFFSET_DATE_TIME);
|
||||||
|
expiresDate = Date.from(offsetDateTime.toInstant());
|
||||||
|
}
|
||||||
|
|
||||||
// Return the license response
|
// Return the license response
|
||||||
return new LicenseResponse(200, null,
|
return new LicenseResponse(200, null,
|
||||||
description.isJsonNull() ? null : description.getAsString(),
|
description.isJsonNull() ? null : description.getAsString(),
|
||||||
ownerSnowflake.isJsonNull() ? -1 : ownerSnowflake.getAsLong(),
|
ownerSnowflake.isJsonNull() ? -1 : ownerSnowflake.getAsLong(),
|
||||||
ownerName.isJsonNull() ? null : ownerName.getAsString(),
|
ownerName.isJsonNull() ? null : ownerName.getAsString(),
|
||||||
duration.isJsonNull() ? -1 : duration.getAsLong()
|
expires.isJsonNull() ? null : expiresDate
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
ResponseBody errorBody = response.body(); // Get the error body
|
ResponseBody errorBody = response.body(); // Get the error body
|
||||||
@ -177,12 +187,9 @@ public final class LicenseExample {
|
|||||||
private String ownerName;
|
private String ownerName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The duration of the license, present if valid.
|
* The optional expiration {@link Date} of the license.
|
||||||
* <p>
|
|
||||||
* If -1, the license will be permanent.
|
|
||||||
* </p>
|
|
||||||
*/
|
*/
|
||||||
private long duration;
|
private Date expires;
|
||||||
|
|
||||||
public LicenseResponse(long status, @NonNull String error) {
|
public LicenseResponse(long status, @NonNull String error) {
|
||||||
this.status = status;
|
this.status = status;
|
||||||
@ -204,7 +211,7 @@ public final class LicenseExample {
|
|||||||
* @return true if permanent, otherwise false
|
* @return true if permanent, otherwise false
|
||||||
*/
|
*/
|
||||||
public boolean isPermanent() {
|
public boolean isPermanent() {
|
||||||
return duration == -1;
|
return expires == null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,13 +1,11 @@
|
|||||||
package me.braydon.example;
|
package me.braydon.example;
|
||||||
|
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Braydon
|
* @author Braydon
|
||||||
*/
|
*/
|
||||||
public final class Main {
|
public final class Main {
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
LicenseExample.LicenseResponse response = LicenseExample.check("XXXX-XXXX-XXXX-XXXX", "Example");
|
LicenseExample.LicenseResponse response = LicenseExample.check("C45E-40F6-924C-753B", "CloudSpigot");
|
||||||
if (!response.isValid()) { // License isn't valid
|
if (!response.isValid()) { // License isn't valid
|
||||||
System.err.println("Invalid license: " + response.getError());
|
System.err.println("Invalid license: " + response.getError());
|
||||||
return;
|
return;
|
||||||
@ -22,9 +20,8 @@ public final class Main {
|
|||||||
}
|
}
|
||||||
if (response.isPermanent()) { // License is permanent
|
if (response.isPermanent()) { // License is permanent
|
||||||
System.out.println("Your license is permanent");
|
System.out.println("Your license is permanent");
|
||||||
} else { // License has a duration
|
} else { // License has an expiration date
|
||||||
long durationSeconds = TimeUnit.SECONDS.toMillis(response.getDuration()); // The duration in seconds
|
System.out.printf("Your license will expire at: %s%n", response.getExpires().toInstant());
|
||||||
System.out.println("Your license will expire in " + durationSeconds + " seconds");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -74,7 +74,7 @@ public final class LicenseController {
|
|||||||
license.getDescription(),
|
license.getDescription(),
|
||||||
license.getOwnerSnowflake(),
|
license.getOwnerSnowflake(),
|
||||||
license.getOwnerName(),
|
license.getOwnerName(),
|
||||||
license.getDuration()
|
license.getExpires()
|
||||||
));
|
));
|
||||||
} catch (APIException ex) { // Handle the exception
|
} catch (APIException ex) { // Handle the exception
|
||||||
return ResponseEntity.status(ex.getStatus())
|
return ResponseEntity.status(ex.getStatus())
|
||||||
|
@ -5,6 +5,8 @@ import lombok.Getter;
|
|||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
import me.braydon.license.model.License;
|
import me.braydon.license.model.License;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A data transfer object for a {@link License}.
|
* A data transfer object for a {@link License}.
|
||||||
*
|
*
|
||||||
@ -34,10 +36,7 @@ public class LicenseDTO {
|
|||||||
private String ownerName;
|
private String ownerName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The duration that this licensee is valid for.
|
* The optional expiration {@link Date} of this license.
|
||||||
* <p>
|
|
||||||
* If -1, the license will be permanent.
|
|
||||||
* </p>
|
|
||||||
*/
|
*/
|
||||||
private long duration;
|
private Date expires;
|
||||||
}
|
}
|
||||||
|
@ -80,12 +80,9 @@ public class License {
|
|||||||
private int hwidLimit;
|
private int hwidLimit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The duration that this licensee is valid for.
|
* The optional expiration {@link Date} of this license.
|
||||||
* <p>
|
|
||||||
* If -1, the license will be permanent.
|
|
||||||
* </p>
|
|
||||||
*/
|
*/
|
||||||
private long duration;
|
private Date expires;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The {@link Date} this license was last used.
|
* The {@link Date} this license was last used.
|
||||||
@ -113,7 +110,7 @@ public class License {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// Check if the license has expired
|
// Check if the license has expired
|
||||||
return System.currentTimeMillis() - created.getTime() >= duration;
|
return expires.before(new Date());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -122,7 +119,7 @@ public class License {
|
|||||||
* @return true if permanent, otherwise false
|
* @return true if permanent, otherwise false
|
||||||
*/
|
*/
|
||||||
public boolean isPermanent() {
|
public boolean isPermanent() {
|
||||||
return duration == -1L;
|
return expires == null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -63,12 +63,12 @@ public final class LicenseService {
|
|||||||
* @param ownerName the optional owner name of the license
|
* @param ownerName the optional owner name of the license
|
||||||
* @param ipLimit the IP limit of the license
|
* @param ipLimit the IP limit of the license
|
||||||
* @param hwidLimit the HWID limit of the license
|
* @param hwidLimit the HWID limit of the license
|
||||||
* @param duration the duration of the license, -1 for permanent
|
* @param expires the optional expiration date of the license
|
||||||
* @return the created license
|
* @return the created license
|
||||||
* @see License for license
|
* @see License for license
|
||||||
*/
|
*/
|
||||||
public License create(@NonNull String key, @NonNull String product, String description, long ownerSnowflake,
|
public License create(@NonNull String key, @NonNull String product, String description, long ownerSnowflake,
|
||||||
String ownerName, int ipLimit, int hwidLimit, long duration) {
|
String ownerName, int ipLimit, int hwidLimit, Date expires) {
|
||||||
// Create the new license
|
// Create the new license
|
||||||
License license = new License();
|
License license = new License();
|
||||||
license.setKey(BCrypt.hashpw(key, licensesSalt)); // Hash the key
|
license.setKey(BCrypt.hashpw(key, licensesSalt)); // Hash the key
|
||||||
@ -80,7 +80,7 @@ public final class LicenseService {
|
|||||||
license.setHwids(new HashSet<>());
|
license.setHwids(new HashSet<>());
|
||||||
license.setIpLimit(ipLimit); // Use the given IP limit
|
license.setIpLimit(ipLimit); // Use the given IP limit
|
||||||
license.setHwidLimit(hwidLimit); // Use the given HWID limit
|
license.setHwidLimit(hwidLimit); // Use the given HWID limit
|
||||||
license.setDuration(duration);
|
license.setExpires(expires);
|
||||||
license.setCreated(new Date());
|
license.setCreated(new Date());
|
||||||
repository.insert(license); // Insert the newly created license
|
repository.insert(license); // Insert the newly created license
|
||||||
return license;
|
return license;
|
||||||
@ -107,7 +107,7 @@ public final class LicenseService {
|
|||||||
}
|
}
|
||||||
License license = optionalLicense.get(); // The license found
|
License license = optionalLicense.get(); // The license found
|
||||||
String hashedIp = BCrypt.hashpw(ip, ipsSalt); // Hash the IP
|
String hashedIp = BCrypt.hashpw(ip, ipsSalt); // Hash the IP
|
||||||
String obfuscateKey = MiscUtils.obfuscateKey(key);
|
String obfuscateKey = MiscUtils.obfuscateKey(key); // Obfuscate the key
|
||||||
boolean newIp = !license.getIps().contains(hashedIp); // Is the IP new?
|
boolean newIp = !license.getIps().contains(hashedIp); // Is the IP new?
|
||||||
boolean newHwid = !license.getHwids().contains(hwid); // Is the HWID new?
|
boolean newHwid = !license.getHwids().contains(hwid); // Is the HWID new?
|
||||||
|
|
||||||
@ -126,7 +126,7 @@ public final class LicenseService {
|
|||||||
}
|
}
|
||||||
tags.append("HWID");
|
tags.append("HWID");
|
||||||
}
|
}
|
||||||
long expirationDate = (license.getCreated().getTime() + license.getDuration()) / 1000L;
|
long expires = license.isPermanent() ? -1L : license.getExpires().getTime() / 1000L;
|
||||||
int ipCount = license.getIps().size();
|
int ipCount = license.getIps().size();
|
||||||
int hwidCount = license.getHwids().size();
|
int hwidCount = license.getHwids().size();
|
||||||
discordService.sendLog(new EmbedBuilder()
|
discordService.sendLog(new EmbedBuilder()
|
||||||
@ -144,7 +144,7 @@ public final class LicenseService {
|
|||||||
true
|
true
|
||||||
)
|
)
|
||||||
.addField("Expires",
|
.addField("Expires",
|
||||||
license.isPermanent() ? "Never" : "<t:" + expirationDate + ":R>",
|
expires == -1L ? "Never" : "<t:" + expires + ":R>",
|
||||||
true
|
true
|
||||||
)
|
)
|
||||||
.addField("IP", ip, true)
|
.addField("IP", ip, true)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user