diff options
Diffstat (limited to 'src/main/java/net')
3 files changed, 110 insertions, 0 deletions
diff --git a/src/main/java/net/elytrium/limboauth/LimboAuth.java b/src/main/java/net/elytrium/limboauth/LimboAuth.java index 76b89f8..8b85a28 100644 --- a/src/main/java/net/elytrium/limboauth/LimboAuth.java +++ b/src/main/java/net/elytrium/limboauth/LimboAuth.java @@ -91,6 +91,7 @@ import net.elytrium.limboapi.api.file.WorldFile; import net.elytrium.limboauth.command.ChangePasswordCommand; import net.elytrium.limboauth.command.DestroySessionCommand; import net.elytrium.limboauth.command.ForceChangePasswordCommand; +import net.elytrium.limboauth.command.ForceRegisterCommand; import net.elytrium.limboauth.command.ForceUnregisterCommand; import net.elytrium.limboauth.command.LimboAuthCommand; import net.elytrium.limboauth.command.PremiumCommand; @@ -320,6 +321,7 @@ public class LimboAuth { CommandManager manager = this.server.getCommandManager(); manager.unregister("unregister"); + manager.unregister("forceregister"); manager.unregister("premium"); manager.unregister("forceunregister"); manager.unregister("changepassword"); @@ -329,6 +331,7 @@ public class LimboAuth { manager.unregister("limboauth"); manager.register("unregister", new UnregisterCommand(this, this.playerDao), "unreg"); + manager.register("forceregister", new ForceRegisterCommand(this, this.playerDao), "forcereg"); manager.register("premium", new PremiumCommand(this, this.playerDao), "license"); manager.register("forceunregister", new ForceUnregisterCommand(this, this.server, this.playerDao), "forceunreg"); manager.register("changepassword", new ChangePasswordCommand(this, this.playerDao), "changepass", "cp"); @@ -905,6 +908,10 @@ public class LimboAuth { return this.authServer; } + public Pattern getNicknameValidationPattern() { + return this.nicknameValidationPattern; + } + private static class CachedUser { private final long checkTime; diff --git a/src/main/java/net/elytrium/limboauth/Settings.java b/src/main/java/net/elytrium/limboauth/Settings.java index c2d7973..f6aa89f 100644 --- a/src/main/java/net/elytrium/limboauth/Settings.java +++ b/src/main/java/net/elytrium/limboauth/Settings.java @@ -320,6 +320,8 @@ public class Settings extends YamlConfig { @Comment("Permission: limboauth.admin.forcechangepassword") public CommandPermissionState FORCE_CHANGE_PASSWORD = CommandPermissionState.PERMISSION; + @Comment("Permission: limboauth.admin.forceregister") + public CommandPermissionState FORCE_REGISTER = CommandPermissionState.PERMISSION; @Comment("Permission: limboauth.admin.forceunregister") public CommandPermissionState FORCE_UNREGISTER = CommandPermissionState.PERMISSION; @Comment("Permission: limboauth.admin.reload") @@ -433,6 +435,12 @@ public class Settings extends YamlConfig { public String FORCE_CHANGE_PASSWORD_NOT_SUCCESSFUL = "{PRFX} &cUnable to change password for &6{0}&c. Most likely this player has never been on this server."; public String FORCE_CHANGE_PASSWORD_USAGE = "{PRFX} Usage: &6/forcechangepassword <nickname> <new password>"; + public String FORCE_REGISTER_USAGE = "{PRFX} Usage: &6/forceregister <nickname> <password>"; + public String FORCE_REGISTER_INCORRECT_NICKNAME = "{PRFX} &cNickname contains forbidden characters."; + public String FORCE_REGISTER_TAKEN_NICKNAME = "{PRFX} &cThis nickname is already taken."; + public String FORCE_REGISTER_SUCCESSFUL = "{PRFX} &aSuccessfully registered player &6{0}&a!"; + public String FORCE_REGISTER_NOT_SUCCESSFUL = "{PRFX} &cUnable to register player &6{0}&c."; + public String TOTP = "{PRFX} Please, enter your 2FA key using &6/2fa <key>"; @Comment(value = "Can be empty.", at = Comment.At.SAME_LINE) public String TOTP_TITLE = "{PRFX}"; diff --git a/src/main/java/net/elytrium/limboauth/command/ForceRegisterCommand.java b/src/main/java/net/elytrium/limboauth/command/ForceRegisterCommand.java new file mode 100644 index 0000000..508dbf9 --- /dev/null +++ b/src/main/java/net/elytrium/limboauth/command/ForceRegisterCommand.java @@ -0,0 +1,95 @@ +/* + * Copyright (C) 2021 - 2023 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 java.sql.SQLException; +import java.text.MessageFormat; +import java.util.Locale; +import net.elytrium.commons.kyori.serialization.Serializer; +import net.elytrium.limboauth.LimboAuth; +import net.elytrium.limboauth.Settings; +import net.elytrium.limboauth.model.RegisteredPlayer; +import net.elytrium.limboauth.model.SQLRuntimeException; +import net.kyori.adventure.text.Component; + +public class ForceRegisterCommand implements SimpleCommand { + + private final LimboAuth plugin; + private final Dao<RegisteredPlayer, String> playerDao; + + private final String successful; + private final String notSuccessful; + private final Component usage; + private final Component takenNickname; + private final Component incorrectNickname; + + public ForceRegisterCommand(LimboAuth plugin, Dao<RegisteredPlayer, String> playerDao) { + this.plugin = plugin; + this.playerDao = playerDao; + + this.successful = Settings.IMP.MAIN.STRINGS.FORCE_REGISTER_SUCCESSFUL; + this.notSuccessful = Settings.IMP.MAIN.STRINGS.FORCE_REGISTER_NOT_SUCCESSFUL; + this.usage = LimboAuth.getSerializer().deserialize(Settings.IMP.MAIN.STRINGS.FORCE_REGISTER_USAGE); + this.takenNickname = LimboAuth.getSerializer().deserialize(Settings.IMP.MAIN.STRINGS.FORCE_REGISTER_TAKEN_NICKNAME); + this.incorrectNickname = LimboAuth.getSerializer().deserialize(Settings.IMP.MAIN.STRINGS.FORCE_REGISTER_INCORRECT_NICKNAME); + } + + @Override + public void execute(SimpleCommand.Invocation invocation) { + CommandSource source = invocation.source(); + String[] args = invocation.arguments(); + + if (args.length == 2) { + String nickname = args[0]; + String password = args[1]; + + Serializer serializer = LimboAuth.getSerializer(); + try { + if (!this.plugin.getNicknameValidationPattern().matcher(nickname).matches()) { + source.sendMessage(this.incorrectNickname); + return; + } + + String lowercaseNickname = nickname.toLowerCase(Locale.ROOT); + if (this.playerDao.idExists(lowercaseNickname)) { + source.sendMessage(this.takenNickname); + return; + } + + RegisteredPlayer player = new RegisteredPlayer(nickname, "", "").setPassword(password); + this.playerDao.create(player); + + source.sendMessage(serializer.deserialize(MessageFormat.format(this.successful, nickname))); + } catch (SQLException e) { + source.sendMessage(serializer.deserialize(MessageFormat.format(this.notSuccessful, nickname))); + throw new SQLRuntimeException(e); + } + } else { + source.sendMessage(this.usage); + } + } + + @Override + public boolean hasPermission(SimpleCommand.Invocation invocation) { + return Settings.IMP.MAIN.COMMAND_PERMISSION_STATE.FORCE_REGISTER + .hasPermission(invocation.source(), "limboauth.admin.forceregister"); + } +} |