Advertisement
Guest User

Untitled

a guest
May 23rd, 2017
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.74 KB | None | 0 0
  1. package io.github.lucaseasedup.logit.command;
  2.  
  3. import io.github.lucaseasedup.logit.CancelledState;
  4. import io.github.lucaseasedup.logit.LogItCore;
  5. import io.github.lucaseasedup.logit.LogItCoreObject;
  6. import io.github.lucaseasedup.logit.account.Account;
  7. import io.github.lucaseasedup.logit.account.Account.SaveCallback;
  8. import io.github.lucaseasedup.logit.account.AccountKeys;
  9. import io.github.lucaseasedup.logit.account.AccountManager;
  10. import io.github.lucaseasedup.logit.common.ReportedException;
  11. import io.github.lucaseasedup.logit.config.LocationSerializable;
  12. import io.github.lucaseasedup.logit.config.PredefinedConfiguration;
  13. import io.github.lucaseasedup.logit.cooldown.CooldownManager;
  14. import io.github.lucaseasedup.logit.cooldown.LogItCooldowns;
  15. import io.github.lucaseasedup.logit.hooks.BukkitSmerfHook;
  16. import io.github.lucaseasedup.logit.message.LogItMessageDispatcher;
  17. import io.github.lucaseasedup.logit.message.MessageHelper;
  18. import io.github.lucaseasedup.logit.security.SecurityHelper;
  19. import io.github.lucaseasedup.logit.session.SessionManager;
  20. import io.github.lucaseasedup.logit.storage.Infix;
  21. import io.github.lucaseasedup.logit.storage.SelectorCondition;
  22. import io.github.lucaseasedup.logit.util.PlayerUtils;
  23. import java.util.Arrays;
  24. import java.util.List;
  25. import org.bukkit.Location;
  26. import org.bukkit.command.Command;
  27. import org.bukkit.command.CommandExecutor;
  28. import org.bukkit.command.CommandSender;
  29. import org.bukkit.entity.Player;
  30.  
  31. public final class RegisterCommand
  32. extends LogItCoreObject
  33. implements CommandExecutor
  34. {
  35. public boolean onCommand(final CommandSender sender, Command cmd, String label, String[] args)
  36. {
  37. Player player;
  38. if ((sender instanceof Player)) {
  39. player = (Player)sender;
  40. } else {
  41. player = null;
  42. }
  43. int minPasswordLength = getConfig("config.yml").getInt("passwords.minLength");
  44. int maxPasswordLength = getConfig("config.yml").getInt("passwords.maxLength");
  45. boolean disablePasswords = getConfig("secret.yml").getBoolean("passwords.disable");
  46. if ((args.length > 0) && (args[0].equals("-x")) && (((args.length <= 2) && (disablePasswords)) || ((args.length <= 3) && (!disablePasswords))))
  47. {
  48. if ((player != null) && (((getCore().isPlayerForcedToLogIn(player)) && (!getSessionManager().isSessionAlive(player))) || (!player.hasPermission("logit.register.others"))))
  49. {
  50. MessageHelper.sendMsg(sender, MessageHelper.t("noPerms"));
  51.  
  52. return true;
  53. }
  54. if (args.length < 2)
  55. {
  56. MessageHelper.sendMsg(sender, MessageHelper.t("paramMissing").replace("{0}", "player"));
  57.  
  58. return true;
  59. }
  60. if ((!disablePasswords) && (args.length < 3))
  61. {
  62. MessageHelper.sendMsg(sender, MessageHelper.t("paramMissing").replace("{0}", "password"));
  63.  
  64. return true;
  65. }
  66. if (getAccountManager().isRegistered(args[1]))
  67. {
  68. MessageHelper.sendMsg(sender, MessageHelper.t("alreadyRegistered.others").replace("{0}", args[1]));
  69.  
  70. return true;
  71. }
  72. if ((!disablePasswords) && (args[2].length() < minPasswordLength))
  73. {
  74. MessageHelper.sendMsg(sender, MessageHelper.t("passwordTooShort").replace("{0}", String.valueOf(minPasswordLength)));
  75.  
  76. return true;
  77. }
  78. if ((!disablePasswords) && (args[2].length() > maxPasswordLength))
  79. {
  80. MessageHelper.sendMsg(sender, MessageHelper.t("passwordTooLong").replace("{0}", String.valueOf(maxPasswordLength)));
  81.  
  82. return true;
  83. }
  84. String password = "";
  85. if (!disablePasswords) {
  86. password = args[2];
  87. }
  88. try
  89. {
  90. ReportedException.incrementRequestCount();
  91.  
  92. Account account = new Account(args[1]);
  93. account.changePassword(password);
  94. if (PlayerUtils.isPlayerOnline(args[1]))
  95. {
  96. Player paramPlayer = PlayerUtils.getPlayer(args[1]);
  97. String paramPlayerIp = PlayerUtils.getPlayerIp(paramPlayer);
  98.  
  99. account.setUuid(paramPlayer.getUniqueId());
  100. if (paramPlayerIp != null) {
  101. account.setIp(paramPlayerIp);
  102. }
  103. account.setDisplayName(paramPlayer.getName());
  104. }
  105. account.setLastActiveDate(System.currentTimeMillis() / 1000L);
  106. account.setRegistrationDate(System.currentTimeMillis() / 1000L);
  107. if (!getAccountManager().insertAccount(account).isCancelled())
  108. {
  109. MessageHelper.sendMsg(sender, MessageHelper.t("createAccount.success.others").replace("{0}", PlayerUtils.getPlayerRealName(args[1])));
  110. if (PlayerUtils.isPlayerOnline(args[1]))
  111. {
  112. Player paramPlayer = PlayerUtils.getPlayer(args[1]);
  113. if (getSessionManager().getSession(paramPlayer) == null) {
  114. getSessionManager().createSession(paramPlayer);
  115. }
  116. if (!getSessionManager().startSession(paramPlayer).isCancelled())
  117. {
  118. MessageHelper.sendMsg(paramPlayer, MessageHelper.t("createAccount.successAndLogin.self"));
  119. player.getInventory().setHelmet(null);
  120. MessageHelper.sendMsg(sender, MessageHelper.t("startSession.success.others").replace("{0}", paramPlayer.getName()));
  121. }
  122. else
  123. {
  124. MessageHelper.sendMsg(paramPlayer, MessageHelper.t("createAccount.success.self"));
  125. player.getInventory().setHelmet(null);
  126. }
  127. boolean newbieTeleportEnabled = getConfig("config.yml").getBoolean("newbieTeleport.enabled");
  128. if (newbieTeleportEnabled)
  129. {
  130. Location newbieTeleportLocation = getConfig("config.yml").getLocation("newbieTeleport.location").toBukkitLocation();
  131.  
  132. paramPlayer.teleport(newbieTeleportLocation);
  133. }
  134. }
  135. }
  136. }
  137. catch (ReportedException ex)
  138. {
  139. MessageHelper.sendMsg(sender, MessageHelper.t("createAccount.fail.others").replace("{0}", args[1]));
  140. }
  141. finally
  142. {
  143. ReportedException.decrementRequestCount();
  144. }
  145. }
  146. else if (((args.length == 0) && (disablePasswords)) || ((args.length <= 2) && (!disablePasswords)))
  147. {
  148. if (player == null)
  149. {
  150. MessageHelper.sendMsg(sender, MessageHelper.t("onlyForPlayers"));
  151.  
  152. return true;
  153. }
  154. if (!player.hasPermission("logit.register.self"))
  155. {
  156. MessageHelper.sendMsg(player, MessageHelper.t("noPerms"));
  157.  
  158. return true;
  159. }
  160. if ((!disablePasswords) && (args.length < 1))
  161. {
  162. MessageHelper.sendMsg(player, MessageHelper.t("paramMissing").replace("{0}", "password"));
  163.  
  164. return true;
  165. }
  166. if ((!disablePasswords) && (args.length < 2))
  167. {
  168. MessageHelper.sendMsg(player, MessageHelper.t("paramMissing").replace("{0}", "confirmpassword"));
  169.  
  170. return true;
  171. }
  172. if (getCooldownManager().isCooldownActive(player, LogItCooldowns.REGISTER))
  173. {
  174. getMessageDispatcher().sendCooldownMessage(player, getCooldownManager().getCooldownMillis(player, LogItCooldowns.REGISTER));
  175.  
  176. return true;
  177. }
  178. boolean takeoverEnabled = getConfig("config.yml").getBoolean("premiumTakeover.enabled");
  179.  
  180. boolean isPremium = BukkitSmerfHook.isPremium(player);
  181. boolean canTakeOver = (takeoverEnabled) && (isPremium);
  182. boolean isRegistered = getAccountManager().isRegistered(player.getName());
  183. boolean isTakingOver = (canTakeOver) && (isRegistered);
  184. if ((isRegistered) && (!canTakeOver))
  185. {
  186. MessageHelper.sendMsg(player, MessageHelper.t("alreadyRegistered.self"));
  187.  
  188. return true;
  189. }
  190. if ((!disablePasswords) && (args[0].length() < minPasswordLength))
  191. {
  192. MessageHelper.sendMsg(player, MessageHelper.t("passwordTooShort").replace("{0}", String.valueOf(minPasswordLength)));
  193.  
  194. return true;
  195. }
  196. if ((!disablePasswords) && (args[0].length() > maxPasswordLength))
  197. {
  198. MessageHelper.sendMsg(player, MessageHelper.t("passwordTooLong").replace("{0}", String.valueOf(maxPasswordLength)));
  199.  
  200. return true;
  201. }
  202. boolean lowercaseLetters = getConfig("config.yml").getBoolean("passwords.complexity.lowercaseLetters");
  203.  
  204. boolean uppercaseLetters = getConfig("config.yml").getBoolean("passwords.complexity.uppercaseLetters");
  205.  
  206. boolean numbers = getConfig("config.yml").getBoolean("passwords.complexity.numbers");
  207.  
  208. boolean specialSymbols = getConfig("config.yml").getBoolean("passwords.complexity.specialSymbols");
  209.  
  210. boolean blockSimplePasswords = getConfig("config.yml").getBoolean("passwords.complexity.blockSimplePasswords");
  211. if ((!disablePasswords) && (lowercaseLetters) && (!getSecurityHelper().containsLowercaseLetters(args[0])))
  212. {
  213. MessageHelper.sendMsg(player, MessageHelper.t("passwordMustContainLowercaseLetters"));
  214.  
  215. return true;
  216. }
  217. if ((!disablePasswords) && (uppercaseLetters) && (!getSecurityHelper().containsUppercaseLetters(args[0])))
  218. {
  219. MessageHelper.sendMsg(player, MessageHelper.t("passwordMustContainUppercaseLetters"));
  220.  
  221. return true;
  222. }
  223. if ((!disablePasswords) && (numbers) && (!getSecurityHelper().containsNumbers(args[0])))
  224. {
  225. MessageHelper.sendMsg(player, MessageHelper.t("passwordMustContainNumbers"));
  226.  
  227. return true;
  228. }
  229. if ((!disablePasswords) && (specialSymbols) && (!getSecurityHelper().containsSpecialSymbols(args[0])))
  230. {
  231. MessageHelper.sendMsg(player, MessageHelper.t("passwordMustContainSpecialSymbols"));
  232.  
  233. return true;
  234. }
  235. if ((!disablePasswords) && (blockSimplePasswords) && (getSecurityHelper().isSimplePassword(args[0])))
  236. {
  237. MessageHelper.sendMsg(player, MessageHelper.t("passwordTooSimple"));
  238.  
  239. return true;
  240. }
  241. if ((!disablePasswords) && (!args[0].equals(args[1])))
  242. {
  243. MessageHelper.sendMsg(player, MessageHelper.t("passwordsDoNotMatch"));
  244.  
  245. return true;
  246. }
  247. int accountsPerIp = getConfig("config.yml").getInt("accountsPerIp.amount");
  248.  
  249. String playerIp = PlayerUtils.getPlayerIp(player);
  250. if ((playerIp != null) && (accountsPerIp >= 0) && (!isTakingOver))
  251. {
  252. int accountsWithIp = getAccountManager().selectAccounts(Arrays.asList(new String[] { keys().username(), keys().ip() }), new SelectorCondition(keys().ip(), Infix.EQUALS, playerIp)).size();
  253.  
  254. List<String> unrestrictedIps = getConfig("config.yml").getStringList("accountsPerIp.unrestrictedIps");
  255. if ((accountsWithIp >= accountsPerIp) && (!unrestrictedIps.contains(playerIp)))
  256. {
  257. MessageHelper.sendMsg(player, MessageHelper.t("accountsPerIpLimitReached"));
  258.  
  259. return true;
  260. }
  261. }
  262. String password = "";
  263. if (!disablePasswords) {
  264. password = args[0];
  265. }
  266. String username = player.getName().toLowerCase();
  267. if (isTakingOver) {
  268. try
  269. {
  270. ReportedException.incrementRequestCount();
  271.  
  272. Account account = getAccountManager().selectAccount(username, Arrays.asList(new String[] { keys().username() }));
  273.  
  274. account.changePassword(password);
  275. account.enqueueSaveCallback(new Account.SaveCallback()
  276. {
  277. public void onSave(boolean success)
  278. {
  279. if (success)
  280. {
  281. MessageHelper.sendMsg(sender, MessageHelper.t("takeover.success"));
  282. if (!RegisterCommand.this.getSessionManager().startSession(player).isCancelled()) {
  283. MessageHelper.sendMsg(sender, MessageHelper.t("startSession.success.self"));
  284. }
  285. }
  286. else
  287. {
  288. MessageHelper.sendMsg(sender, MessageHelper.t("takeover.fail"));
  289. }
  290. }
  291. });
  292. }
  293. catch (ReportedException ex)
  294. {
  295. MessageHelper.sendMsg(sender, MessageHelper.t("takeover.fail"));
  296. }
  297. finally
  298. {
  299. ReportedException.decrementRequestCount();
  300. }
  301. } else {
  302. try
  303. {
  304. ReportedException.incrementRequestCount();
  305.  
  306. Account account = new Account(username);
  307. account.setUuid(player.getUniqueId());
  308. account.changePassword(password);
  309. if (playerIp != null) {
  310. account.setIp(playerIp);
  311. }
  312. account.setLastActiveDate(System.currentTimeMillis() / 1000L);
  313. account.setRegistrationDate(System.currentTimeMillis() / 1000L);
  314. account.setDisplayName(player.getName());
  315. if (!getAccountManager().insertAccount(account).isCancelled())
  316. {
  317. LogItCooldowns.activate(player, LogItCooldowns.REGISTER);
  318. if (!getSessionManager().startSession(player).isCancelled()) {
  319. MessageHelper.sendMsg(sender, MessageHelper.t("createAccount.successAndLogin.self"));
  320. player.getInventory().setHelmet(null);
  321. } else {
  322. MessageHelper.sendMsg(sender, MessageHelper.t("createAccount.success.self"));
  323. player.getInventory().setHelmet(null);
  324. }
  325. boolean newbieTeleportEnabled = getConfig("config.yml").getBoolean("newbieTeleport.enabled");
  326. if (newbieTeleportEnabled)
  327. {
  328. Location newbieTeleportLocation = getConfig("config.yml").getLocation("newbieTeleport.location").toBukkitLocation();
  329.  
  330. player.teleport(newbieTeleportLocation);
  331. }
  332. if (getConfig("config.yml").getBoolean("loginSessions.enabled")) {
  333. MessageHelper.sendMsg(sender, MessageHelper.t("rememberLogin.prompt"));
  334. }
  335. boolean promptToAddEmail = getConfig("config.yml").getBoolean("passwordRecovery.promptToAddEmail");
  336.  
  337. boolean passwordRecoveryEnabled = getConfig("config.yml").getBoolean("passwordRecovery.enabled");
  338. if ((promptToAddEmail) && (passwordRecoveryEnabled)) {
  339. MessageHelper.sendMsg(sender, MessageHelper.t("noEmailSet"));
  340. }
  341. }
  342. }
  343. catch (ReportedException ex)
  344. {
  345. MessageHelper.sendMsg(sender, MessageHelper.t("createAccount.fail.self"));
  346. }
  347. finally
  348. {
  349. ReportedException.decrementRequestCount();
  350. }
  351. }
  352. }
  353. else
  354. {
  355. MessageHelper.sendMsg(sender, MessageHelper.t("incorrectParamCombination"));
  356. }
  357. return true;
  358. }
  359. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement