Skip to content

Commit fa0773e

Browse files
Merge pull request #53 from TeamKun/develop
🔖 chore: v bump 2.5
2 parents af82494 + e19a88d commit fa0773e

File tree

6 files changed

+247
-24
lines changed

6 files changed

+247
-24
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>net.kunmc.lab</groupId>
88
<artifactId>TeamKunPluginManager</artifactId>
9-
<version>2.4</version>
9+
<version>2.5</version>
1010
<packaging>jar</packaging>
1111

1212
<name>TeamKunPluginManager</name>

src/main/java/net/kunmc/lab/teamkunpluginmanager/commands/CommandImport.java

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import net.kunmc.lab.teamkunpluginmanager.plugin.Installer;
1010
import net.kunmc.lab.teamkunpluginmanager.plugin.compactor.PluginContainer;
1111
import net.kunmc.lab.teamkunpluginmanager.utils.Messages;
12+
import net.kunmc.lab.teamkunpluginmanager.utils.Pair;
1213
import net.kunmc.lab.teamkunpluginmanager.utils.PluginUtil;
1314
import net.kunmc.lab.teamkunpluginmanager.utils.Session;
1415
import net.kunmc.lab.teamkunpluginmanager.utils.URLUtils;
@@ -68,14 +69,30 @@ public static void onCommand(CommandSender sender, String[] args)
6869

6970
sender.sendMessage(ChatColor.GOLD + "ファイルのダウンロード中...");
7071

71-
String json = URLUtils.getAsString(url);
72+
Pair<Integer, String> json = URLUtils.getAsString(url);
73+
74+
switch (json.getKey())
75+
{
76+
case 404:
77+
sender.sendMessage(ChatColor.RED + "E: ファイルが見つかりませんでした。");
78+
break;
79+
case 403:
80+
sender.sendMessage(ChatColor.RED + "E: ファイルを取得できません。しばらくしてからもう一度インポートしてください。");
81+
break;
82+
}
83+
84+
if (json.getKey() != 200)
85+
{
86+
sender.sendMessage(ChatColor.RED + "E: 不明なエラーが発生しました。");
87+
return;
88+
}
7289

7390
sender.sendMessage(ChatColor.GOLD + "ファイルの読み込み中...");
7491

