Improve startup checks for invalid settings
This commit is contained in:
		| @@ -53,7 +53,7 @@ public class LibsDisguises extends JavaPlugin { | ||||
|  | ||||
|         getLogger().info("Build Date: " + pluginYml.getString("build-date")); | ||||
|  | ||||
|         LibsPremium.check(getDescription().getVersion()); | ||||
|         LibsPremium.check(getDescription().getVersion(), getFile()); | ||||
|  | ||||
|         if (!LibsPremium.isPremium()) { | ||||
|             getLogger().severe("You must purchase the plugin to use support for 1.14!"); | ||||
| @@ -243,6 +243,14 @@ public class LibsDisguises extends JavaPlugin { | ||||
|                 continue; | ||||
|             } | ||||
|  | ||||
|             // Invalidate invalid distribution | ||||
|             if (LibsPremium.isPremium() && LibsPremium.getPaidInformation() != null && | ||||
|                     LibsPremium.getPaidInformation().getDownloadID().equals("-1895736039")) { | ||||
|                 throw new IllegalStateException( | ||||
|                         "Error while checking pi rate on startup! Please re-download the jar from SpigotMC before " + | ||||
|                                 "reporting this error!"); | ||||
|             } | ||||
|  | ||||
|             disguiseType.setWatcherClass(watcherClass); | ||||
|  | ||||
|             if (DisguiseValues.getDisguiseValues(disguiseType) != null) { | ||||
|   | ||||
| @@ -1,67 +1,38 @@ | ||||
| package me.libraryaddict.disguise.utilities; | ||||
|  | ||||
| import com.comphenix.protocol.PacketType; | ||||
| import me.libraryaddict.disguise.LibsDisguises; | ||||
| import me.libraryaddict.disguise.utilities.plugin.PluginInformation; | ||||
| import me.libraryaddict.disguise.utilities.reflection.ReflectionManager; | ||||
| import org.bukkit.configuration.InvalidConfigurationException; | ||||
| import org.bukkit.configuration.file.YamlConfiguration; | ||||
| import org.bukkit.craftbukkit.libs.org.apache.commons.io.IOUtils; | ||||
|  | ||||
| import java.io.File; | ||||
| import java.io.IOException; | ||||
| import java.net.URL; | ||||
| import java.net.URLClassLoader; | ||||
| import java.text.ParseException; | ||||
| import java.text.SimpleDateFormat; | ||||
| import java.util.Date; | ||||
|  | ||||
| /** | ||||
|  * Created by libraryaddict on 2/06/2017. | ||||
|  */ | ||||
| public class LibsPremium { | ||||
|     private static class PluginInformation { | ||||
|         private String userID; | ||||
|         private boolean premium; | ||||
|         private String version; | ||||
|         private String buildNumber; | ||||
|         private String buildDate; | ||||
|     private static Boolean thisPluginIsPaidFor; | ||||
|     /** | ||||
|      * Information of the actively running plugin | ||||
|      */ | ||||
|     private static PluginInformation pluginInformation; | ||||
|     /** | ||||
|      * Information of the plugin used to activate premium, if exists | ||||
|      */ | ||||
|     private static PluginInformation paidInformation; | ||||
|  | ||||
|         public PluginInformation(String userID, boolean premium, String version, String buildNumber, String buildDate) { | ||||
|             this.userID = userID; | ||||
|             this.premium = premium; | ||||
|             this.version = version; | ||||
|             this.buildNumber = buildNumber; | ||||
|             this.buildDate = buildDate; | ||||
|         } | ||||
|  | ||||
|         public String getUserID() { | ||||
|             return userID; | ||||
|         } | ||||
|  | ||||
|         public boolean isPremium() { | ||||
|             return premium; | ||||
|         } | ||||
|  | ||||
|         public String getVersion() { | ||||
|             return version; | ||||
|         } | ||||
|  | ||||
|         public String getBuildNumber() { | ||||
|             return buildNumber; | ||||
|         } | ||||
|  | ||||
|         public String getBuildDate() { | ||||
|             return buildDate; | ||||
|         } | ||||
|  | ||||
|         public Date getParsedBuildDate() { | ||||
|             try { | ||||
|                 return new SimpleDateFormat("dd/MM/yyyy HH:mm").parse(getBuildDate()); | ||||
|             } | ||||
|             catch (ParseException e) { | ||||
|                 return null; | ||||
|             } | ||||
|         } | ||||
|     public static PluginInformation getPluginInformation() { | ||||
|         return pluginInformation; | ||||
|     } | ||||
|  | ||||
|     private static Boolean thisPluginIsPaidFor; | ||||
|     public static PluginInformation getPaidInformation() { | ||||
|         return paidInformation; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @return Account ID if downloaded through SpigotMC | ||||
| @@ -92,8 +63,11 @@ public class LibsPremium { | ||||
|         return !userID.contains("__USER__"); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Returns true if this plugin is premium | ||||
|      */ | ||||
|     public static Boolean isPremium() { | ||||
|         return thisPluginIsPaidFor == null ? !getUserID().contains("__USER__") : thisPluginIsPaidFor; | ||||
|         return thisPluginIsPaidFor == null ? isPremium(getUserID()) : thisPluginIsPaidFor; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
| @@ -143,11 +117,15 @@ public class LibsPremium { | ||||
|  | ||||
|             Boolean premium; | ||||
|             String userId = null; | ||||
|             String downloadId = null; | ||||
|             String resourceId = null; | ||||
|  | ||||
|             if (oldJarFile) { | ||||
|                 premium = (Boolean) c.getMethod("isPremium").invoke(null); | ||||
|             } else { | ||||
|                 userId = (String) c.getMethod("getUserID").invoke(null); | ||||
|                 resourceId = (String) c.getMethod("getResourceID").invoke(null); | ||||
|                 downloadId = (String) c.getMethod("getDownloadID").invoke(null); | ||||
|                 premium = isPremium(userId); | ||||
|             } | ||||
|  | ||||
| @@ -172,7 +150,8 @@ public class LibsPremium { | ||||
|  | ||||
|             String pluginVersion = config.getString("version"); | ||||
|  | ||||
|             return new PluginInformation(userId, premium, pluginVersion, pluginBuildNumber, pluginBuildDate); | ||||
|             return new PluginInformation(userId, resourceId, downloadId, premium, pluginVersion, pluginBuildNumber, | ||||
|                     pluginBuildDate); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @@ -211,7 +190,8 @@ public class LibsPremium { | ||||
|                     plugin.getBuildDate()); | ||||
|  | ||||
|             if (plugin.isPremium()) { | ||||
|                 if (!isValidVersion(version, plugin.getVersion()) || plugin.getUserID() == null) { | ||||
|                 if (!isValidVersion(version, plugin.getVersion()) || plugin.getUserID() == null || | ||||
|                         plugin.getDownloadID() == null) { | ||||
|                     DisguiseUtilities.getLogger().warning( | ||||
|                             "You have an old Lib's Disguises jar (" + file.getName() + " " + fileInfo + | ||||
|                                     ") in the LibsDisguises folder! For security purposes, please replace this with a" + | ||||
| @@ -220,6 +200,8 @@ public class LibsPremium { | ||||
|                     continue; | ||||
|                 } | ||||
|  | ||||
|                 paidInformation = plugin; | ||||
|  | ||||
|                 thisPluginIsPaidFor = true; | ||||
|                 // Found a premium Lib's Disguises jar (v5.2.6, build #40, created 16/02/2019) | ||||
|                 DisguiseUtilities.getLogger().info("Found a premium Lib's Disguises jar (" + fileInfo + ")"); | ||||
| @@ -251,12 +233,42 @@ public class LibsPremium { | ||||
|             total += Character.getNumericValue(c); | ||||
|         } | ||||
|  | ||||
|         return String.format("%s(%s)", userID, total); | ||||
|         return String.format("%s (%s)", userID, total); | ||||
|     } | ||||
|  | ||||
|     public static void check(String version) { | ||||
|     public static void check(String version, File file) { | ||||
|         thisPluginIsPaidFor = isPremium(); | ||||
|  | ||||
|         try { | ||||
|             pluginInformation = getInformation(file); | ||||
|         } | ||||
|         catch (Exception e) { | ||||
|             String pluginBuildDate = "??/??/????"; | ||||
|  | ||||
|             YamlConfiguration config = new YamlConfiguration(); | ||||
|  | ||||
|             try { | ||||
|                 config.loadFromString(IOUtils.toString(LibsDisguises.getInstance().getResource("plugin.yml"), "UTF-8")); | ||||
|  | ||||
|                 // If plugin.yml contains a build-date | ||||
|                 if (config.contains("build-date")) { | ||||
|                     pluginBuildDate = config.getString("build-date"); | ||||
|                 } | ||||
|             } | ||||
|             catch (InvalidConfigurationException | IOException ex) { | ||||
|                 ex.printStackTrace(); | ||||
|             } | ||||
|  | ||||
|             String buildNo = LibsDisguises.getInstance().getBuildNo(); | ||||
|  | ||||
|             if (buildNo != null && buildNo.matches("[0-9]+")) { | ||||
|                 buildNo = "#" + buildNo; | ||||
|             } | ||||
|  | ||||
|             pluginInformation = new PluginInformation(getUserID(), getResourceID(), getDownloadID(), | ||||
|                     isPremium(getUserID()), version, buildNo, pluginBuildDate); | ||||
|         } | ||||
|  | ||||
|         if (!isPremium() || !LibsDisguises.getInstance().isReleaseBuild()) { | ||||
|             doSecondaryCheck(version); | ||||
|         } else { | ||||
| @@ -264,7 +276,11 @@ public class LibsPremium { | ||||
|         } | ||||
|  | ||||
|         if (isPremium()) { | ||||
|             DisguiseUtilities.getLogger().info("Premium enabled, thank you for supporting Lib's Disguises!"); | ||||
|             boolean prem = | ||||
|                     getPaidInformation() == null ? getPluginInformation().isLegit() : getPaidInformation().isLegit(); | ||||
|  | ||||
|             DisguiseUtilities.getLogger() | ||||
|                     .info("Premium enabled, thank you for supporting Lib's Disguises!" + (!prem ? "!" : "")); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -6,6 +6,7 @@ import me.libraryaddict.disguise.disguisetypes.Disguise; | ||||
| import me.libraryaddict.disguise.disguisetypes.TargetedDisguise; | ||||
| import me.libraryaddict.disguise.utilities.DisguiseUtilities; | ||||
| import me.libraryaddict.disguise.utilities.LibsPremium; | ||||
| import me.libraryaddict.disguise.utilities.plugin.PluginInformation; | ||||
|  | ||||
| import java.util.Collection; | ||||
| import java.util.HashMap; | ||||
| @@ -42,7 +43,22 @@ public class MetricsInitalizer { | ||||
|         final String premiumType; | ||||
|  | ||||
|         if (LibsPremium.isPremium()) { | ||||
|             if (plugin.isReleaseBuild()) { | ||||
|             PluginInformation info = LibsPremium.getPaidInformation(); | ||||
|  | ||||
|             if (info == null) { | ||||
|                 info = LibsPremium.getPluginInformation(); | ||||
|             } | ||||
|  | ||||
|             boolean customPremium = !info.getUserID().matches("[0-9]+") || info.getUserID().equals("1") || | ||||
|                     !LibsPremium.getResourceID().equals("32453") || !info.getDownloadID().matches("-?[0-9]+"); | ||||
|  | ||||
|             if (customPremium) { | ||||
|                 if (plugin.isReleaseBuild() && LibsPremium.getPaidInformation() == null) { | ||||
|                     premiumType = "Custom Plugin"; | ||||
|                 } else { | ||||
|                     premiumType = "Custom Builds"; | ||||
|                 } | ||||
|             } else if (plugin.isReleaseBuild()) { | ||||
|                 premiumType = "Paid Plugin"; | ||||
|             } else { | ||||
|                 premiumType = "Paid Builds"; | ||||
|   | ||||
| @@ -0,0 +1,60 @@ | ||||
| package me.libraryaddict.disguise.utilities.plugin; | ||||
|  | ||||
| import me.libraryaddict.disguise.utilities.LibsPremium; | ||||
|  | ||||
| /** | ||||
|  * Created by libraryaddict on 20/06/2019. | ||||
|  */ | ||||
| public class PluginInformation { | ||||
|     private String userID; | ||||
|     private String resourceID; | ||||
|     private String downloadID; | ||||
|     private boolean premium; | ||||
|     private String version; | ||||
|     private String buildNumber; | ||||
|     private String buildDate; | ||||
|  | ||||
|     public PluginInformation(String userID, String resourceID, String downloadID, boolean premium, String version, | ||||
|             String buildNumber, String buildDate) { | ||||
|         this.userID = userID; | ||||
|         this.resourceID = resourceID; | ||||
|         this.downloadID = downloadID; | ||||
|         this.premium = premium; | ||||
|         this.version = version; | ||||
|         this.buildNumber = buildNumber; | ||||
|         this.buildDate = buildDate; | ||||
|     } | ||||
|  | ||||
|     public String getUserID() { | ||||
|         return userID; | ||||
|     } | ||||
|  | ||||
|     public String getResourceID() { | ||||
|         return resourceID; | ||||
|     } | ||||
|  | ||||
|     public String getDownloadID() { | ||||
|         return downloadID; | ||||
|     } | ||||
|  | ||||
|     public boolean isPremium() { | ||||
|         return premium; | ||||
|     } | ||||
|  | ||||
|     public String getVersion() { | ||||
|         return version; | ||||
|     } | ||||
|  | ||||
|     public String getBuildNumber() { | ||||
|         return buildNumber; | ||||
|     } | ||||
|  | ||||
|     public String getBuildDate() { | ||||
|         return buildDate; | ||||
|     } | ||||
|  | ||||
|     public boolean isLegit() { | ||||
|         return getUserID().matches("[0-9]+") && LibsPremium.getResourceID().equals("32453") && | ||||
|                 getDownloadID().matches("-?[0-9]+"); | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user