Newer
Older
KeeperJerry_Launcher / LaunchServer / source / auth / handler / SQLiteAuthHandler.java
@KeeperJerry KeeperJerry on 22 Aug 2020 11 KB Пробую SQLite
package launchserver.auth.handler;

import launcher.helper.LogHelper;
import launcher.helper.VerifyHelper;
import launcher.serialize.config.entry.BlockConfigEntry;
import launcher.serialize.config.entry.StringConfigEntry;
import launchserver.auth.MySQLSourceConfig;

import java.io.IOException;
import java.sql.*;
import java.util.UUID;

public final class SQLiteAuthHandler extends CachedAuthHandler
{
    private final Connection sqliteconnection;

    private final String uuidColumn;
    private final String usernameColumn;
    private final String accessTokenColumn;
    private final String serverIDColumn;

    // Prepared SQL queries
    private final String queryByUUIDSQL;
    private final String queryByUsernameSQL;
    private final String updateAuthSQL;
    private final String updateServerIDSQL;

    protected SQLiteAuthHandler(BlockConfigEntry block)
    {
        super(block);
        String table = VerifyHelper.verifyIDName(block.getEntryValue("table", StringConfigEntry.class));

        Connection v_sqliteconnection;
        try
        {
            v_sqliteconnection = DriverManager.getConnection("jdbc:sqlite:" + block.getEntryValue("path", StringConfigEntry.class));
        }
        catch (Exception e)
        {
            LogHelper.error("Error connecting to sqlite: ");
            e.printStackTrace();
            v_sqliteconnection = null;
        }

        this.sqliteconnection = v_sqliteconnection;
        this.uuidColumn = VerifyHelper.verifyIDName(block.getEntryValue("uuidColumn", StringConfigEntry.class));
        this.usernameColumn = VerifyHelper.verifyIDName(block.getEntryValue("usernameColumn", StringConfigEntry.class));
        this.accessTokenColumn = VerifyHelper.verifyIDName(block.getEntryValue("accessTokenColumn", StringConfigEntry.class));
        this.serverIDColumn = VerifyHelper.verifyIDName(block.getEntryValue("serverIDColumn", StringConfigEntry.class));
        this.queryByUUIDSQL = String.format("SELECT %s, %s, %s, %s FROM %s WHERE %s=? LIMIT 1", this.uuidColumn, this.usernameColumn, this.accessTokenColumn, this.serverIDColumn, table, this.uuidColumn);
        this.queryByUsernameSQL = String.format("SELECT %s, %s, %s, %s FROM %s WHERE %s=? LIMIT 1", this.uuidColumn, this.usernameColumn, this.accessTokenColumn, this.serverIDColumn, table, this.usernameColumn);
        this.updateAuthSQL = String.format("UPDATE %s SET %s=?, %s=?, %s=NULL WHERE %s=? LIMIT 1", table, this.usernameColumn, this.accessTokenColumn, this.serverIDColumn, this.uuidColumn);
        this.updateServerIDSQL = String.format("UPDATE %s SET %s=? WHERE %s=? LIMIT 1", table, this.serverIDColumn, this.uuidColumn);
    }

    @Override
    protected Entry fetchEntry(UUID uuid) throws IOException
    {
        return this.query(this.queryByUUIDSQL, uuid.toString());
    }

    @Override
    protected Entry fetchEntry(String s) throws IOException
    {
        return this.query(this.queryByUsernameSQL, s);
    }

    protected boolean updateAuth(UUID uuid, String username, String accessToken) throws IOException
    {
        try
        {
            Connection c = this.sqliteconnection;
            Throwable var5 = null;

            boolean var8;
            try
            {
                PreparedStatement s = c.prepareStatement(this.updateAuthSQL);
                Throwable var7 = null;

                try
                {
                    s.setString(1, username);
                    s.setString(2, accessToken);
                    s.setString(3, uuid.toString());
                    s.setQueryTimeout(5000);
                    var8 = s.executeUpdate() > 0;
                }
                catch (Throwable var33)
                {
                    var7 = var33;
                    throw var33;
                }
                finally
                {
                    if (s != null)
                    {
                        if (var7 != null)
                        {
                            try
                            {
                                s.close();
                            }
                            catch (Throwable var32)
                            {
                                var7.addSuppressed(var32);
                            }
                        }
                        else
                        {
                            s.close();
                        }
                    }
                }
            }
            catch (Throwable var35)
            {
                var5 = var35;
                throw var35;
            }
            finally
            {
                if (c != null)
                {
                    if (var5 != null)
                    {
                        try
                        {
                            c.close();
                        }
                        catch (Throwable var31)
                        {
                            var5.addSuppressed(var31);
                        }
                    }
                    else
                    {
                        c.close();
                    }
                }
            }
            return var8;
        }
        catch (SQLException e)
        {
            throw new IOException(e);
        }
    }

