Search in sources :

Example 1 with AuthPluginReloadEvent

use of net.elytrium.limboauth.event.AuthPluginReloadEvent in project LimboAuth by Elytrium.

the class LimboAuth method reload.

@SuppressWarnings("SwitchStatementWithTooFewBranches")
public void reload() throws Exception {
    Settings.IMP.reload(new File(this.dataDirectory.toFile().getAbsoluteFile(), "config.yml"));
    if (this.floodgateApi == null && !Settings.IMP.MAIN.FLOODGATE_NEED_AUTH) {
        throw new IllegalStateException("If you don't need to auth floodgate players please install floodgate plugin.");
    }
    if (Settings.IMP.MAIN.CHECK_PASSWORD_STRENGTH) {
        this.unsafePasswords.clear();
        Path unsafePasswordsPath = Paths.get(this.dataDirectory.toFile().getAbsolutePath(), Settings.IMP.MAIN.UNSAFE_PASSWORDS_FILE);
        if (!unsafePasswordsPath.toFile().exists()) {
            Files.copy(Objects.requireNonNull(this.getClass().getResourceAsStream("/unsafe_passwords.txt")), unsafePasswordsPath);
        }
        this.unsafePasswords.addAll(Files.lines(unsafePasswordsPath).collect(Collectors.toSet()));
    }
    this.cachedAuthChecks.clear();
    Settings.DATABASE dbConfig = Settings.IMP.DATABASE;
    // requireNonNull prevents the shade plugin from excluding the drivers in minimized jar.
    switch(dbConfig.STORAGE_TYPE.toLowerCase(Locale.ROOT)) {
        case "h2":
            {
                Objects.requireNonNull(org.h2.Driver.class);
                Objects.requireNonNull(org.h2.engine.Engine.class);
                this.connectionSource = new JdbcPooledConnectionSource("jdbc:h2:" + this.dataDirectory.toFile().getAbsoluteFile() + "/limboauth");
                break;
            }
        case "mysql":
            {
                Objects.requireNonNull(com.mysql.cj.jdbc.Driver.class);
                Objects.requireNonNull(com.mysql.cj.conf.url.SingleConnectionUrl.class);
                this.connectionSource = new JdbcPooledConnectionSource("jdbc:mysql://" + dbConfig.HOSTNAME + "/" + dbConfig.DATABASE + dbConfig.CONNECTION_PARAMETERS, dbConfig.USER, dbConfig.PASSWORD);
                break;
            }
        case "postgresql":
            {
                Objects.requireNonNull(org.postgresql.Driver.class);
                this.connectionSource = new JdbcPooledConnectionSource("jdbc:postgresql://" + dbConfig.HOSTNAME + "/" + dbConfig.DATABASE + dbConfig.CONNECTION_PARAMETERS, dbConfig.USER, dbConfig.PASSWORD);
                break;
            }
        default:
            {
                this.getLogger().error("WRONG DATABASE TYPE.");
                this.server.shutdown();
                return;
            }
    }
    TableUtils.createTableIfNotExists(this.connectionSource, RegisteredPlayer.class);
    this.playerDao = DaoManager.createDao(this.connectionSource, RegisteredPlayer.class);
    this.nicknameValidationPattern = Pattern.compile(Settings.IMP.MAIN.ALLOWED_NICKNAME_REGEX);
    this.migrateDb(this.playerDao);
    CommandManager manager = this.server.getCommandManager();
    manager.unregister("unregister");
    manager.unregister("premium");
    manager.unregister("forceunregister");
    manager.unregister("changepassword");
    manager.unregister("forcechangepassword");
    manager.unregister("destroysession");
    manager.unregister("2fa");
    manager.unregister("limboauth");
    manager.register("unregister", new UnregisterCommand(this, this.playerDao), "unreg");
    manager.register("premium", new PremiumCommand(this, this.playerDao));
    manager.register("forceunregister", new ForceUnregisterCommand(this, this.server, this.playerDao), "forceunreg");
    manager.register("changepassword", new ChangePasswordCommand(this.playerDao), "changepass");
    manager.register("forcechangepassword", new ForceChangePasswordCommand(this.server, this.playerDao), "forcechangepass");
    manager.register("destroysession", new DestroySessionCommand(this));
    if (Settings.IMP.MAIN.ENABLE_TOTP) {
        manager.register("2fa", new TotpCommand(this.playerDao), "totp");
    }
    manager.register("limboauth", new LimboAuthCommand(this), "la", "auth", "lauth");
    Settings.MAIN.AUTH_COORDS authCoords = Settings.IMP.MAIN.AUTH_COORDS;
    VirtualWorld authWorld = this.factory.createVirtualWorld(Dimension.valueOf(Settings.IMP.MAIN.DIMENSION), authCoords.X, authCoords.Y, authCoords.Z, (float) authCoords.YAW, (float) authCoords.PITCH);
    if (Settings.IMP.MAIN.LOAD_WORLD) {
        try {
            Path path = this.dataDirectory.resolve(Settings.IMP.MAIN.WORLD_FILE_PATH);
            WorldFile file;
            switch(Settings.IMP.MAIN.WORLD_FILE_TYPE) {
                case "schematic":
                    {
                        file = new SchematicFile(path);
                        break;
                    }
                default:
                    {
                        this.getLogger().error("Incorrect world file type.");
                        this.server.shutdown();
                        return;
                    }
            }
            Settings.MAIN.WORLD_COORDS coords = Settings.IMP.MAIN.WORLD_COORDS;
            file.toWorld(this.factory, authWorld, coords.X, coords.Y, coords.Z);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    this.authServer = this.factory.createLimbo(authWorld).setName("LimboAuth").registerCommand(new AuthCommandMeta(this, this.filterCommands(Settings.IMP.MAIN.REGISTER_COMMAND)), new AuthCommand()).registerCommand(new AuthCommandMeta(this, this.filterCommands(Settings.IMP.MAIN.LOGIN_COMMAND)), new AuthCommand()).registerCommand(new AuthCommandMeta(this, this.filterCommands(Settings.IMP.MAIN.TOTP_COMMAND)), new AuthCommand());
    this.server.getEventManager().unregisterListeners(this);
    this.server.getEventManager().register(this, new AuthListener(this, this.playerDao, this.floodgateApi));
    Executors.newScheduledThreadPool(1, task -> new Thread(task, "purge-cache")).scheduleAtFixedRate(() -> this.checkCache(this.cachedAuthChecks, Settings.IMP.MAIN.PURGE_CACHE_MILLIS), Settings.IMP.MAIN.PURGE_CACHE_MILLIS, Settings.IMP.MAIN.PURGE_CACHE_MILLIS, TimeUnit.MILLISECONDS);
    this.server.getEventManager().fireAndForget(new AuthPluginReloadEvent());
}
Also used : WorldFile(net.elytrium.limboapi.api.file.WorldFile) DestroySessionCommand(net.elytrium.limboauth.command.DestroySessionCommand) SimpleCommand(com.velocitypowered.api.command.SimpleCommand) Inject(com.google.inject.Inject) JdbcPooledConnectionSource(com.j256.ormlite.jdbc.JdbcPooledConnectionSource) PreEvent(net.elytrium.limboauth.event.PreEvent) TaskEvent(net.elytrium.limboauth.event.TaskEvent) SimplePie(org.bstats.charts.SimplePie) Dependency(com.velocitypowered.api.plugin.Dependency) FloodgateApiHolder(net.elytrium.limboauth.floodgate.FloodgateApiHolder) InetAddress(java.net.InetAddress) LimboAuthCommand(net.elytrium.limboauth.command.LimboAuthCommand) UpdatesChecker(net.elytrium.limboauth.utils.UpdatesChecker) FieldType(com.j256.ormlite.field.FieldType) Locale(java.util.Locale) Player(com.velocitypowered.api.proxy.Player) Map(java.util.Map) Limbo(net.elytrium.limboapi.api.Limbo) ProxyInitializeEvent(com.velocitypowered.api.event.proxy.ProxyInitializeEvent) TableUtils(com.j256.ormlite.table.TableUtils) PluginContainer(com.velocitypowered.api.plugin.PluginContainer) DaoManager(com.j256.ormlite.dao.DaoManager) URI(java.net.URI) Path(java.nio.file.Path) HttpResponse(java.net.http.HttpResponse) CommandMeta(com.velocitypowered.api.command.CommandMeta) Plugin(com.velocitypowered.api.plugin.Plugin) AuthListener(net.elytrium.limboauth.listener.AuthListener) Collection(java.util.Collection) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) Set(java.util.Set) UUID(java.util.UUID) Dao(com.j256.ormlite.dao.Dao) PremiumCommand(net.elytrium.limboauth.command.PremiumCommand) SingleLineChart(org.bstats.charts.SingleLineChart) Collectors(java.util.stream.Collectors) StandardCharsets(java.nio.charset.StandardCharsets) Executors(java.util.concurrent.Executors) Objects(java.util.Objects) PreAuthorizationEvent(net.elytrium.limboauth.event.PreAuthorizationEvent) List(java.util.List) LimboFactory(net.elytrium.limboapi.api.LimboFactory) QueryBuilder(com.j256.ormlite.stmt.QueryBuilder) Subscribe(com.velocitypowered.api.event.Subscribe) ForceChangePasswordCommand(net.elytrium.limboauth.command.ForceChangePasswordCommand) RegisteredPlayer(net.elytrium.limboauth.model.RegisteredPlayer) Pattern(java.util.regex.Pattern) AuthSessionHandler(net.elytrium.limboauth.handler.AuthSessionHandler) HttpRequest(java.net.http.HttpRequest) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) SchematicFile(net.elytrium.limboapi.api.file.SchematicFile) AuthPluginReloadEvent(net.elytrium.limboauth.event.AuthPluginReloadEvent) SQLException(java.sql.SQLException) Title(net.kyori.adventure.title.Title) Metrics(org.bstats.velocity.Metrics) ProxyServer(com.velocitypowered.api.proxy.ProxyServer) HttpClient(java.net.http.HttpClient) LegacyComponentSerializer(net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer) Nullable(org.checkerframework.checker.nullness.qual.Nullable) Logger(org.slf4j.Logger) Files(java.nio.file.Files) Dimension(net.elytrium.limboapi.api.chunk.Dimension) VirtualWorld(net.elytrium.limboapi.api.chunk.VirtualWorld) IOException(java.io.IOException) UnregisterCommand(net.elytrium.limboauth.command.UnregisterCommand) File(java.io.File) DataDirectory(com.velocitypowered.api.plugin.annotation.DataDirectory) TimeUnit(java.util.concurrent.TimeUnit) Consumer(java.util.function.Consumer) PreRegisterEvent(net.elytrium.limboauth.event.PreRegisterEvent) URLEncoder(java.net.URLEncoder) CommandManager(com.velocitypowered.api.command.CommandManager) Paths(java.nio.file.Paths) TotpCommand(net.elytrium.limboauth.command.TotpCommand) ChangePasswordCommand(net.elytrium.limboauth.command.ChangePasswordCommand) CommandNode(com.mojang.brigadier.tree.CommandNode) CommandSource(com.velocitypowered.api.command.CommandSource) ForceUnregisterCommand(net.elytrium.limboauth.command.ForceUnregisterCommand) Collections(java.util.Collections) VirtualWorld(net.elytrium.limboapi.api.chunk.VirtualWorld) DestroySessionCommand(net.elytrium.limboauth.command.DestroySessionCommand) UnregisterCommand(net.elytrium.limboauth.command.UnregisterCommand) ForceUnregisterCommand(net.elytrium.limboauth.command.ForceUnregisterCommand) ForceUnregisterCommand(net.elytrium.limboauth.command.ForceUnregisterCommand) SchematicFile(net.elytrium.limboapi.api.file.SchematicFile) AuthListener(net.elytrium.limboauth.listener.AuthListener) CommandManager(com.velocitypowered.api.command.CommandManager) PremiumCommand(net.elytrium.limboauth.command.PremiumCommand) WorldFile(net.elytrium.limboapi.api.file.WorldFile) LimboAuthCommand(net.elytrium.limboauth.command.LimboAuthCommand) Path(java.nio.file.Path) LimboAuthCommand(net.elytrium.limboauth.command.LimboAuthCommand) ForceChangePasswordCommand(net.elytrium.limboauth.command.ForceChangePasswordCommand) ChangePasswordCommand(net.elytrium.limboauth.command.ChangePasswordCommand) IOException(java.io.IOException) RegisteredPlayer(net.elytrium.limboauth.model.RegisteredPlayer) TotpCommand(net.elytrium.limboauth.command.TotpCommand) ForceChangePasswordCommand(net.elytrium.limboauth.command.ForceChangePasswordCommand) JdbcPooledConnectionSource(com.j256.ormlite.jdbc.JdbcPooledConnectionSource) WorldFile(net.elytrium.limboapi.api.file.WorldFile) SchematicFile(net.elytrium.limboapi.api.file.SchematicFile) File(java.io.File) AuthPluginReloadEvent(net.elytrium.limboauth.event.AuthPluginReloadEvent)

