Added Webtoken module
This commit is contained in:
parent
8fe86c8901
commit
ed08a31a90
@ -18,6 +18,7 @@ import com.redstoner.modules.motd.Motd;
|
||||
import com.redstoner.modules.scriptutils.Scriptutils;
|
||||
import com.redstoner.modules.skullclick.SkullClick;
|
||||
import com.redstoner.modules.warn.Warn;
|
||||
import com.redstoner.modules.webtoken.WebToken;
|
||||
|
||||
/** Main class. Duh.
|
||||
*
|
||||
@ -66,7 +67,7 @@ public class Main extends JavaPlugin
|
||||
// TODO: ModuleLoader.addModule(Tag.class);
|
||||
// TODO: ModuleLoader.addModule(Vanish.class);
|
||||
ModuleLoader.addModule(Warn.class);
|
||||
// TODO: ModuleLoader.addModule(Webtoken.class);
|
||||
ModuleLoader.addModule(WebToken.class);
|
||||
// And enable them
|
||||
ModuleLoader.enableModules();
|
||||
}
|
||||
|
223
src/com/redstoner/modules/webtoken/WebToken.java
Normal file
223
src/com/redstoner/modules/webtoken/WebToken.java
Normal file
@ -0,0 +1,223 @@
|
||||
package com.redstoner.modules.webtoken;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Random;
|
||||
import java.util.UUID;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.json.simple.parser.ParseException;
|
||||
|
||||
import com.nemez.cmdmgr.Command;
|
||||
import com.redstoner.annotations.Version;
|
||||
import com.redstoner.misc.Utils;
|
||||
import com.redstoner.misc.mysql.Config;
|
||||
import com.redstoner.misc.mysql.MysqlHandler;
|
||||
import com.redstoner.misc.mysql.elements.ConstraintOperator;
|
||||
import com.redstoner.misc.mysql.elements.MysqlConstraint;
|
||||
import com.redstoner.misc.mysql.elements.MysqlDatabase;
|
||||
import com.redstoner.misc.mysql.elements.MysqlTable;
|
||||
import com.redstoner.modules.Module;
|
||||
|
||||
@Version(major = 1, minor = 0, revision = 0, compatible = 1)
|
||||
public class WebToken implements Module
|
||||
{
|
||||
private boolean enabled = false;
|
||||
private static final int TOKEN_LENGTH = 6;
|
||||
private static final String CONSONANTS = "bcdfghjklmnpqrstvwxyz";
|
||||
private static final String VOWELS = "aeiou";
|
||||
private MysqlTable table;
|
||||
|
||||
@Override
|
||||
public void onEnable()
|
||||
{
|
||||
Config config;
|
||||
try
|
||||
{
|
||||
config = Config.getConfig("WebToken.json");
|
||||
}
|
||||
catch (IOException | ParseException e1)
|
||||
{
|
||||
e1.printStackTrace();
|
||||
enabled = false;
|
||||
return;
|
||||
}
|
||||
if (config == null || !config.containsKey("database") || !config.containsKey("table"))
|
||||
{
|
||||
Utils.error("Could not load the WebToken config file, disabling!");
|
||||
config.put("database", "redstoner");
|
||||
config.put("table", "webtoken");
|
||||
enabled = false;
|
||||
return;
|
||||
}
|
||||
try
|
||||
{
|
||||
MysqlDatabase database = MysqlHandler.INSTANCE.getDatabase(config.get("database"));
|
||||
table = database.getTable(config.get("table"));
|
||||
}
|
||||
catch (NullPointerException e)
|
||||
{
|
||||
Utils.error("Could not use the WebToken config, disabling!");
|
||||
enabled = false;
|
||||
return;
|
||||
}
|
||||
enabled = true;
|
||||
}
|
||||
|
||||
private String query(String emailOrToken, UUID uuid) throws Exception
|
||||
{
|
||||
if (!(emailOrToken.equals("token") && emailOrToken.equals("email")))
|
||||
{
|
||||
throw new Exception("Invalid database query: " + emailOrToken);
|
||||
}
|
||||
Object[] results = table.get(emailOrToken,
|
||||
new MysqlConstraint("uuid", ConstraintOperator.EQUAL, uuid.toString().replaceAll("-", "")));
|
||||
if (results instanceof String[])
|
||||
{
|
||||
String[] tokenResults = (String[]) results;
|
||||
if (tokenResults.length == 1)
|
||||
{
|
||||
return tokenResults[0];
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new Exception("Token query returned invalid result!");
|
||||
}
|
||||
}
|
||||
|
||||
private boolean match(String string, String regex)
|
||||
{
|
||||
Pattern pattern = Pattern.compile(regex);
|
||||
Matcher matcher = pattern.matcher(string);
|
||||
return matcher.find();
|
||||
}
|
||||
|
||||
private void printToken(Player player, String email, String token)
|
||||
{
|
||||
Utils.sendModuleHeader(player);
|
||||
Utils.sendMessage(player, "", "§aEmail: " + email);
|
||||
Utils.sendMessage(player, "", "§aToken: " + token);
|
||||
Utils.sendMessage(player, "", "§cIMPORTANT: never share the token with anyone!");
|
||||
Utils.sendMessage(player, "", "§cIt could be used to claim your website account!");
|
||||
}
|
||||
|
||||
private String generateToken()
|
||||
{
|
||||
String token = "";
|
||||
Random random = new Random();
|
||||
int start = random.nextInt(2);
|
||||
for (int i = 0; i < TOKEN_LENGTH; i++)
|
||||
{
|
||||
if (i % 2 == start)
|
||||
{
|
||||
token += CONSONANTS.charAt(random.nextInt(21));
|
||||
}
|
||||
else
|
||||
{
|
||||
token += VOWELS.charAt(random.nextInt(5));
|
||||
}
|
||||
}
|
||||
return token;
|
||||
}
|
||||
|
||||
@Command(hook = "token")
|
||||
public void token(CommandSender sender)
|
||||
{
|
||||
Player player = (Player) sender;
|
||||
UUID uuid = player.getUniqueId();
|
||||
try
|
||||
{
|
||||
String token = query("token", uuid);
|
||||
if (token == null)
|
||||
{
|
||||
Utils.sendErrorMessage(player, null, "§cYou don't have a token yet! Use " + ChatColor.YELLOW
|
||||
+ "/gettoken <email>" + ChatColor.RED + " to get one.");
|
||||
}
|
||||
else
|
||||
{
|
||||
String email = query("email", uuid);
|
||||
printToken(player, email, token);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Utils.sendErrorMessage(player, null, "Error getting your token, please contact an admin!");
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@Command(hook = "gettoken")
|
||||
public void token(CommandSender sender, String email)
|
||||
{
|
||||
Player player = (Player) sender;
|
||||
if (match(email, "^.+@(.+\\..{2,}|\\[[0-9a-fA-F:.]+\\])$"))
|
||||
{
|
||||
String uuid = player.getUniqueId().toString().replaceAll("-", "");
|
||||
String token = generateToken();
|
||||
try
|
||||
{
|
||||
table.delete(new MysqlConstraint("uuid", ConstraintOperator.EQUAL, uuid));
|
||||
table.insert(uuid, token, email);
|
||||
player.sendMessage(ChatColor.GREEN + "Token generated!");
|
||||
printToken(player, email, token);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Utils.sendErrorMessage(player, null, "Error getting your token, please contact an admin!");
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Utils.sendErrorMessage(player, null, "Hmm... That doesn't look like a valid email!");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisable()
|
||||
{
|
||||
enabled = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean enabled()
|
||||
{
|
||||
return enabled;
|
||||
}
|
||||
|
||||
// @noformat
|
||||
@Override
|
||||
public String getCommandString()
|
||||
{
|
||||
return "command token {\n" +
|
||||
" perm utils.webtoken;\n" +
|
||||
" \n" +
|
||||
" [empty] {\n" +
|
||||
" help Displays an already generated token;\n" +
|
||||
" type player;\n" +
|
||||
" perm utils.webtoken;\n" +
|
||||
" run token;\n" +
|
||||
" }\n" +
|
||||
"}\n" +
|
||||
"\n" +
|
||||
"command gettoken {\n" +
|
||||
" perm utils.webtoken;\n" +
|
||||
" \n" +
|
||||
" [string:email...] {\n" +
|
||||
" help Generates a token used for website authentication;\n" +
|
||||
" type player;\n" +
|
||||
" perm utils.webtoken;\n" +
|
||||
" run gettoken;\n" +
|
||||
" }\n" +
|
||||
"}";
|
||||
}
|
||||
// @format
|
||||
}
|
Reference in New Issue
Block a user