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);
}
}
}