Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion src/main/java/org/kitteh/sqlbans/SQLBans.java
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,9 @@ public void onEnable() {
final String db = config.getString("database.database");
final String user = config.getString("database.auth.username");
final String pass = config.getString("database.auth.password");
final String tableName = config.getString("database.tablename");
try {
SQLHandler.start(host, port, user, pass, db);
SQLHandler.start(host, port, user, pass, db, tableName);
} catch (final SQLBansException e) {
this.getLogger().log(Level.SEVERE, "Failure to load, shutting down", e);
this.getServer().getPluginManager().disablePlugin(this);
Expand Down
31 changes: 21 additions & 10 deletions src/main/java/org/kitteh/sqlbans/SQLHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,12 @@ public class SQLHandler {

private static SQLHandler instance = null;
private static Object sync = new Object();
private static String tableName;

public static void ban(String user, String reason, String admin) throws SQLBansException {
synchronized (SQLHandler.sync) {
try {
final PreparedStatement statement = SQLHandler.instance().connection.prepareStatement("INSERT INTO `SQLBans_bans` (`username`, `reason`, `admin`) VALUES (?, ?, ?)");
final PreparedStatement statement = SQLHandler.instance().connection.prepareStatement("INSERT INTO `" + tableName + "` (`username`, `reason`, `admin`) VALUES (?, ?, ?)");
statement.setString(1, user);
statement.setString(2, reason);
statement.setString(3, admin);
Expand All @@ -44,15 +45,15 @@ public static void ban(String user, String reason, String admin) throws SQLBansE

public static boolean canJoin(String name) throws SQLBansException, SQLException {
synchronized (SQLHandler.sync) {
final PreparedStatement banQuery = SQLHandler.instance().connection.prepareStatement("SELECT `id` FROM `SQLBans_bans` WHERE `username`=? AND `banned`=1");
final PreparedStatement banQuery = SQLHandler.instance().connection.prepareStatement("SELECT `id` FROM `" + tableName + "` WHERE `username`=? AND `banned`=1");
if (banQuery.executeQuery().first()) {
return false;
}
}
return true;
}

public static void start(String host, int port, String user, String pass, String db) throws SQLBansException {
public static void start(String host, int port, String user, String pass, String db, String table) throws SQLBansException {
synchronized (SQLHandler.sync) {
if (SQLHandler.instance != null) {
throw new SQLBansException("Thread already running! Something has gone terribly wrong!");
Expand All @@ -62,14 +63,14 @@ public static void start(String host, int port, String user, String pass, String
} catch (final ClassNotFoundException e1) {
throw new SQLBansException("What on earth are you doing. This isn't CraftBukkit");
}
SQLHandler.instance = new SQLHandler(host, port, user, pass, db);
SQLHandler.instance = new SQLHandler(host, port, user, pass, db, table);
}
}

public static void unban(String user) throws SQLBansException {
synchronized (SQLHandler.sync) {
try {
final PreparedStatement statement = SQLHandler.instance().connection.prepareStatement("UPDATE `SQLBans_bans` SET `banned` = 0 WHERE `username` = ?");
final PreparedStatement statement = SQLHandler.instance().connection.prepareStatement("UPDATE `" + tableName + "` SET `banned` = 0 WHERE `username` = ?");
statement.setString(1, user);
statement.executeUpdate();
} catch (final SQLException e) {
Expand All @@ -91,15 +92,25 @@ public SQLHandler() throws SQLBansException {
throw new SQLBansException("Stop right there, criminal scum");
}

private SQLHandler(String host, int port, String user, String pass, String db) throws SQLBansException {
private SQLHandler(String host, int port, String user, String pass, String db, String table) throws SQLBansException {
try {
this.connection = DriverManager.getConnection("jdbc:mysql://" + host + ":" + port + "/" + db + "?autoReconnect=true&user=" + user + "&password=" + pass);

final PreparedStatement bansTableExists = this.connection.prepareStatement("SHOW TABLES LIKE \"SQLBans_bans\"");
tableName = table;
final PreparedStatement bansTableExists = this.connection.prepareStatement("SHOW TABLES LIKE \"" + tableName + "\"");
final ResultSet bansExists = bansTableExists.executeQuery();
if (!bansExists.first()) {
//TODO - create table
throw new SQLBansException("Needs tables! Execute the creation queries in RunFirst.sql");
String tableCreation =
"CREATE TABLE IF NOT EXISTS `" + tableName + "` (" +
"`id` int(11) NOT NULL AUTO_INCREMENT," +
"`username` varchar(16) NOT NULL," +
"`reason` tinytext NOT NULL," +
"`admin` varchar(16) NOT NULL," +
"`time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP," +
"`banned` tinyint(1) NOT NULL DEFAULT '1'," +
"PRIMARY KEY (`id`)," +
"KEY `username` (`username`)" +
") ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;";
this.connection.createStatement().executeUpdate(tableCreation);
}
} catch (final SQLException e) {
throw new SQLBansException("SQL fail!", e);
Expand Down
1 change: 1 addition & 0 deletions src/main/resources/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ database:
host: localhost
port: 3306
database: sqlbans
tablename: SQLBans_bans
auth:
username: banana
password: guava
Expand Down