7592
LinkedList<PluginContainer> container;
7693
try
7794
{
78-
container = new Gson().fromJson(json, new TypeToken<LinkedList<PluginContainer>>()
95+
container = new Gson().fromJson(json.getValue(), new TypeToken<LinkedList<PluginContainer>>()
7996
{
8097
}.getType());
8198
}

src/main/java/net/kunmc/lab/teamkunpluginmanager/commands/CommandRegister.java

Lines changed: 140 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,23 @@
11
package net.kunmc.lab.teamkunpluginmanager.commands;
22

3+
import com.destroystokyo.paper.Title;
4+
import com.google.gson.Gson;
5+
import com.google.gson.JsonObject;
36
import net.kunmc.lab.teamkunpluginmanager.TeamKunPluginManager;
7+
import net.kunmc.lab.teamkunpluginmanager.utils.Pair;
48
import net.kunmc.lab.teamkunpluginmanager.utils.Say2Functional;
9+
import net.kunmc.lab.teamkunpluginmanager.utils.URLUtils;
510
import org.bukkit.ChatColor;
611
import org.bukkit.command.BlockCommandSender;
712
import org.bukkit.command.CommandSender;
813
import org.bukkit.entity.Player;
14+
import org.bukkit.scheduler.BukkitRunnable;
15+
import org.bukkit.scheduler.BukkitTask;
916

1017
public class CommandRegister
1118
{
19+
private final static String CLIENT_ID = "94c5d446dbc765895979";
20+
1221
public static void onCommand(CommandSender sender, String[] args)
1322
{
1423
if (!sender.hasPermission("kpm.register"))
@@ -30,9 +39,137 @@ public static void onCommand(CommandSender sender, String[] args)
3039
return;
3140
}
3241

42+
if (args.length == 1)
43+
{
44+
TeamKunPluginManager.vault.vault(args[0]);
45+
sender.sendMessage(ChatColor.GREEN + "S: トークンを正常に保管しました!");
46+
TeamKunPluginManager.session.unlock();
47+
return;
48+
}
49+
50+
51+
sender.sendMessage(ChatColor.GREEN + "GitHubサーバを用いてトークンを生成しますか? y/N> ");
52+
TeamKunPluginManager.functional.add(sender instanceof Player ? ((Player) sender).getUniqueId(): null, new Say2Functional.FunctionalEntry(
53+
String::startsWith,
54+
s -> {
55+
if (!s.equalsIgnoreCase("y"))
56+
return;
57+
performAction(sender);
58+
}
59+
));
60+
}
61+
62+
private static void performAction(CommandSender sender)
63+
{
64+
sender.sendMessage(ChatColor.LIGHT_PURPLE + "サーバと通信しています...");
65+
66+
Pair<Integer, String> data = URLUtils.postAsString("https://github.com/login/device/code?client_id=" + CLIENT_ID + "&scope=repo%2Cpublic_repo",
67+
"", "application/json", "text/plain");
68+
69+
if (data.getKey() != 200)
70+
{
71+
sender.sendMessage(ChatColor.RED + "E: エラーが発生しました。しばらくしてからもう一度お試しください。");
72+
return;
73+
}
74+
75+
JsonObject object = new Gson().fromJson(data.getValue(), JsonObject.class);
76+
77+
final String device_code = object.get("device_code").getAsString();
78+
final String user_code = object.get("user_code").getAsString();
79+
final String verif_uri = object.get("verification_uri").getAsString();
80+
final int expires_sec = object.get("expires_in").getAsInt();
81+
final int get_interval = object.get("interval").getAsInt();
82+
83+
sender.sendMessage(ChatColor.DARK_GREEN + "入力するコード:" + ChatColor.WHITE + user_code);
84+
sender.sendMessage(ChatColor.DARK_GREEN + "こちらからコードを有効化してください:" + ChatColor.BLUE + ChatColor.UNDERLINE + verif_uri);
85+
sender.sendMessage(ChatColor.DARK_GRAY + "I:コードは、" + (expires_sec / 60) + "分で失効します。");
86+
if (sender instanceof Player)
87+
showTitle((Player) sender, user_code, expires_sec);
88+
//ここからポーリング
3389

34-
TeamKunPluginManager.vault.vault(args[0]);
35-
sender.sendMessage(ChatColor.GREEN + "S: トークンを正常に保管しました!");
36-
TeamKunPluginManager.session.unlock();
90+
final boolean[] success = {false};
91+
BukkitRunnable polling = new BukkitRunnable()
92+
{
93+
@Override
94+
public void run()
95+
{
96+
Pair<Integer, String> data = URLUtils.postAsString("https://github.com/login/oauth/access_token?client_id=" + CLIENT_ID +
97+
"&grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Adevice_code&device_code=" + device_code,
98+
"",
99+
"application/json",
100+
"text/plain");
101+
if (data.getKey() != 200)
102+
{
103+
sender.sendMessage(ChatColor.RED + "E: エラーが発生しました。: Server response with" + data.getKey());
104+
this.cancel();
105+
return;
106+
}
107+
108+
JsonObject response = new Gson().fromJson(data.getValue(), JsonObject.class);
109+
110+
if (response.has("error"))
111+
{
112+
if (response.get("error").getAsString().equals("authorization_pending"))
113+
return;
114+
String error = response.get("error").getAsString();
115+
sender.sendMessage(ChatColor.RED + "E: エラーが発生いたしました。:" + parseError(error));
116+
if (sender instanceof Player)
117+
((Player) sender).resetTitle();
118+
this.cancel();
119+
return;
120+
}
121+
122+
TeamKunPluginManager.vault.vault(response.get("access_token").getAsString());
123+
sender.sendMessage(ChatColor.GREEN + "S: トークンを正常に保管しました!");
124+
if (sender instanceof Player)
125+
((Player) sender).resetTitle();
126+
TeamKunPluginManager.session.unlock();
127+
success[0] = true;
128+
this.cancel();
129+
}
130+
};
131+
BukkitTask task = polling.runTaskTimer(TeamKunPluginManager.plugin, 100L, (get_interval * 20L) + 20L);
132+
133+
BukkitRunnable expire = new BukkitRunnable()
134+
{
135+
@Override
136+
public void run()
137+
{
138+
if (!success[0])
139+
return;
140+
task.cancel();
141+
}
142+
};
143+
expire.runTaskLater(TeamKunPluginManager.plugin, get_interval * 20L);
144+
}
145+
146+
private static String parseError(String err)
147+
{
148+
String response = err;
149+
150+
switch (err)
151+
{
152+
case "expired_token":
153+
case "incorrect_device_code":
154+
response = "有効期限が切れています。もう一度お試しください。";
155+
break;
156+
case "access_denied":
157+
response = "キャンセルされました。";
158+
break;
159+
}
160+
161+
return response;
162+
}
163+
164+
private static void showTitle(Player player, String code, int expires)
165+
{
166+
player.sendTitle(Title.builder()
167+
.title(code)
168+
.subtitle("上記のコードを入力してください。")
169+
.fadeIn(10)
170+
.fadeOut(10)
171+
.stay(expires * 20)
172+
.build()
173+
);
37174
}
38175
}

