aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/net/elytrium/limboauth/command/PremiumCommand.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/net/elytrium/limboauth/command/PremiumCommand.java')
-rw-r--r--src/main/java/net/elytrium/limboauth/command/PremiumCommand.java108
1 files changed, 108 insertions, 0 deletions
diff --git a/src/main/java/net/elytrium/limboauth/command/PremiumCommand.java b/src/main/java/net/elytrium/limboauth/command/PremiumCommand.java
new file mode 100644
index 0000000..7b209c5
--- /dev/null
+++ b/src/main/java/net/elytrium/limboauth/command/PremiumCommand.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2021 Elytrium
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package net.elytrium.limboauth.command;
+
+import com.j256.ormlite.dao.Dao;
+import com.velocitypowered.api.command.CommandSource;
+import com.velocitypowered.api.command.SimpleCommand;
+import com.velocitypowered.api.permission.Tristate;
+import com.velocitypowered.api.proxy.Player;
+import java.sql.SQLException;
+import net.elytrium.limboauth.LimboAuth;
+import net.elytrium.limboauth.Settings;
+import net.elytrium.limboauth.handler.AuthSessionHandler;
+import net.elytrium.limboauth.model.RegisteredPlayer;
+import net.kyori.adventure.text.Component;
+import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
+
+public class PremiumCommand implements SimpleCommand {
+
+ private final LimboAuth plugin;
+ private final Dao<RegisteredPlayer, String> playerDao;
+
+ private final Component notPlayer;
+ private final Component notPremium;
+ private final Component alreadyPremium;
+ private final Component notRegistered;
+ private final Component successful;
+ private final Component errorOccurred;
+ private final Component wrongPassword;
+ private final Component usage;
+
+ public PremiumCommand(LimboAuth plugin, Dao<RegisteredPlayer, String> playerDao) {
+ this.plugin = plugin;
+ this.playerDao = playerDao;
+
+ this.notPlayer = LegacyComponentSerializer.legacyAmpersand().deserialize(Settings.IMP.MAIN.STRINGS.NOT_PLAYER);
+ this.notPremium = LegacyComponentSerializer.legacyAmpersand().deserialize(Settings.IMP.MAIN.STRINGS.NOT_PREMIUM);
+ this.alreadyPremium = LegacyComponentSerializer.legacyAmpersand().deserialize(Settings.IMP.MAIN.STRINGS.ALREADY_PREMIUM);
+ this.notRegistered = LegacyComponentSerializer.legacyAmpersand().deserialize(Settings.IMP.MAIN.STRINGS.NOT_REGISTERED);
+ this.successful = LegacyComponentSerializer.legacyAmpersand().deserialize(Settings.IMP.MAIN.STRINGS.PREMIUM_SUCCESSFUL);
+ this.errorOccurred = LegacyComponentSerializer.legacyAmpersand().deserialize(Settings.IMP.MAIN.STRINGS.ERROR_OCCURRED);
+ this.wrongPassword = LegacyComponentSerializer.legacyAmpersand().deserialize(Settings.IMP.MAIN.STRINGS.WRONG_PASSWORD);
+ this.usage = LegacyComponentSerializer.legacyAmpersand().deserialize(Settings.IMP.MAIN.STRINGS.PREMIUM_USAGE);
+ }
+
+ @Override
+ public void execute(SimpleCommand.Invocation invocation) {
+ CommandSource source = invocation.source();
+ String[] args = invocation.arguments();
+
+ if (!(source instanceof Player)) {
+ source.sendMessage(this.notPlayer);
+ return;
+ }
+
+ if (args.length == 2) {
+ if (args[1].equalsIgnoreCase("confirm")) {
+ String username = ((Player) source).getUsername();
+ RegisteredPlayer player = AuthSessionHandler.fetchInfo(this.playerDao, username);
+ if (player == null) {
+ source.sendMessage(this.notRegistered);
+ } else if (player.getHash().isEmpty()) {
+ source.sendMessage(this.alreadyPremium);
+ } else if (AuthSessionHandler.checkPassword(args[0], player, this.playerDao)) {
+ if (this.plugin.isPremiumExternal(username)) {
+ try {
+ player.setHash("");
+ this.playerDao.update(player);
+ this.plugin.removePlayerFromCache(username);
+ ((Player) source).disconnect(this.successful);
+ } catch (SQLException e) {
+ source.sendMessage(this.errorOccurred);
+ e.printStackTrace();
+ }
+ } else {
+ source.sendMessage(this.notPremium);
+ }
+ } else {
+ source.sendMessage(this.wrongPassword);
+ }
+
+ return;
+ }
+ }
+
+ source.sendMessage(this.usage);
+ }
+
+ @Override
+ public boolean hasPermission(SimpleCommand.Invocation invocation) {
+ return invocation.source().getPermissionValue("limboauth.commands.unregister") != Tristate.FALSE;
+ }
+}