mirror of
https://github.com/AtlasMediaGroup/TotalFreedomMod.git
synced 2024-12-28 12:47:36 +00:00
Pterodactyl
This commit is contained in:
parent
3057421d6d
commit
81eb333b6a
@ -1,187 +0,0 @@
|
||||
package me.totalfreedom.totalfreedommod;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import joptsimple.internal.Strings;
|
||||
import lombok.Getter;
|
||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||
import me.totalfreedom.totalfreedommod.staff.StaffMember;
|
||||
import me.totalfreedom.totalfreedommod.util.FLog;
|
||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||
import org.json.simple.JSONObject;
|
||||
import org.json.simple.parser.JSONParser;
|
||||
import org.json.simple.parser.ParseException;
|
||||
|
||||
public class AMP extends FreedomService
|
||||
{
|
||||
|
||||
public String URL = ConfigEntry.AMP_URL.getString();
|
||||
private String API_URL = URL + "/API/Core";
|
||||
private String USERNAME = ConfigEntry.AMP_USERNAME.getString();
|
||||
private String PASSWORD = ConfigEntry.AMP_PASSWORD.getString();
|
||||
private String SESSION_ID;
|
||||
|
||||
@Getter
|
||||
private boolean enabled = !Strings.isNullOrEmpty(URL);
|
||||
|
||||
private final List<String> headers = Arrays.asList("Accept:application/json");
|
||||
|
||||
public void onStart()
|
||||
{
|
||||
if (enabled)
|
||||
{
|
||||
login();
|
||||
}
|
||||
}
|
||||
|
||||
public void onStop()
|
||||
{
|
||||
if (enabled)
|
||||
{
|
||||
logout();
|
||||
}
|
||||
}
|
||||
|
||||
public void login()
|
||||
{
|
||||
JSONObject json = new JSONObject();
|
||||
json.put("username", USERNAME);
|
||||
json.put("password", PASSWORD);
|
||||
json.put("token", "");
|
||||
json.put("rememberMe", false);
|
||||
|
||||
String response;
|
||||
try
|
||||
{
|
||||
response = FUtil.sendRequest(API_URL + "/Login", "POST", headers, json.toJSONString());
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
return;
|
||||
}
|
||||
|
||||
JSONObject jsonResponse;
|
||||
try
|
||||
{
|
||||
jsonResponse = (JSONObject)new JSONParser().parse(response);
|
||||
}
|
||||
catch (ParseException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
return;
|
||||
}
|
||||
|
||||
Object sessionID = jsonResponse.get("sessionID");
|
||||
if (sessionID == null)
|
||||
{
|
||||
FLog.warning("Invalid AMP credentials have been specified in the config");
|
||||
enabled = false;
|
||||
return;
|
||||
}
|
||||
SESSION_ID = sessionID.toString();
|
||||
FLog.info("Logged into AMP");
|
||||
}
|
||||
|
||||
public void logout()
|
||||
{
|
||||
JSONObject json = new JSONObject();
|
||||
json.put("SESSIONID", SESSION_ID);
|
||||
|
||||
try
|
||||
{
|
||||
FUtil.sendRequest(API_URL + "/Logout", "POST", headers, json.toJSONString());
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
return;
|
||||
}
|
||||
|
||||
FLog.info("Logged out of AMP");
|
||||
}
|
||||
|
||||
public void updateAccountStatus(StaffMember staffMember)
|
||||
{
|
||||
String username = staffMember.getAmpUsername();
|
||||
|
||||
if (username == null || !enabled)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!staffMember.isActive() || staffMember.getRank() != Rank.ADMIN)
|
||||
{
|
||||
FLog.debug("Disabling amp acc");
|
||||
setAccountEnabled(username, false);
|
||||
return;
|
||||
}
|
||||
|
||||
FLog.debug("Enabling amp acc");
|
||||
setAccountEnabled(username, true);
|
||||
}
|
||||
|
||||
public void createAccount(String username, String password)
|
||||
{
|
||||
makeAccount(username);
|
||||
setPassword(username, password);
|
||||
}
|
||||
|
||||
public void setAccountEnabled(String username, boolean enable)
|
||||
{
|
||||
JSONObject json = new JSONObject();
|
||||
json.put("Username", username);
|
||||
json.put("Disabled", !enable);
|
||||
json.put("PasswordExpires", false);
|
||||
json.put("CannotChangePassword", false);
|
||||
json.put("MustChangePassword", false);
|
||||
json.put("SESSIONID", SESSION_ID);
|
||||
|
||||
try
|
||||
{
|
||||
FUtil.sendRequest(API_URL + "/UpdateUserInfo", "POST", headers, json.toJSONString());
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
private void makeAccount(String username)
|
||||
{
|
||||
JSONObject json = new JSONObject();
|
||||
json.put("Username", username);
|
||||
json.put("SESSIONID", SESSION_ID);
|
||||
|
||||
try
|
||||
{
|
||||
FUtil.sendRequest(API_URL + "/CreateUser", "POST", headers, json.toJSONString());
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
public void setPassword(String username, String password)
|
||||
{
|
||||
JSONObject json = new JSONObject();
|
||||
json.put("Username", username);
|
||||
json.put("NewPassword", password);
|
||||
json.put("SESSIONID", SESSION_ID);
|
||||
|
||||
try
|
||||
{
|
||||
FUtil.sendRequest(API_URL + "/ResetUserPassword", "POST", headers, json.toJSONString());
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
178
src/main/java/me/totalfreedom/totalfreedommod/Pterodactyl.java
Normal file
178
src/main/java/me/totalfreedom/totalfreedommod/Pterodactyl.java
Normal file
@ -0,0 +1,178 @@
|
||||
package me.totalfreedom.totalfreedommod;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import joptsimple.internal.Strings;
|
||||
import lombok.Getter;
|
||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||
import me.totalfreedom.totalfreedommod.staff.StaffMember;
|
||||
import me.totalfreedom.totalfreedommod.util.FLog;
|
||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||
import me.totalfreedom.totalfreedommod.util.Response;
|
||||
import org.json.simple.JSONObject;
|
||||
import org.json.simple.parser.ParseException;
|
||||
|
||||
public class Pterodactyl extends FreedomService
|
||||
{
|
||||
|
||||
public final String URL = ConfigEntry.PTERO_URL.getString();
|
||||
private final String SERVER_KEY = ConfigEntry.PTERO_SERVER_KEY.getString();
|
||||
private final String ADMIN_KEY = ConfigEntry.PTERO_ADMIN_KEY.getString();
|
||||
private final List<String> SERVER_HEADERS = Arrays.asList("Accept:Application/vnd.pterodactyl.v1+json", "Content-Type:application/json", "Authorization:Bearer " + SERVER_KEY);
|
||||
private final List<String> ADMIN_HEADERS = Arrays.asList("Accept:Application/vnd.pterodactyl.v1+json", "Content-Type:application/json", "Authorization:Bearer " + ADMIN_KEY);
|
||||
|
||||
@Getter
|
||||
private boolean enabled = !Strings.isNullOrEmpty(URL);
|
||||
|
||||
public void onStart()
|
||||
{
|
||||
}
|
||||
|
||||
public void onStop()
|
||||
{
|
||||
}
|
||||
|
||||
public void updateAccountStatus(StaffMember staffMember)
|
||||
{
|
||||
String id = staffMember.getPteroID();
|
||||
|
||||
if (Strings.isNullOrEmpty(id) || !enabled)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!staffMember.isActive() || staffMember.getRank() != Rank.ADMIN)
|
||||
{
|
||||
FLog.debug("Disabling ptero acc");
|
||||
removeAccountFromServer(id);
|
||||
return;
|
||||
}
|
||||
|
||||
FLog.debug("Enabling aptero acc");
|
||||
addAccountToServer(id);
|
||||
}
|
||||
|
||||
public String createAccount(String username, String password)
|
||||
{
|
||||
JSONObject json = new JSONObject();
|
||||
json.put("username", username);
|
||||
json.put("password", password);
|
||||
json.put("email", username.toLowerCase() + "@" + ConfigEntry.PTERO_DEFAULT_EMAIL_DOMAIN.getString());
|
||||
json.put("first_name", username);
|
||||
json.put("last_name", "\u200E"); // required, so I made it appear empty
|
||||
|
||||
Response response;
|
||||
JSONObject jsonResponse;
|
||||
try
|
||||
{
|
||||
response = FUtil.sendRequest(URL + "/api/application/users", "POST", ADMIN_HEADERS, json.toJSONString());
|
||||
jsonResponse = response.getJSONMessage();
|
||||
}
|
||||
catch (IOException | ParseException e)
|
||||
{
|
||||
FLog.severe(e);
|
||||
return null;
|
||||
}
|
||||
|
||||
return ((JSONObject)jsonResponse.get("attributes")).get("id").toString();
|
||||
|
||||
}
|
||||
|
||||
public boolean deleteAccount(String id)
|
||||
{
|
||||
JSONObject json = new JSONObject();
|
||||
try
|
||||
{
|
||||
return FUtil.sendRequest(URL + "/api/application/users/" + id, "DELETE", ADMIN_HEADERS, json.toJSONString()).getCode() == 204;
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
FLog.severe(e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public void addAccountToServer(String id)
|
||||
{
|
||||
String url = URL + "/api/client/servers/" + ConfigEntry.PTERO_SERVER_UUID.getString() + "/users";
|
||||
|
||||
JSONObject userData = getUserData(id);
|
||||
if (userData == null)
|
||||
{
|
||||
FLog.severe("The Pterodactyl user with the ID of " + id + " was not found");
|
||||
return;
|
||||
}
|
||||
|
||||
JSONObject json = new JSONObject();
|
||||
json.put("email", userData.get("email").toString());
|
||||
json.put("permissions", Arrays.asList("control.console", "control.start", "control.restart", "control.stop", "control.kill"));
|
||||
|
||||
try
|
||||
{
|
||||
FUtil.sendRequest(url, "POST", SERVER_HEADERS, json.toJSONString());
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
FLog.severe(e);
|
||||
}
|
||||
}
|
||||
|
||||
public void removeAccountFromServer(String id)
|
||||
{
|
||||
JSONObject userData = getUserData(id);
|
||||
if (userData == null)
|
||||
{
|
||||
FLog.severe("The Pterodactyl user with the ID of " + id + " was not found");
|
||||
return;
|
||||
}
|
||||
|
||||
String url = URL + "/api/client/servers/" + ConfigEntry.PTERO_SERVER_UUID.getString() + "/users/" + userData.get("uuid");
|
||||
|
||||
try
|
||||
{
|
||||
FUtil.sendRequest(url, "DELETE", SERVER_HEADERS, null);
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
FLog.severe(e);
|
||||
}
|
||||
}
|
||||
|
||||
public JSONObject getUserData(String id)
|
||||
{
|
||||
Response response;
|
||||
JSONObject jsonResponse;
|
||||
try
|
||||
{
|
||||
response = FUtil.sendRequest(URL + "/api/application/users/" + id, "GET", ADMIN_HEADERS, null);
|
||||
jsonResponse = response.getJSONMessage();
|
||||
|
||||
}
|
||||
catch (IOException | ParseException e)
|
||||
{
|
||||
FLog.severe(e);
|
||||
return null;
|
||||
}
|
||||
|
||||
return (JSONObject)jsonResponse.get("attributes");
|
||||
|
||||
}
|
||||
|
||||
// API patch function on users doesnt work rn, it throws 500 errors, so it's probably not written yet
|
||||
public void setPassword(String id, String password)
|
||||
{
|
||||
JSONObject json = new JSONObject();
|
||||
json.put("password", password);
|
||||
|
||||
try
|
||||
{
|
||||
FUtil.sendRequest(URL + "/api/application/users/" + id, "PATCH", ADMIN_HEADERS, json.toJSONString());
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
FLog.severe(e);
|
||||
}
|
||||
}
|
||||
}
|
@ -201,23 +201,19 @@ public class Reddit extends FreedomService
|
||||
{
|
||||
flairList.put(Title.OWNER, ConfigEntry.REDDIT_SERVER_OWNER_FLAIR_ID.getString());
|
||||
flairList.put(Title.EXECUTIVE, ConfigEntry.REDDIT_EXECUTIVE_FLAIR_ID.getString());
|
||||
flairList.put(Title.ASSISTANT_EXECUTIVE, ConfigEntry.REDDIT_ASSISTANT_EXECUTIVE_FLAIR_ID.getString());
|
||||
flairList.put(Title.DEVELOPER, ConfigEntry.REDDIT_DEVELOPER_FLAIR_ID.getString());
|
||||
flairList.put(Rank.ADMIN, ConfigEntry.REDDIT_ADMIN_FLAIR_ID.getString());
|
||||
flairList.put(Rank.MOD, ConfigEntry.REDDIT_MOD_FLAIR_ID.getString());
|
||||
flairList.put(Rank.TRIAL_MOD, ConfigEntry.REDDIT_TRIAL_MOD_FLAIR_ID.getString());
|
||||
flairList.put(Title.MASTER_BUILDER, ConfigEntry.REDDIT_MASTER_BUILDER_FLAIR_ID.getString());
|
||||
flairList.put(Title.DONATOR, ConfigEntry.REDDIT_DONATOR_FLAIR_ID.getString());
|
||||
|
||||
// Work around because the current flair id keeps returning null, either a JRAW bug or a reddit bug
|
||||
flairNameList.put(Title.OWNER, "Server Owner");
|
||||
flairNameList.put(Title.EXECUTIVE, "Executive");
|
||||
flairNameList.put(Title.ASSISTANT_EXECUTIVE, "Assistant Executive");
|
||||
flairNameList.put(Title.DEVELOPER, "Developer");
|
||||
flairNameList.put(Rank.ADMIN, "Admin");
|
||||
flairNameList.put(Rank.MOD, "Mod");
|
||||
flairNameList.put(Rank.TRIAL_MOD, "Trial Mod");
|
||||
flairNameList.put(Title.MASTER_BUILDER, "Master Builder");
|
||||
flairNameList.put(Title.DONATOR, "Premium");
|
||||
}
|
||||
}
|
||||
|
@ -135,7 +135,7 @@ public class TotalFreedomMod extends JavaPlugin
|
||||
public EntityWiper ew;
|
||||
public Sitter st;
|
||||
public VanishHandler vh;
|
||||
public AMP amp;
|
||||
public Pterodactyl ptero;
|
||||
|
||||
//public HubWorldRestrictions hwr;
|
||||
//
|
||||
@ -233,7 +233,7 @@ public class TotalFreedomMod extends JavaPlugin
|
||||
ew = new EntityWiper();
|
||||
st = new Sitter();
|
||||
vh = new VanishHandler();
|
||||
amp = new AMP();
|
||||
ptero = new Pterodactyl();
|
||||
|
||||
// Single admin utils
|
||||
cs = new CommandSpy();
|
||||
|
@ -1,101 +0,0 @@
|
||||
package me.totalfreedom.totalfreedommod.command;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import me.totalfreedom.totalfreedommod.player.PlayerData;
|
||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||
import me.totalfreedom.totalfreedommod.staff.StaffMember;
|
||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
@CommandPermissions(level = Rank.ADMIN, source = SourceType.ONLY_IN_GAME)
|
||||
@CommandParameters(description = "Manage your AMP account", usage = "/<command> <create | resetpassword>")
|
||||
public class Command_amp extends FreedomCommand
|
||||
{
|
||||
|
||||
@Override
|
||||
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
||||
{
|
||||
|
||||
if (!plugin.amp.isEnabled())
|
||||
{
|
||||
msg("AMP integration is currently disabled.", ChatColor.RED);
|
||||
return true;
|
||||
}
|
||||
|
||||
PlayerData playerData = getData(playerSender);
|
||||
|
||||
if (playerData.getDiscordID() == null)
|
||||
{
|
||||
msg("You must have a linked discord account.", ChatColor.RED);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (args.length == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (args[0].equals("create"))
|
||||
{
|
||||
msg("Creating your AMP account...", ChatColor.GREEN);
|
||||
StaffMember staffMember = getAdmin(playerSender);
|
||||
|
||||
if (staffMember.getAmpUsername() != null)
|
||||
{
|
||||
msg("You already have an AMP account.", ChatColor.RED);
|
||||
return true;
|
||||
}
|
||||
|
||||
String username = sender.getName();
|
||||
String password = FUtil.randomString(30);
|
||||
|
||||
staffMember.setAmpUsername(username);
|
||||
plugin.sl.save(staffMember);
|
||||
plugin.sl.updateTables();
|
||||
|
||||
plugin.amp.createAccount(username, password);
|
||||
plugin.dc.sendAMPInfo(playerData, username, password);
|
||||
msg("Successfully created your AMP account. Check your DMs from " + plugin.dc.formatBotTag() + " on discord to get your credentials.", ChatColor.GREEN);
|
||||
return true;
|
||||
}
|
||||
else if (args[0].equals("resetpassword"))
|
||||
{
|
||||
StaffMember staffMember = getAdmin(playerSender);
|
||||
|
||||
if (staffMember.getAmpUsername() == null)
|
||||
{
|
||||
msg("You do not have an AMP account.", ChatColor.RED);
|
||||
return true;
|
||||
}
|
||||
|
||||
msg("Resetting your password...", ChatColor.GREEN);
|
||||
|
||||
String username = staffMember.getAmpUsername();
|
||||
String password = FUtil.randomString(30);
|
||||
plugin.amp.setPassword(username,password);
|
||||
plugin.dc.sendAMPInfo(playerData, username, password);
|
||||
|
||||
msg("Successfully reset your AMP account password. Check your DMs from " + plugin.dc.formatBotTag() + " on discord to get your credentials.", ChatColor.GREEN);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getTabCompleteOptions(CommandSender sender, Command command, String alias, String[] args)
|
||||
{
|
||||
if (args.length == 1 && plugin.sl.isAdmin(sender))
|
||||
{
|
||||
return Arrays.asList("create", "resetpassword");
|
||||
}
|
||||
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
}
|
@ -1,91 +0,0 @@
|
||||
package me.totalfreedom.totalfreedommod.command;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||
import me.totalfreedom.totalfreedommod.player.PlayerData;
|
||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||
import me.totalfreedom.totalfreedommod.util.FLog;
|
||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
@CommandPermissions(level = Rank.ADMIN, source = SourceType.ONLY_CONSOLE)
|
||||
@CommandParameters(description = "Adds or removes donators", usage = "/<command> <mode> <name> <ip> <package> [forum_user]")
|
||||
public class Command_donator extends FreedomCommand
|
||||
{
|
||||
|
||||
@Override
|
||||
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
||||
{
|
||||
if (!FUtil.isFromHostConsole(sender.getName()) && !ConfigEntry.SERVER_OWNERS.getStringList().contains(sender.getName()))
|
||||
{
|
||||
return noPerms();
|
||||
}
|
||||
|
||||
Boolean mode = args[0].equals("add");
|
||||
String name = args[1];
|
||||
String ip = args[2];
|
||||
String pkg = args[3];
|
||||
String forum_id = null;
|
||||
|
||||
if (args.length > 4)
|
||||
{
|
||||
forum_id = args[4];
|
||||
}
|
||||
|
||||
PlayerData data = plugin.pl.getData(name);
|
||||
|
||||
if (data == null)
|
||||
{
|
||||
data = plugin.pl.getDataByIp(ip);
|
||||
}
|
||||
|
||||
if (data != null)
|
||||
{
|
||||
data.setDonator(mode);
|
||||
plugin.pl.save(data);
|
||||
}
|
||||
|
||||
if (mode)
|
||||
{
|
||||
FUtil.bcastMsg(ChatColor.AQUA + name + ChatColor.GREEN + " has donated to the server!");
|
||||
}
|
||||
Player player = getPlayer(name);
|
||||
|
||||
if (player != null)
|
||||
{
|
||||
plugin.rm.updateDisplay(player);
|
||||
}
|
||||
|
||||
if (forum_id != null && !forum_id.equals("0"))
|
||||
{
|
||||
String baseurl = ConfigEntry.DONATION_PROBOARDS_URL.getString();
|
||||
String group_id = ConfigEntry.DONATION_GROUP_ID.getString();
|
||||
String session_id = ConfigEntry.DONATION_SESSION_ID.getString();
|
||||
String csrf_token = ConfigEntry.DONATION_CSRF_TOKEN.getString();
|
||||
if (baseurl == null || group_id == null || session_id == null || csrf_token == null)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
String url = baseurl + "/user/group_members/" + (mode ? "adding" : "remove");
|
||||
List<String> headers = Arrays.asList("Cookie:session_id=" + session_id, "X-Requested-With:XMLHttpRequest");
|
||||
String payload = "group_id=" + group_id + "&user_ids[]=" + forum_id + "&csrf_token=" + csrf_token;
|
||||
|
||||
try
|
||||
{
|
||||
FUtil.sendRequest(url, "POST", headers, payload);
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
FLog.severe(e.getMessage());
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
@ -44,14 +44,14 @@ public class Command_doom extends FreedomCommand
|
||||
final String ip = player.getAddress().getAddress().getHostAddress().trim();
|
||||
|
||||
// Remove from admin
|
||||
StaffMember staffMember = getAdmin(player);
|
||||
StaffMember staffMember = getStaffMember(player);
|
||||
if (staffMember != null)
|
||||
{
|
||||
FUtil.staffAction(sender.getName(), "Removing " + player.getName() + " from the staff list", true);
|
||||
staffMember.setActive(false);
|
||||
plugin.sl.save(staffMember);
|
||||
plugin.sl.updateTables();
|
||||
plugin.amp.updateAccountStatus(staffMember);
|
||||
plugin.ptero.updateAccountStatus(staffMember);
|
||||
if (plugin.dc.enabled && ConfigEntry.DISCORD_ROLE_SYNC.getBoolean())
|
||||
{
|
||||
plugin.dc.syncRoles(staffMember, plugin.pl.getData(staffMember.getName()).getDiscordID());
|
||||
|
@ -29,7 +29,7 @@ public class Command_mystaff extends FreedomCommand
|
||||
}
|
||||
|
||||
Player init = null;
|
||||
StaffMember target = getAdmin(playerSender);
|
||||
StaffMember target = getStaffMember(playerSender);
|
||||
Player targetPlayer = playerSender;
|
||||
|
||||
// -o switch
|
||||
@ -44,7 +44,7 @@ public class Command_mystaff extends FreedomCommand
|
||||
return true;
|
||||
}
|
||||
|
||||
target = getAdmin(targetPlayer);
|
||||
target = getStaffMember(targetPlayer);
|
||||
if (target == null)
|
||||
{
|
||||
msg("That player is not a staff member", ChatColor.RED);
|
||||
|
@ -0,0 +1,136 @@
|
||||
package me.totalfreedom.totalfreedommod.command;
|
||||
|
||||
import com.google.common.base.Strings;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import me.totalfreedom.totalfreedommod.player.PlayerData;
|
||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||
import me.totalfreedom.totalfreedommod.staff.StaffMember;
|
||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
@CommandPermissions(level = Rank.ADMIN, source = SourceType.ONLY_IN_GAME)
|
||||
@CommandParameters(description = "Manage your Pterodactyl panel account", usage = "/<command> <create | delete>")
|
||||
public class Command_panel extends FreedomCommand
|
||||
{
|
||||
|
||||
@Override
|
||||
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
||||
{
|
||||
|
||||
if (!plugin.ptero.isEnabled())
|
||||
{
|
||||
msg("Pterodactyl integration is currently disabled.", ChatColor.RED);
|
||||
return true;
|
||||
}
|
||||
|
||||
PlayerData playerData = getData(playerSender);
|
||||
|
||||
if (playerData.getDiscordID() == null)
|
||||
{
|
||||
msg("You must have a linked discord account.", ChatColor.RED);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (args.length == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (args[0].equals("create"))
|
||||
{
|
||||
msg("Creating your Pterodactyl account...", ChatColor.GREEN);
|
||||
StaffMember staffMember = getStaffMember(playerSender);
|
||||
|
||||
if (staffMember.getPteroID() != null)
|
||||
{
|
||||
msg("You already have a Pterodactyl account.", ChatColor.RED);
|
||||
return true;
|
||||
}
|
||||
|
||||
String username = sender.getName();
|
||||
String password = FUtil.randomString(30);
|
||||
|
||||
String id = plugin.ptero.createAccount(username, password);
|
||||
if (Strings.isNullOrEmpty(id))
|
||||
{
|
||||
msg("Failed to create your Pterodactyl account.", ChatColor.RED);
|
||||
return true;
|
||||
}
|
||||
|
||||
plugin.ptero.addAccountToServer(id);
|
||||
|
||||
staffMember.setPteroID(id);
|
||||
plugin.sl.save(staffMember);
|
||||
plugin.sl.updateTables();
|
||||
|
||||
plugin.dc.sendPteroInfo(playerData, username, password);
|
||||
msg("Successfully created your Pterodactyl account. Check your DMs from " + plugin.dc.formatBotTag() + " on discord to get your credentials.", ChatColor.GREEN);
|
||||
return true;
|
||||
}
|
||||
else if (args[0].equals("delete"))
|
||||
{
|
||||
msg("Deleting your Pterodactyl account...", ChatColor.GREEN);
|
||||
StaffMember staffMember = getStaffMember(playerSender);
|
||||
|
||||
if (staffMember.getPteroID() == null)
|
||||
{
|
||||
msg("You do not have a Pterodactyl account.", ChatColor.RED);
|
||||
return true;
|
||||
}
|
||||
|
||||
boolean deleted = plugin.ptero.deleteAccount(staffMember.getPteroID());
|
||||
|
||||
if (!deleted)
|
||||
{
|
||||
msg("Failed to delete your Pterodactyl account.", ChatColor.RED);
|
||||
return true;
|
||||
}
|
||||
|
||||
staffMember.setPteroID(null);
|
||||
plugin.sl.save(staffMember);
|
||||
plugin.sl.updateTables();
|
||||
|
||||
msg("Successfully deleted your Pterodactyl account.", ChatColor.GREEN);
|
||||
return true;
|
||||
}
|
||||
/*else if (args[0].equals("resetpassword"))
|
||||
{
|
||||
StaffMember staffMember = getAdmin(playerSender);
|
||||
|
||||
if (staffMember.getAmpUsername() == null)
|
||||
{
|
||||
msg("You do not have a Pterodactyl account.", ChatColor.RED);
|
||||
return true;
|
||||
}
|
||||
|
||||
msg("Resetting your password...", ChatColor.GREEN);
|
||||
|
||||
String id = staffMember.getPteroID();
|
||||
String password = FUtil.randomString(30);
|
||||
plugin.ptero.setPassword(id, password);
|
||||
plugin.dc.sendPteroInfo(playerData, null, password);
|
||||
|
||||
msg("Successfully reset your AMP account password. Check your DMs from " + plugin.dc.formatBotTag() + " on discord to get your credentials.", ChatColor.GREEN);
|
||||
return true;
|
||||
}*/
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getTabCompleteOptions(CommandSender sender, Command command, String alias, String[] args)
|
||||
{
|
||||
if (args.length == 1 && plugin.sl.isAdmin(sender))
|
||||
{
|
||||
return Arrays.asList("create", "delete");
|
||||
}
|
||||
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
}
|
@ -112,7 +112,7 @@ public class Command_slconfig extends FreedomCommand
|
||||
plugin.dc.syncRoles(staffMember, plugin.pl.getData(staffMember.getName()).getDiscordID());
|
||||
}
|
||||
|
||||
plugin.amp.updateAccountStatus(staffMember);
|
||||
plugin.ptero.updateAccountStatus(staffMember);
|
||||
|
||||
msg("Set " + staffMember.getName() + "'s rank to " + rank.getName());
|
||||
return true;
|
||||
@ -206,7 +206,7 @@ public class Command_slconfig extends FreedomCommand
|
||||
|
||||
plugin.sl.addAdmin(staffMember);
|
||||
plugin.rm.updateDisplay(player);
|
||||
plugin.amp.updateAccountStatus(staffMember);
|
||||
plugin.ptero.updateAccountStatus(staffMember);
|
||||
}
|
||||
else // Existing staff member
|
||||
{
|
||||
@ -243,7 +243,7 @@ public class Command_slconfig extends FreedomCommand
|
||||
{
|
||||
plugin.dc.syncRoles(staffMember, plugin.pl.getData(player).getDiscordID());
|
||||
}
|
||||
plugin.amp.updateAccountStatus(staffMember);
|
||||
plugin.ptero.updateAccountStatus(staffMember);
|
||||
}
|
||||
|
||||
if (player != null)
|
||||
@ -299,7 +299,7 @@ public class Command_slconfig extends FreedomCommand
|
||||
Discord.syncRoles(staffMember, plugin.pl.getData(staffMember.getName()).getDiscordID());
|
||||
}
|
||||
|
||||
plugin.amp.updateAccountStatus(staffMember);
|
||||
plugin.ptero.updateAccountStatus(staffMember);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -49,7 +49,7 @@ public class Command_verify extends FreedomCommand
|
||||
{
|
||||
String code = plugin.dc.generateCode(10);
|
||||
plugin.dc.addVerificationCode(code, playerData);
|
||||
plugin.dc.bot.getUserById(discordId).openPrivateChannel().complete().sendMessage("A user with the IP `" + FUtil.getIp(playerSender) + "` has sent a verification request. Please run the following in-game command: `/verify " + code + "`").complete();
|
||||
plugin.dc.getUser(discordId).openPrivateChannel().complete().sendMessage("A user with the IP `" + FUtil.getIp(playerSender) + "` has sent a verification request. Please run the following in-game command: `/verify " + code + "`").complete();
|
||||
msg("A verification code has been sent to your account, please copy the code and run /verify <code>", ChatColor.GREEN);
|
||||
return true;
|
||||
}
|
||||
|
@ -324,12 +324,12 @@ public abstract class FreedomCommand implements CommandExecutor, TabCompleter
|
||||
return player;
|
||||
}
|
||||
|
||||
protected StaffMember getAdmin(CommandSender sender)
|
||||
protected StaffMember getStaffMember(CommandSender sender)
|
||||
{
|
||||
return plugin.sl.getAdmin(sender);
|
||||
}
|
||||
|
||||
protected StaffMember getAdmin(Player player)
|
||||
protected StaffMember getStaffMember(Player player)
|
||||
{
|
||||
return plugin.sl.getAdmin(player);
|
||||
}
|
||||
|
@ -57,7 +57,6 @@ public enum ConfigEntry
|
||||
SERVER_LOGIN_SUBTITLE(String.class, "server.login_title.subtitle"),
|
||||
SERVER_OWNERS(List.class, "server.owners"),
|
||||
SERVER_EXECUTIVES(List.class, "server.executives"),
|
||||
SERVER_ASSISTANT_EXECUTIVES(List.class, "server.assistant_executives"),
|
||||
SERVER_MASTER_BUILDER_MANAGEMENT(List.class, "server.master_builder_management"),
|
||||
SERVER_BAN_URL(String.class, "server.ban_url"),
|
||||
SERVER_INDEFBAN_URL(String.class, "server.indefban_url"),
|
||||
@ -80,7 +79,6 @@ public enum ConfigEntry
|
||||
DISCORD_MOD_ROLE_ID(String.class, "discord.mod_role_id"),
|
||||
DISCORD_ADMIN_ROLE_ID(String.class, "discord.admin_role_id"),
|
||||
DISCORD_DEVELOPER_ROLE_ID(String.class, "discord.developer_role_id"),
|
||||
DISCORD_ASSISTANT_EXECUTIVE_ROLE_ID(String.class, "discord.assistant_executive_role_id"),
|
||||
DISCORD_EXECUTIVE_ROLE_ID(String.class, "discord.executive_role_id"),
|
||||
DISCORD_SERVER_OWNER_ROLE_ID(String.class, "discord.server_owner_role_id"),
|
||||
//
|
||||
@ -95,13 +93,14 @@ public enum ConfigEntry
|
||||
REDDIT_MOD_FLAIR_ID(String.class, "reddit.mod_flair_id"),
|
||||
REDDIT_ADMIN_FLAIR_ID(String.class, "reddit.admin_flair_id"),
|
||||
REDDIT_DEVELOPER_FLAIR_ID(String.class, "reddit.developer_flair_id"),
|
||||
REDDIT_ASSISTANT_EXECUTIVE_FLAIR_ID(String.class, "reddit.assistant_executive_flair_id"),
|
||||
REDDIT_EXECUTIVE_FLAIR_ID(String.class, "reddit.executive_flair_id"),
|
||||
REDDIT_SERVER_OWNER_FLAIR_ID(String.class, "reddit.server_owner_flair_id"),
|
||||
//
|
||||
AMP_URL(String.class, "amp.url"),
|
||||
AMP_USERNAME(String.class, "amp.username"),
|
||||
AMP_PASSWORD(String.class, "amp.password"),
|
||||
PTERO_URL(String.class, "ptero.url"),
|
||||
PTERO_DEFAULT_EMAIL_DOMAIN(String.class, "ptero.default_email_domain"),
|
||||
PTERO_SERVER_UUID(String.class, "ptero.server_uuid"),
|
||||
PTERO_ADMIN_KEY(String.class, "ptero.admin_key"),
|
||||
PTERO_SERVER_KEY(String.class, "ptero.server_key"),
|
||||
//
|
||||
DONATION_PROBOARDS_URL(String.class, "donation.proboards_url"),
|
||||
DONATION_GROUP_ID(String.class, "donation.donator_group_id"),
|
||||
|
@ -34,6 +34,9 @@ import net.dv8tion.jda.api.entities.TextChannel;
|
||||
import net.dv8tion.jda.api.entities.User;
|
||||
import net.dv8tion.jda.api.events.ReadyEvent;
|
||||
import net.dv8tion.jda.api.hooks.ListenerAdapter;
|
||||
import net.dv8tion.jda.api.requests.GatewayIntent;
|
||||
import net.dv8tion.jda.api.utils.ChunkingFilter;
|
||||
import net.dv8tion.jda.api.utils.MemberCachePolicy;
|
||||
import net.dv8tion.jda.internal.utils.concurrent.CountingThreadFactory;
|
||||
import org.apache.commons.codec.digest.DigestUtils;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
@ -90,6 +93,9 @@ public class Discord extends FreedomService
|
||||
})
|
||||
.setAutoReconnect(true)
|
||||
.setRateLimitPool(RATELIMIT_EXECUTOR)
|
||||
.setChunkingFilter(ChunkingFilter.ALL)
|
||||
.setMemberCachePolicy(MemberCachePolicy.ALL)
|
||||
.enableIntents(GatewayIntent.GUILD_MEMBERS)
|
||||
.build();
|
||||
FLog.info("Discord verification bot has successfully enabled!");
|
||||
}
|
||||
@ -143,19 +149,39 @@ public class Discord extends FreedomService
|
||||
}
|
||||
}
|
||||
|
||||
public void sendAMPInfo(PlayerData playerData, String username, String password)
|
||||
public void sendPteroInfo(PlayerData playerData, String username, String password)
|
||||
{
|
||||
User user = bot.getUserById(playerData.getDiscordID());
|
||||
String message = "The following is your AMP details:\n\nUsername: " + username + "\nPassword: " + password + "\n\nYou can connect to AMP at " + plugin.amp.URL;
|
||||
User user = getUser(playerData.getDiscordID());
|
||||
String message = "The following are your Pterodactyl details:\n\nUsername: " + username + "\nPassword: " + password + "\n\nYou can connect to the panel at " + plugin.ptero.URL;
|
||||
PrivateChannel privateChannel = user.openPrivateChannel().complete();
|
||||
privateChannel.sendMessage(message).complete();
|
||||
}
|
||||
|
||||
public User getUser(String id)
|
||||
{
|
||||
Guild guild = bot.getGuildById(ConfigEntry.DISCORD_SERVER_ID.getString());
|
||||
|
||||
if (guild == null)
|
||||
{
|
||||
FLog.severe("Either the bot is not in the discord server or it doesn't exist. Check the server ID.");
|
||||
return null;
|
||||
}
|
||||
|
||||
Member member = guild.getMemberById(id);
|
||||
|
||||
if (member == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return member.getUser();
|
||||
}
|
||||
|
||||
public boolean sendBackupCodes(PlayerData playerData)
|
||||
{
|
||||
List<String> codes = generateBackupCodes();
|
||||
List<String> encryptedCodes = generateEncryptedBackupCodes(codes);
|
||||
User user = bot.getUserById(playerData.getDiscordID());
|
||||
User user = getUser(playerData.getDiscordID());
|
||||
File file = generateBackupCodesFile(playerData.getName(), codes);
|
||||
if (file == null)
|
||||
{
|
||||
|
@ -60,11 +60,6 @@ public class DiscordToMinecraftListener extends ListenerAdapter
|
||||
{
|
||||
return Title.EXECUTIVE.getColoredTag();
|
||||
}
|
||||
// Assistant Executives
|
||||
else if (member.getRoles().contains(server.getRoleById(ConfigEntry.DISCORD_ASSISTANT_EXECUTIVE_ROLE_ID.getString())))
|
||||
{
|
||||
return Title.ASSISTANT_EXECUTIVE.getColoredTag();
|
||||
}
|
||||
// Admins
|
||||
else if (member.getRoles().contains(server.getRoleById(ConfigEntry.DISCORD_ADMIN_ROLE_ID.getString())))
|
||||
{
|
||||
|
@ -33,7 +33,6 @@ public class Module_list extends HTTPDModule
|
||||
final JSONArray mods = new JSONArray();
|
||||
final JSONArray admins = new JSONArray();
|
||||
final JSONArray developers = new JSONArray();
|
||||
final JSONArray assistant_executives = new JSONArray();
|
||||
final JSONArray executives = new JSONArray();
|
||||
final JSONArray owners = new JSONArray();
|
||||
|
||||
@ -60,11 +59,6 @@ public class Module_list extends HTTPDModule
|
||||
developers.add(player.getName());
|
||||
}
|
||||
|
||||
if (ConfigEntry.SERVER_ASSISTANT_EXECUTIVES.getList().contains(player.getName()) && !FUtil.DEVELOPERS.contains(player.getName()))
|
||||
{
|
||||
assistant_executives.add(player.getName());
|
||||
}
|
||||
|
||||
if (ConfigEntry.SERVER_EXECUTIVES.getList().contains(player.getName()) && !FUtil.DEVELOPERS.contains(player.getName()))
|
||||
{
|
||||
executives.add(player.getName());
|
||||
@ -105,7 +99,6 @@ public class Module_list extends HTTPDModule
|
||||
responseObject.put("mods", mods);
|
||||
responseObject.put("admins", admins);
|
||||
responseObject.put("developers", developers);
|
||||
responseObject.put("assistant_executives", assistant_executives);
|
||||
responseObject.put("executives", executives);
|
||||
responseObject.put("owners", owners);
|
||||
responseObject.put("online", server.getOnlinePlayers().size());
|
||||
@ -154,7 +147,7 @@ public class Module_list extends HTTPDModule
|
||||
|
||||
public boolean hasSpecialTitle(Player player)
|
||||
{
|
||||
if (FUtil.DEVELOPERS.contains(player.getName()) || ConfigEntry.SERVER_EXECUTIVES.getList().contains(player.getName()) || ConfigEntry.SERVER_ASSISTANT_EXECUTIVES.getList().contains(player.getName()) || ConfigEntry.SERVER_OWNERS.getList().contains(player.getName()))
|
||||
if (FUtil.DEVELOPERS.contains(player.getName()) || ConfigEntry.SERVER_EXECUTIVES.getList().contains(player.getName()) || ConfigEntry.SERVER_OWNERS.getList().contains(player.getName()))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
@ -63,11 +63,6 @@ public class RankManager extends FreedomService
|
||||
return Title.EXECUTIVE;
|
||||
}
|
||||
|
||||
if (ConfigEntry.SERVER_ASSISTANT_EXECUTIVES.getList().contains(player.getName()) && plugin.sl.isStaff(player))
|
||||
{
|
||||
return Title.ASSISTANT_EXECUTIVE;
|
||||
}
|
||||
|
||||
if (plugin.sl.isVerifiedStaff(player))
|
||||
{
|
||||
return Title.VERIFIED_STAFF;
|
||||
@ -79,12 +74,6 @@ public class RankManager extends FreedomService
|
||||
return Title.MASTER_BUILDER;
|
||||
}
|
||||
|
||||
PlayerData playerData = plugin.pl.getData(player);
|
||||
if (!plugin.sl.isStaff(player) && playerData.isDonator())
|
||||
{
|
||||
return Title.DONATOR;
|
||||
}
|
||||
|
||||
return getRank(player);
|
||||
}
|
||||
|
||||
|
@ -6,10 +6,8 @@ import net.md_5.bungee.api.ChatColor;
|
||||
public enum Title implements Displayable
|
||||
{
|
||||
|
||||
DONATOR("a", "Premium Member", ChatColor.of("#ff5600"), org.bukkit.ChatColor.LIGHT_PURPLE, "Premium", true),
|
||||
MASTER_BUILDER("a", "Master Builder", ChatColor.DARK_AQUA, org.bukkit.ChatColor.DARK_AQUA, "MB", true),
|
||||
VERIFIED_STAFF("a", "Verified Staff", ChatColor.LIGHT_PURPLE, org.bukkit.ChatColor.LIGHT_PURPLE, "VS", false),
|
||||
ASSISTANT_EXECUTIVE("an", "Assistant Executive", ChatColor.RED, org.bukkit.ChatColor.RED, "Asst Exec", true),
|
||||
EXECUTIVE("an", "Executive", ChatColor.RED, org.bukkit.ChatColor.RED, "Exec", true),
|
||||
DEVELOPER("a", "Developer", ChatColor.DARK_PURPLE, org.bukkit.ChatColor.DARK_PURPLE, "Dev", true),
|
||||
OWNER("the", "Owner", ChatColor.of("#ff0000"), org.bukkit.ChatColor.DARK_RED, "Owner", true);
|
||||
|
@ -82,7 +82,7 @@ public class SQLite extends FreedomService
|
||||
{
|
||||
try
|
||||
{
|
||||
connection.createStatement().execute("CREATE TABLE `staff` (`username` VARCHAR NOT NULL, `ips` VARCHAR NOT NULL, `rank` VARCHAR NOT NULL, `active` BOOLEAN NOT NULL, `last_login` LONG NOT NULL, `login_message` VARCHAR, `command_spy` BOOLEAN NOT NULL, `potion_spy` BOOLEAN NOT NULL, `ac_format` VARCHAR, `amp_username` VARCHAR);");
|
||||
connection.createStatement().execute("CREATE TABLE `staff` (`username` VARCHAR NOT NULL, `ips` VARCHAR NOT NULL, `rank` VARCHAR NOT NULL, `active` BOOLEAN NOT NULL, `last_login` LONG NOT NULL, `login_message` VARCHAR, `command_spy` BOOLEAN NOT NULL, `potion_spy` BOOLEAN NOT NULL, `ac_format` VARCHAR, `ptero_id` VARCHAR);");
|
||||
}
|
||||
catch (SQLException e)
|
||||
{
|
||||
@ -256,7 +256,7 @@ public class SQLite extends FreedomService
|
||||
statement.setBoolean(7, staffMember.getCommandSpy());
|
||||
statement.setBoolean(8, staffMember.getPotionSpy());
|
||||
statement.setString(9, staffMember.getAcFormat());
|
||||
statement.setString(10, staffMember.getAmpUsername());
|
||||
statement.setString(10, staffMember.getPteroID());
|
||||
statement.executeUpdate();
|
||||
}
|
||||
catch (SQLException e)
|
||||
|
@ -47,7 +47,7 @@ public class StaffMember
|
||||
private String acFormat = null;
|
||||
@Getter
|
||||
@Setter
|
||||
private String ampUsername = null;
|
||||
private String pteroID = null;
|
||||
|
||||
public StaffMember(Player player)
|
||||
{
|
||||
@ -69,7 +69,7 @@ public class StaffMember
|
||||
this.commandSpy = resultSet.getBoolean("command_spy");
|
||||
this.potionSpy = resultSet.getBoolean("potion_spy");
|
||||
this.acFormat = resultSet.getString("ac_format");
|
||||
this.ampUsername = resultSet.getString("amp_username");
|
||||
this.pteroID = resultSet.getString("ptero_id");
|
||||
}
|
||||
catch (SQLException e)
|
||||
{
|
||||
@ -90,7 +90,7 @@ public class StaffMember
|
||||
.append("- Is Active: ").append(active).append("\n")
|
||||
.append("- Potion Spy: ").append(potionSpy).append("\n")
|
||||
.append("- Admin Chat Format: ").append(acFormat).append("\n")
|
||||
.append("- AMP Username: ").append(ampUsername).append("\n");
|
||||
.append("- Pterodactyl ID: ").append(pteroID).append("\n");
|
||||
|
||||
return output.toString();
|
||||
}
|
||||
@ -108,7 +108,7 @@ public class StaffMember
|
||||
put("command_spy", commandSpy);
|
||||
put("potion_spy", potionSpy);
|
||||
put("ac_format", acFormat);
|
||||
put("amp_username", ampUsername);
|
||||
put("ptero_id", pteroID);
|
||||
}};
|
||||
return map;
|
||||
}
|
||||
|
@ -132,7 +132,7 @@ public class FUtil
|
||||
|
||||
public static boolean isExecutive(String name)
|
||||
{
|
||||
return ConfigEntry.SERVER_OWNERS.getStringList().contains(name) || ConfigEntry.SERVER_EXECUTIVES.getStringList().contains(name) || ConfigEntry.SERVER_ASSISTANT_EXECUTIVES.getStringList().contains(name);
|
||||
return ConfigEntry.SERVER_OWNERS.getStringList().contains(name) || ConfigEntry.SERVER_EXECUTIVES.getStringList().contains(name);
|
||||
}
|
||||
|
||||
public static boolean isDeveloper(Player player)
|
||||
@ -237,10 +237,10 @@ public class FUtil
|
||||
List<String> headers = new ArrayList<>();
|
||||
headers.add("Accept:application/json");
|
||||
headers.add("Content-Type:application/json");
|
||||
String response = sendRequest("https://api.mojang.com/profiles/minecraft", "POST", headers, json.toString());
|
||||
Response response = sendRequest("https://api.mojang.com/profiles/minecraft", "POST", headers, json.toString());
|
||||
// Don't care how stupid this looks, couldn't find anything to parse a json string to something readable in java with something not horrendously huge, maybe im just retarded
|
||||
Pattern pattern = Pattern.compile("(?<=\"id\":\")[a-f0-9].{31}");
|
||||
Matcher matcher = pattern.matcher(response);
|
||||
Matcher matcher = pattern.matcher(response.getMessage());
|
||||
if (matcher.find())
|
||||
{
|
||||
String rawUUID = matcher.group(0).replaceFirst("([a-f0-9]{8})([a-f0-9]{4})([a-f0-9]{4})([a-f0-9]{4})([a-f0-9]+)", "$1-$2-$3-$4-$5");
|
||||
@ -254,21 +254,34 @@ public class FUtil
|
||||
return null;
|
||||
}
|
||||
|
||||
public static String sendRequest(String endpoint, String method, List<String>headers, String body) throws IOException
|
||||
public static Response sendRequest(String endpoint, String method, List<String>headers, String body) throws IOException
|
||||
{
|
||||
URL url = new URL(endpoint);
|
||||
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
|
||||
|
||||
connection.setRequestMethod(method);
|
||||
for (String header : headers)
|
||||
|
||||
if (headers != null)
|
||||
{
|
||||
String[] kv = header.split(":");
|
||||
connection.setRequestProperty(kv[0], kv[1]);
|
||||
|
||||
for (String header : headers)
|
||||
{
|
||||
String[] kv = header.split(":");
|
||||
connection.setRequestProperty(kv[0], kv[1]);
|
||||
}
|
||||
}
|
||||
connection.setDoOutput(true);
|
||||
DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream());
|
||||
outputStream.writeBytes(body);
|
||||
outputStream.flush();
|
||||
outputStream.close();
|
||||
|
||||
FLog.info(connection.getRequestMethod());
|
||||
|
||||
if (body != null)
|
||||
{
|
||||
connection.setDoOutput(true);
|
||||
DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream());
|
||||
outputStream.writeBytes(body);
|
||||
outputStream.flush();
|
||||
outputStream.close();
|
||||
}
|
||||
|
||||
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
|
||||
String inputLine;
|
||||
StringBuffer response = new StringBuffer();
|
||||
@ -279,7 +292,8 @@ public class FUtil
|
||||
}
|
||||
|
||||
in.close();
|
||||
return response.toString();
|
||||
|
||||
return new Response(connection.getResponseCode(), response.toString());
|
||||
}
|
||||
|
||||
public static void bcastMsg(String message, ChatColor color)
|
||||
@ -854,10 +868,4 @@ public class FUtil
|
||||
}
|
||||
}.runTaskLater(TotalFreedomMod.getPlugin(), delay);
|
||||
}
|
||||
|
||||
private static class MojangResponse
|
||||
{
|
||||
String id;
|
||||
String name;
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,25 @@
|
||||
package me.totalfreedom.totalfreedommod.util;
|
||||
|
||||
import lombok.Getter;
|
||||
import org.json.simple.JSONObject;
|
||||
import org.json.simple.parser.JSONParser;
|
||||
import org.json.simple.parser.ParseException;
|
||||
|
||||
public class Response
|
||||
{
|
||||
@Getter
|
||||
private int code;
|
||||
@Getter
|
||||
private String message;
|
||||
|
||||
public Response(int code, String message)
|
||||
{
|
||||
this.code = code;
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
public JSONObject getJSONMessage() throws ParseException
|
||||
{
|
||||
return (JSONObject) new JSONParser().parse(message);
|
||||
}
|
||||
}
|
@ -36,9 +36,6 @@ server:
|
||||
# All players who show up as executive
|
||||
executives: []
|
||||
|
||||
# All players who show up as assistant executive
|
||||
assistant_executives: []
|
||||
|
||||
# All those who can manage the master builder list
|
||||
master_builder_management: []
|
||||
|
||||
@ -76,8 +73,6 @@ discord:
|
||||
admin_role_id: ''
|
||||
# Developer role ID
|
||||
developer_role_id: ''
|
||||
# Assistant Executive Admin role ID
|
||||
assistant_executive_role_id: ''
|
||||
# Executive Admin role ID
|
||||
executive_role_id: ''
|
||||
# Owner role ID
|
||||
@ -95,8 +90,6 @@ reddit:
|
||||
client_id: ''
|
||||
# Developer app secret
|
||||
client_secret: ''
|
||||
# Donator flair ID
|
||||
donator_flair_id: ''
|
||||
# Master Builder flair ID
|
||||
master_builder_flair_id: ''
|
||||
# Trial Mod flair ID
|
||||
@ -107,21 +100,23 @@ reddit:
|
||||
admin_flair_id: ''
|
||||
# Developer flair ID
|
||||
developer_flair_id: ''
|
||||
# Assistant Executive Admin flair ID
|
||||
assistant_executive_flair_id: ''
|
||||
# Executive Admin flair ID
|
||||
executive_flair_id: ''
|
||||
# Owner flair ID
|
||||
server_owner_flair_id: ''
|
||||
|
||||
# AMP
|
||||
amp:
|
||||
# Pterodactyl
|
||||
ptero:
|
||||
# URL - do not leave a trailing forward slash
|
||||
url: ''
|
||||
# Username
|
||||
username: ''
|
||||
# Password
|
||||
password: ''
|
||||
# The default email domain used to set email addresses for new users - do not include the @
|
||||
default_email_domain: 'example.com'
|
||||
# Server UUID
|
||||
server_uuid: ''
|
||||
# Admin panel API key
|
||||
admin_key: ''
|
||||
# Server API key
|
||||
server_key: ''
|
||||
|
||||
# The shop
|
||||
shop:
|
||||
|
Loading…
Reference in New Issue
Block a user