src/main/java/net/kunmc/lab/teamkunpluginmanager/utils/GitHubURLBuilder.java

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.google.gson.JsonElement;
66
import com.google.gson.JsonObject;
77
import org.apache.commons.lang.StringUtils;
8+
import org.bukkit.ChatColor;
89

910
import javax.annotation.Nullable;
1011
import java.net.URL;
@@ -93,11 +94,22 @@ else if (tagNF != null && !tagNF.equals(""))
9394
{
9495
case "GITHUB_REPO_RELEASES_URL":
9596
{
96-
String json = URLUtils.getAsString(urlPair.getValue());
97-
String error = error(json);
97+
Pair<Integer, String> json = URLUtils.getAsString(urlPair.getValue());
98+
switch (json.getKey())
99+
{
100+
case 404:
101+
return "ERROR ファイルが見つかりませんでした。";
102+
case 403:
103+
return "E: ファイルを取得できません。しばらくしてからもう一度実行してください。";
104+
}
105+
106+
if (json.getKey() != 200)
107+
return "ERROR 不明なエラーが発生しました。";
108+
109+
String error = error(json.getValue());
98110
if (!error.equals(""))
99111
return "ERROR " + error;
100-
JsonArray array = new Gson().fromJson(json, JsonArray.class);
112+
JsonArray array = new Gson().fromJson(json.getValue(), JsonArray.class);
101113

102114
for (JsonElement elem : array)
103115
for (JsonElement asset : ((JsonObject) elem).get("assets").getAsJsonArray())
@@ -109,11 +121,22 @@ else if (tagNF != null && !tagNF.equals(""))
109121
}
110122
case "GITHUB_REPO_RELEASE_NAME_URL":
111123
{
112-
String json = URLUtils.getAsString(urlPair.getValue());
113-
String error = error(json);
124+
Pair<Integer, String> json = URLUtils.getAsString(urlPair.getValue());
125+
126+
switch (json.getKey())
127+
{
128+
case 404:
129+
return "ERROR ファイルが見つかりませんでした。";
130+
case 403:
131+
return "E: ファイルを取得できません。しばらくしてからもう一度実行してください。";
132+
}
133+
134+
if (json.getKey() != 200)
135+
return "ERROR 不明なエラーが発生しました。";
136+
String error = error(json.getValue());
114137
if (!error.equals(""))
115138
return "ERROR " + error;
116-
JsonObject array = new Gson().fromJson(json, JsonObject.class);
139+
JsonObject array = new Gson().fromJson(json.getValue(), JsonObject.class);
117140
for (JsonElement asset : array.get("assets").getAsJsonArray())
118141
{
119142
if (StringUtils.endsWithIgnoreCase(((JsonObject) asset).get("name").getAsString(), ".jar"))

src/main/java/net/kunmc/lab/teamkunpluginmanager/utils/URLUtils.java

Lines changed: 56 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,42 +8,88 @@
88
import java.io.IOException;
99
import java.io.InputStream;
1010
import java.io.OutputStream;
11+
import java.io.PrintStream;
1112
import java.net.HttpURLConnection;
1213
import java.net.URL;
1314
import java.nio.charset.StandardCharsets;
1415
import java.nio.file.NoSuchFileException;
1516

1617
public class URLUtils
1718
{
18-
public static String getAsString(String urlString)
19+
/**
20+
* URLにPOSTした結果を返す。
21+
* @param urlString URL
22+
* @param data データ
23+
* @param accept 受け入れるタイプ。 application/
24+
* @return レスポンスコード, 結果
25+
*/
26+
public static Pair<Integer, String> postAsString(String urlString, String data, String accept, String content_type)
1927
{
2028
try
2129
{
2230
URL url = new URL(urlString);
2331
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
24-
connection.setRequestMethod("GET");
32+
connection.setRequestMethod("POST");
2533
if (url.getHost().equals("api.github.com"))
2634
connection.setRequestProperty("Authorization", "token " + TeamKunPluginManager.vault.getToken());
2735
if (url.getHost().equals("file.io"))
2836
connection.setRequestProperty("Referer", "https://www.file.io/");
2937
connection.setRequestProperty("User-Agent", "Mozilla/8.10; Safari/Chrome/Opera/Edge/KungleBot-Peyang; Mobile-Desktop");
38+
connection.setRequestProperty("Accept", accept);
39+
connection.setRequestProperty("Content-Type", content_type);
40+
connection.setDoOutput(true);
41+
connection.setDoInput(true);
3042
connection.connect();
3143

32-
if (connection.getResponseCode() == 404)
33-
return "{'message': 'プラグインが見つかりませんでした。'}";
34-
if (connection.getResponseCode() == 403)
35-
return "{'message': 'プラグインを取得できません。しばらくしてからもう一度インストールしてください。'}";
44+
try(OutputStream os = connection.getOutputStream();)
45+
{
46+
PrintStream prtstr = new PrintStream(os);
47+
prtstr.println(data);
48+
prtstr.close();
49+
int resp = connection.getResponseCode();
50+
if (resp < 200 || resp > 299)
51+
return new Pair<>(resp, "");
52+
53+
try(InputStream is = connection.getInputStream();)
54+
{
55+
return new Pair<>(resp, IOUtils.toString(is, StandardCharsets.UTF_8));
56+
}
57+
}
58+
59+
}
60+
catch (Exception e)
61+
{
62+
e.printStackTrace();
63+
return new Pair<>(-1, "");
64+
}
65+
}
3666

37-
if (connection.getResponseCode() != 200)
38-
return "{'message': '不明なエラーが発生しました。'}";
67+
/**
68+
* URLから取得した結果を返す。
69+
* @param urlString URL
70+
* @return レスポンスコード, 結果
71+
*/
72+
public static Pair<Integer, String> getAsString(String urlString)
73+
{
74+
try
75+
{
76+
URL url = new URL(urlString);
77+
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
78+
connection.setRequestMethod("GET");
79+
if (url.getHost().equals("api.github.com"))
80+
connection.setRequestProperty("Authorization", "token " + TeamKunPluginManager.vault.getToken());
81+
if (url.getHost().equals("file.io"))
82+
connection.setRequestProperty("Referer", "https://www.file.io/");
83+
connection.setRequestProperty("User-Agent", "Mozilla/8.10; Safari/Chrome/Opera/Edge/KungleBot-Peyang; Mobile-Desktop");
84+
connection.connect();
3985

40-
return IOUtils.toString(connection.getInputStream(), StandardCharsets.UTF_8);
86+
return new Pair<>(connection.getResponseCode(), IOUtils.toString(connection.getInputStream(), StandardCharsets.UTF_8));
4187

4288
}
4389
catch (Exception e)
4490
{
4591
e.printStackTrace();
46-
return "[]";
92+
return new Pair<>(-1, "");
4793
}
4894
}
4995

src/main/java/net/kunmc/lab/teamkunpluginmanager/utils/rdmarker/DevBukkit.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ public static String toDownloadUrl(String urlName)
7575
if (slug == null)
7676
return urlName;
7777
JsonArray projectSearchResult = new Gson().fromJson(
78-
URLUtils.getAsString("https://servermods.forgesvc.net/servermods/projects?search=" + slug),
78+
URLUtils.getAsString("https://servermods.forgesvc.net/servermods/projects?search=" + slug).getValue(),
7979
JsonArray.class);
8080

8181
String id = null;
@@ -96,7 +96,7 @@ public static String toDownloadUrl(String urlName)
9696
return urlName;
9797

9898
JsonArray files = new Gson().fromJson(
99-
URLUtils.getAsString("https://servermods.forgesvc.net/servermods/files?projectIds=" + id),
99+
URLUtils.getAsString("https://servermods.forgesvc.net/servermods/files?projectIds=" + id).getValue(),
100100
JsonArray.class);
101101

102102
String apiVersion = StringUtils.split(Bukkit.getVersion(), "-")[0];

0 commit comments

Comments
 (0)