    protected boolean updateServerID(UUID uuid, String serverID) throws IOException
    {
        try
        {
            Connection c = this.sqliteconnection;
            Throwable var4 = null;

            boolean var7;
            try
            {
                PreparedStatement s = c.prepareStatement(this.updateServerIDSQL);
                Throwable var6 = null;

                try
                {
                    s.setString(1, serverID);
                    s.setString(2, uuid.toString());
                    s.setQueryTimeout(MySQLSourceConfig.TIMEOUT);
                    var7 = s.executeUpdate() > 0;
                }
                catch (Throwable var32)
                {
                    var6 = var32;
                    throw var32;
                }
                finally
                {
                    if (s != null)
                    {
                        if (var6 != null)
                        {
                            try
                            {
                                s.close();
                            }
                            catch (Throwable var31)
                            {
                                var6.addSuppressed(var31);
                            }
                        }
                        else
                        {
                            s.close();
                        }
                    }
                }
            }
            catch (Throwable var34)
            {
                var4 = var34;
                throw var34;
            }
            finally
            {
                if (c != null)
                {
                    if (var4 != null)
                    {
                        try
                        {
                            c.close();
                        }
                        catch (Throwable var30)
                        {
                            var4.addSuppressed(var30);
                        }
                    }
                    else
                    {
                        c.close();
                    }
                }
            }
            return var7;
        }
        catch (SQLException e)
        {
            throw new IOException(e);
        }
    }

    public void close()
    {
        try
        {
            this.sqliteconnection.close();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }

    private Entry constructEntry(ResultSet set) throws SQLException
    {
        return set.next() ? new Entry(UUID.fromString(set.getString(this.uuidColumn)), set.getString(this.usernameColumn), set.getString(this.accessTokenColumn), set.getString(this.serverIDColumn)) : null;
    }

    private Entry query(String sql, String value) throws IOException
    {
        try
        {
            Connection c = this.sqliteconnection;
            Throwable var4 = null;

            Entry var9;
            try
            {
                PreparedStatement s = c.prepareStatement(sql);
                Throwable var6 = null;

                try
                {
                    s.setString(1, value);
                    s.setQueryTimeout(MySQLSourceConfig.TIMEOUT);
                    ResultSet set = s.executeQuery();
                    Throwable var8 = null;

                    try
                    {
                        var9 = this.constructEntry(set);
                    }
                    catch (Throwable var56)
                    {
                        var8 = var56;
                        throw var56;
                    }
                    finally
                    {
                        if (set != null)
                        {
                            if (var8 != null)
                            {
                                try
                                {
                                    set.close();
                                }
                                catch (Throwable var55)
                                {
                                    var8.addSuppressed(var55);
                                }
                            }
                            else
                            {
                                set.close();
                            }
                        }
                    }
                }
                catch (Throwable var58)
                {
                    var6 = var58;
                    throw var58;
                }
                finally
                {
                    if (s != null)
                    {
                        if (var6 != null)
                        {
                            try
                            {
                                s.close();
                            }
                            catch (Throwable var54)
                            {
                                var6.addSuppressed(var54);
                            }
                        }
                        else
                        {
                            s.close();
                        }
                    }
                }
            }
            catch (Throwable var60)
            {
                var4 = var60;
                throw var60;
            }
            finally
            {
                if (c != null)
                {
                    if (var4 != null)
                    {
                        try
                        {
                            c.close();
                        }
                        catch (Throwable var53)
                        {
                            var4.addSuppressed(var53);
                        }
                    }
                    else
                    {
                        c.close();
                    }
                }
            }
            return var9;
        }
        catch (SQLException e)
        {
            throw new IOException(e);
        }
    }
}