Aggregations

Inject (com.google.inject.Inject)1 Dao (com.j256.ormlite.dao.Dao)1 DaoManager (com.j256.ormlite.dao.DaoManager)1 FieldType (com.j256.ormlite.field.FieldType)1 JdbcPooledConnectionSource (com.j256.ormlite.jdbc.JdbcPooledConnectionSource)1 QueryBuilder (com.j256.ormlite.stmt.QueryBuilder)1 TableUtils (com.j256.ormlite.table.TableUtils)1 CommandNode (com.mojang.brigadier.tree.CommandNode)1 CommandManager (com.velocitypowered.api.command.CommandManager)1 CommandMeta (com.velocitypowered.api.command.CommandMeta)1 CommandSource (com.velocitypowered.api.command.CommandSource)1 SimpleCommand (com.velocitypowered.api.command.SimpleCommand)1 Subscribe (com.velocitypowered.api.event.Subscribe)1 ProxyInitializeEvent (com.velocitypowered.api.event.proxy.ProxyInitializeEvent)1 Dependency (com.velocitypowered.api.plugin.Dependency)1 Plugin (com.velocitypowered.api.plugin.Plugin)1 PluginContainer (com.velocitypowered.api.plugin.PluginContainer)1 DataDirectory (com.velocitypowered.api.plugin.annotation.DataDirectory)1 Player (com.velocitypowered.api.proxy.Player)1 ProxyServer (com.velocitypowered.api.proxy.ProxyServer)1