From e8571c726983e8b4ab7e868e9167f74fbc4b78c8 Mon Sep 17 00:00:00 2001 From: 502647092 Date: Sat, 22 Apr 2017 14:26:15 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=B7=A5=E4=BD=9C?= =?UTF-8?q?=E5=8C=BA=E6=9B=B4=E6=96=B0=E6=96=B9=E5=BC=8F(=E6=9C=AA?= =?UTF-8?q?=E6=B5=8B=E8=AF=95)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 502647092 --- pom.xml | 6 +- .../pw/yumc/YumCore/commands/CommandHelp.java | 36 +---- .../YumCore/commands/info/CommandInfo.java | 4 +- .../java/pw/yumc/YumCore/text/Encrypt.java | 109 +++++++++++++++ .../pw/yumc/YumCore/update/SubscribeTask.java | 125 +++++++++--------- 5 files changed, 175 insertions(+), 105 deletions(-) create mode 100644 src/main/java/pw/yumc/YumCore/text/Encrypt.java diff --git a/pom.xml b/pom.xml index bbb6496..2a470c2 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 pw.yumc YumCore - 1.7 + 1.8 ${project.artifactId} @@ -50,10 +50,6 @@ 1.8 - - spigot-repo - https://hub.spigotmc.org/nexus/content/groups/public/ - yumc-repo http://repo.yumc.pw/content/groups/public/ diff --git a/src/main/java/pw/yumc/YumCore/commands/CommandHelp.java b/src/main/java/pw/yumc/YumCore/commands/CommandHelp.java index a1de0eb..1093a84 100644 --- a/src/main/java/pw/yumc/YumCore/commands/CommandHelp.java +++ b/src/main/java/pw/yumc/YumCore/commands/CommandHelp.java @@ -70,8 +70,8 @@ public class CommandHelp { public CommandHelp(CommandInfo defCmd, Collection list) { this.defCmd = defCmd; cmdlist = new LinkedList<>(list); - cmdlist.sort(new CommandNameComparator()); - cmdlist.sort(new CommandComparator()); + cmdlist.sort(Comparator.comparing(CommandInfo::getName)); + cmdlist.sort(Comparator.comparing(CommandInfo::getSort)); HELPPAGECOUNT = (int) Math.ceil((double) cmdlist.size() / LINES_PER_PAGE); } @@ -143,38 +143,6 @@ public class CommandHelp { return helpGenerator; } - /** - * 命令名称比较器 - * - * @since 2016年7月23日 下午4:17:18 - * @author 喵♂呜 - */ - static class CommandNameComparator implements Comparator { - @Override - public int compare(CommandInfo o1, CommandInfo o2) { - return o1.getName().compareTo(o2.getName()); - } - } - - /** - * 命令排序比较器 - * - * @since 2016年7月23日 下午4:17:18 - * @author 喵♂呜 - */ - static class CommandComparator implements Comparator { - @Override - public int compare(CommandInfo o1, CommandInfo o2) { - if (o1.getSort() > o2.getSort()) { - return 1; - } else if (o1.getSort() == o2.getSort()) { - return 0; - } else { - return -1; - } - } - } - static class DefaultHelpGenerator implements HelpGenerator { /** * 消息配置 diff --git a/src/main/java/pw/yumc/YumCore/commands/info/CommandInfo.java b/src/main/java/pw/yumc/YumCore/commands/info/CommandInfo.java index b5f3e42..b14b61a 100644 --- a/src/main/java/pw/yumc/YumCore/commands/info/CommandInfo.java +++ b/src/main/java/pw/yumc/YumCore/commands/info/CommandInfo.java @@ -58,7 +58,7 @@ public class CommandInfo { private boolean main; private Cmd command; private Help help; - private int sort; + private Integer sort; private CommandParse parse; /** * 命令错误处理 @@ -179,7 +179,7 @@ public class CommandInfo { /** * @return 命令排序 */ - public int getSort() { + public Integer getSort() { return sort; } diff --git a/src/main/java/pw/yumc/YumCore/text/Encrypt.java b/src/main/java/pw/yumc/YumCore/text/Encrypt.java new file mode 100644 index 0000000..b6d5eff --- /dev/null +++ b/src/main/java/pw/yumc/YumCore/text/Encrypt.java @@ -0,0 +1,109 @@ +package pw.yumc.YumCore.text; + +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; + +import org.junit.Test; + +/** + * 加密工具类 + * + * @author 喵♂呜 + * @since 2017/4/22 + */ +public class Encrypt { + private static String key; + static { + try { + key = URLDecoder.decode("%E5%96%B5%E2%99%82%E5%91%9C", "UTF-8"); + } catch (UnsupportedEncodingException ignored) { + } + } + + /** + * 解密地址 + * + * @param s + * 密串 + * @return 解密后的地址 + */ + public static String decode(String s) { + return decode(key, s); + } + + /** + * 加密地址 + * + * @param s + * 密串 + * @return 加密后的地址 + */ + public static String encode(String s) { + return encode(key, s); + } + + /** + * 解密地址 + * + * @param key + * 密钥 + * @param s + * 密串 + * @return 解密后的地址 + */ + public static String decode(String key, String s) { + return process(key, s, false); + } + + /** + * 加密地址 + * + * @param key + * 密钥 + * @param s + * 密串 + * @return 加密后的地址 + */ + public static String encode(String key, String s) { + return process(key, s, true); + } + + private static String process(String key, String s, boolean isEncode) { + StringBuilder str = new StringBuilder(); + int ch; + for (int i = 0, j = 0; i < s.length(); i++, j++) { + if (j > key.length() - 1) { + j = j % key.length(); + } + if (isEncode) { + ch = s.codePointAt(i) + key.codePointAt(j); + } else { + ch = s.codePointAt(i) + 65535 - key.codePointAt(j); + } + if (ch > 65535) { + ch = ch % 65535;// ch - 33 = (ch - 33) % 95 ; + } + str.append((char) ch); + } + return str.toString(); + } + + @Test + public void test() { + //String src = "http://ci.yumc.pw/job/%1$s/lastSuccessfulBuild/artifact/target/%1$s.jar"; + //String dest = "œ­­¥l`cœ¢c«¦¡œg¥©`ž¨›dWbX¬h¡“¤¨Œ®˜•–§¬Ÿªžs©¢¥™a’¦­¢›“”¨h­–¤˜™­hZcU§g£–¤"; + //private static String direct = d("œ­­¥l`cœ¢c«¦¡œg¥©`ž¨›dWbX¬h¡“¤¨Œ®˜•–§¬Ÿªžs©¢¥™a’¦­¢›“”¨h­–¤˜™­hZcU§g£–¤"); + // private static String direct = "http://ci.yumc.pw/job/%1$s/lastSuccessfulBuild/artifact/target/%1$s.jar"; + //private static String maven = d("œ­­¥l`cœ¢c«¦¡œg¥©`¤¥®œ›Ÿc«ž¥¡¤­¨§«`™¯ž§«¥œ¢§œaVe]¬dWcX¬hZeU§f^gV¤b£š§"); + // private static String maven = "http://ci.yumc.pw/plugin/repository/everything/%1$s/%2$s/%3$s-%2$s.jar"; + String src = "Authorization"; + //String dest = "嘝⚶哐嘥♼咋嗤⚥哅嗣⚻哑嘢⚥咊嘥⚹咋嘟⚱咾嗤⚏哅嘖⚱咮嘚⚲哈嘖⚥品嗤⚹哏嗤⚶咽嘧⚩品嘩♱咩嘞⚣哋嘇⚧哌嘡⚣咿嘚♰哆嘖⚴"; + System.out.println("\"" + encode(src) + "\""); + //System.out.println("\"" + decode(dest) + "\""); + } + + @Test + public void t() { + System.out.println(decode("499521", "b¨¬ £šž ˜")); + } +} diff --git a/src/main/java/pw/yumc/YumCore/update/SubscribeTask.java b/src/main/java/pw/yumc/YumCore/update/SubscribeTask.java index 75fa1d4..d21e7e8 100644 --- a/src/main/java/pw/yumc/YumCore/update/SubscribeTask.java +++ b/src/main/java/pw/yumc/YumCore/update/SubscribeTask.java @@ -4,6 +4,7 @@ import java.io.File; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.lang.reflect.Field; +import java.net.HttpURLConnection; import java.net.URL; import java.net.URLClassLoader; import java.net.URLDecoder; @@ -30,6 +31,7 @@ import org.xml.sax.SAXException; import pw.yumc.YumCore.bukkit.Log; import pw.yumc.YumCore.tellraw.Tellraw; +import pw.yumc.YumCore.text.Encrypt; /** * 自动更新程序 @@ -61,21 +63,7 @@ public class SubscribeTask implements Runnable, Listener { */ private static int interval = 25; - /** - * 直链下载 - */ - private static String direct = d("œ­­¥l`cœ¢c«¦¡œg¥©`ž¨›dWbX¬h¡“¤¨Œ®˜•–§¬Ÿªžs©¢¥™a’¦­¢›“”¨h­–¤˜™­hZcU§g£–¤"); - // private static String direct = "http://ci.yumc.pw/job/%1$s/lastSuccessfulBuild/artifact/target/%1$s.jar"; - - /** - * 构建下载 - */ - private static String maven = d("œ­­¥l`cœ¢c«¦¡œg¥©`¤¥®œ›Ÿc«ž¥¡¤­¨§«`™¯ž§«¥œ¢§œaVe]¬dWcX¬hZeU§f^gV¤b£š§"); - // private static String maven = "http://ci.yumc.pw/plugin/repository/everything/%1$s/%2$s/%3$s-%2$s.jar"; - /** - * 是否为Maven - */ - private boolean isMaven; + private UpdateType updateType; /** * 更新文件 */ @@ -89,17 +77,17 @@ public class SubscribeTask implements Runnable, Listener { * 自动更新 */ public SubscribeTask() { - this(false); + this(UpdateType.DIRECT); } /** * 自动更新 * - * @param isMaven + * @param type * 是否为Maven */ - public SubscribeTask(boolean isMaven) { - this(false, isMaven); + public SubscribeTask(UpdateType type) { + this(false, type); } /** @@ -107,11 +95,11 @@ public class SubscribeTask implements Runnable, Listener { * * @param isSecret * 是否为私有 - * @param isMaven - * 是否为Maven + * @param type + * 更新类型 */ - public SubscribeTask(boolean isSecret, boolean isMaven) { - this("master", isSecret, isMaven); + public SubscribeTask(boolean isSecret, UpdateType type) { + this("master", isSecret, type); } /** @@ -121,13 +109,13 @@ public class SubscribeTask implements Runnable, Listener { * 更新分支 * @param isSecret * 是否为私有 - * @param isMaven - * 是否为Maven + * @param type + * 更新类型 */ - public SubscribeTask(String branch, boolean isSecret, boolean isMaven) { + public SubscribeTask(String branch, boolean isSecret, UpdateType type) { updateFile = new UpdateFile(instance); versionInfo = new VersionInfo(branch, isSecret); - this.isMaven = isMaven; + updateType = type; if (instance.isEnabled()) { Bukkit.getPluginManager().registerEvents(this, instance); Bukkit.getScheduler().runTaskTimerAsynchronously(instance, this, 0, interval * 1200); @@ -142,30 +130,6 @@ public class SubscribeTask implements Runnable, Listener { } } - /** - * 解密地址 - * - * @param s - * 密串 - * @return 解密后的地址 - */ - public static String d(String s) { - String key = "499521"; - StringBuilder str = new StringBuilder(); - int ch; - for (int i = 0, j = 0; i < s.length(); i++, j++) { - if (j > key.length() - 1) { - j = j % key.length(); - } - ch = (s.codePointAt(i) + 65535 - key.codePointAt(j)); - if (ch > 65535) { - ch = ch % 65535;// ch - 33 = (ch - 33) % 95 ; - } - str.append((char) ch); - } - return str.toString(); - } - @Override public void run() { update(); @@ -185,14 +149,8 @@ public class SubscribeTask implements Runnable, Listener { Log.d(e); } } - String download; - if (isMaven) { - download = String.format(maven, instance.getClass().getPackage().getName().replaceAll("\\.", "/"), result, instance.getName()); - } else { - download = String.format(direct, instance.getName()); - } - updateFile.update(download); - Log.d(d("‰©–¦š¢ sUW¤T¯^¨R…£Y¯Z¥Qbgg"), instance.getName(), version.split("-")[0], result); + updateFile.update(updateType.getDownloadUrl(instance, result)); + Log.d(Encrypt.decode("嘊⚲哀嘖⚶哅嘣⚩咖嗕♧哏嗕⚸咁嘨♢咰嘤♢哒嗚⚵呼嗣♰咊"), instance.getName(), version.split("-")[0], result); versionInfo.notify(Bukkit.getConsoleSender()); } } catch (Exception e) { @@ -200,19 +158,56 @@ public class SubscribeTask implements Runnable, Listener { } } + public enum UpdateType { + /** + * 下载直连 + */ + DIRECT(Encrypt.decode("嘝⚶哐嘥♼咋嗤⚥哅嗣⚻哑嘢⚥咊嘥⚹咋嘟⚱咾嗤♧咍嗙⚵咋嘡⚣哏嘩⚕哑嘘⚥品嘨⚵哂嘪⚮咞嘪⚫哈嘙♱咽嘧⚶哅嘛⚣咿嘩♱哐嘖⚴哃嘚⚶咋嗚♳咀嘨♰哆嘖⚴")), + // "http://ci.yumc.pw/job/%1$s/lastSuccessfulBuild/artifact/target/%1$s.jar"; + /** + * Maven下载 + */ + MAVEN(Encrypt.decode("嘝⚶哐嘥♼咋嗤⚥哅嗣⚻哑嘢⚥咊嘥⚹咋嘥⚮哑嘜⚫哊嗤⚴品嘥⚱哏嘞⚶哋嘧⚻咋嘚⚸品嘧⚻哐嘝⚫哊嘜♱咁嗦♦哏嗤♧咎嗙⚵咋嗚♵咀嘨♯咁嗧♦哏嗣⚬咽嘧")), + // "http://ci.yumc.pw/plugin/repository/everything/%1$s/%2$s/%3$s-%2$s.jar"; + /** + * 工作区下载 + */ + WS(Encrypt.decode("嘝⚶哐嘥♼咋嗤⚥哅嗣⚻哑嘢⚥咊嘥⚹咋嘟⚱咾嗤♧咍嗙⚵咋嘬⚵咋嘩⚣哎嘜⚧哐嗤♧咍嗙⚵咊嘟⚣哎")); + // "http://ci.yumc.pw/job/%1$s/ws/target/%1$s.jar" + String url; + + UpdateType(String url) { + this.url = url; + } + + public String getDownloadUrl(Plugin instance, String version) { + switch (this) { + case DIRECT: + case WS: + return String.format(url, instance.getName()); + case MAVEN: + return String.format(url, instance.getClass().getPackage().getName().replaceAll("\\.", "/"), version, instance.getName()); + } + throw new UnsupportedOperationException(); + } + } + public static class UpdateFile { public File parent; public File target; public File temp; + private String k = Encrypt.decode("嗶⚷哐嘝⚱哎嘞⚼咽嘩⚫哋嘣"); + private String v = Encrypt.decode("嗷⚣哏嘞⚥呼嘖⚰咮嘞⚑哆嘂⚻咪嘉⚏哕嘃⚓咙嗲"); + public UpdateFile(Plugin plugin) { String name = getPluginFile(plugin).getName(); - parent = new File(d("¤¥®œ›Ÿ§h®¥–’¨žh")); + parent = new File(Encrypt.decode("嘥⚮哑嘜⚫哊嘨♱哑嘥⚦咽嘩⚧咋")); if (!parent.exists()) { parent.mkdirs(); } target = new File(parent, name); - temp = new File(parent, name + d("b¨¬ £šž ˜")); + temp = new File(parent, name + Encrypt.decode("嗣⚦哋嘬⚰哈嘤⚣哀嘞⚰哃")); } public boolean isUpdated() { @@ -242,7 +237,9 @@ public class SubscribeTask implements Runnable, Listener { } public void update(String url) throws IOException { - Files.copy(new URL(url).openStream(), temp.toPath()); + HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection(); + conn.setRequestProperty(k, v); + Files.copy(conn.getInputStream(), temp.toPath()); temp.renameTo(target); } } @@ -251,12 +248,12 @@ public class SubscribeTask implements Runnable, Listener { /** * 直链POM */ - private String url = d("œ­­¥¥kchœ¤–š¢ g£—¥c®hjbcjmpekcc©hZ¥`›¢­d¤’«h^¨a¡£¦g­Ÿ"); + private String url = Encrypt.decode("嘝⚶哐嘥⚵咖嗤♱咿嘤⚦哅嘣⚩咊嘣⚧哐嗤⚷咋嗪♲咎嗫♶咓嗥♻咎嗤⚲咋嗚⚵咋嘜⚫哐嗤⚴咽嘬♱咁嘨♱哌嘤⚯咊嘭⚯哈"); // private static String url = "https://coding.net/u/502647092/p/%s/git/raw/%s/pom.xml"; /** * 构建POM */ - private String pom = d("œ­­¥l`cœ¢c«¦¡œg¥©`ž¨›dW¤c¥š¨¦„©œœš¥¤š®¥w§š h–¤¥Ÿš˜¦`¤¨¦cªž "); + private String pom = Encrypt.decode("嘝⚶哐嘥♼咋嗤⚥哅嗣⚻哑嘢⚥咊嘥⚹咋嘟⚱咾嗤♧哏嗤⚮咽嘨⚶咯嘪⚥咿嘚⚵哏嘛⚷哈嗷⚷哅嘡⚦咋嘖⚴哐嘞⚨咽嘘⚶咋嘥⚱哉嗣⚺哉嘡"); // private static String pom = "http://ci.yumc.pw/job/%s/lastSuccessfulBuild/artifact/pom.xml"; /**