feat: sqlite database support and generic database class
This commit is contained in:
parent
f93f21d2c6
commit
e0f3d7e914
2 changed files with 236 additions and 0 deletions
36
src/main/java/dev/lilyvex/oauthfabric/database/Database.java
Normal file
36
src/main/java/dev/lilyvex/oauthfabric/database/Database.java
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
package dev.lilyvex.oauthfabric.database;
|
||||||
|
|
||||||
|
public class Database implements IDatabase {
|
||||||
|
private IDatabase databaseClass;
|
||||||
|
|
||||||
|
public void setDatabase(String database) {
|
||||||
|
switch (database) {
|
||||||
|
case "sqlite":
|
||||||
|
databaseClass = new SQLite();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addUser(String uuid, String oauthId, String sessionToken) {
|
||||||
|
databaseClass.addUser(uuid, oauthId, sessionToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateUser(String uuid, String oauthId, String sessionToken) {
|
||||||
|
databaseClass.updateUser(uuid, oauthId, sessionToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeUser(String uuid) {
|
||||||
|
databaseClass.removeUser(uuid);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isRegisteredUser(String uuid) {
|
||||||
|
return databaseClass.isRegisteredUser(uuid);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getOauthId(String uuid) {
|
||||||
|
return databaseClass.getOauthId(uuid);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSessionToken(String uuid) {
|
||||||
|
return databaseClass.getSessionToken(uuid);
|
||||||
|
}
|
||||||
|
}
|
200
src/main/java/dev/lilyvex/oauthfabric/database/SQLite.java
Normal file
200
src/main/java/dev/lilyvex/oauthfabric/database/SQLite.java
Normal file
|
@ -0,0 +1,200 @@
|
||||||
|
package dev.lilyvex.oauthfabric.database;
|
||||||
|
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.sql.Connection;
|
||||||
|
import java.sql.DriverManager;
|
||||||
|
import java.sql.PreparedStatement;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.sql.Statement;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import net.fabricmc.loader.api.FabricLoader;
|
||||||
|
|
||||||
|
public class SQLite implements IDatabase {
|
||||||
|
private static final Logger LOGGER = LoggerFactory.getLogger("oauth-fabric");
|
||||||
|
private static final Path DATABASE_PATH = FabricLoader.getInstance().getConfigDir()
|
||||||
|
.resolve("oauth-fabric.db")
|
||||||
|
.normalize();
|
||||||
|
|
||||||
|
private static final String databaseUrl = "jdbc:sqlite:" + DATABASE_PATH;
|
||||||
|
private Connection connection = null;
|
||||||
|
|
||||||
|
private void createDatabase() throws SQLException {
|
||||||
|
try {
|
||||||
|
connection = DriverManager.getConnection(databaseUrl);
|
||||||
|
|
||||||
|
Statement statement = connection.createStatement();
|
||||||
|
statement.executeUpdate("""
|
||||||
|
CREATE TABLE IF NOT EXISTS users (
|
||||||
|
id INTEGER PRIMARY KEY,
|
||||||
|
uuid TEXT UNIQUE,
|
||||||
|
oauth_id TEXT UNIQUE,
|
||||||
|
session_token TEXT UNIQUE
|
||||||
|
)
|
||||||
|
""");
|
||||||
|
} catch (SQLException e) {
|
||||||
|
LOGGER.error("oauth-fabric: Unable to create SQLite database");
|
||||||
|
} finally {
|
||||||
|
try {
|
||||||
|
if (connection != null) {
|
||||||
|
connection.close();
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
LOGGER.error("oauth-fabric: Could not close SQLite connection");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addUser(String uuid, String oauthId, String sessionToken) {
|
||||||
|
try {
|
||||||
|
createDatabase();
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
connection = DriverManager.getConnection(databaseUrl);
|
||||||
|
|
||||||
|
PreparedStatement statement = connection.prepareStatement("""
|
||||||
|
INSERT INTO users (
|
||||||
|
uuid,
|
||||||
|
oauth_id,
|
||||||
|
session_token
|
||||||
|
) VALUES (
|
||||||
|
?,
|
||||||
|
?,
|
||||||
|
?
|
||||||
|
)
|
||||||
|
""");
|
||||||
|
|
||||||
|
statement.setString(1, uuid);
|
||||||
|
statement.setString(2, oauthId);
|
||||||
|
statement.setString(3, sessionToken);
|
||||||
|
statement.executeQuery();
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateUser(String uuid, String oauthId, String sessionToken) {
|
||||||
|
try {
|
||||||
|
createDatabase();
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
connection = DriverManager.getConnection(databaseUrl);
|
||||||
|
|
||||||
|
PreparedStatement statement = connection.prepareStatement("UPDATE users SET oauth_id = ?, session_token = ? WHERE uuid = ?");
|
||||||
|
statement.setString(1, oauthId);
|
||||||
|
statement.setString(2, sessionToken);
|
||||||
|
statement.setString(3, uuid);
|
||||||
|
statement.executeUpdate();
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeUser(String uuid) {
|
||||||
|
try {
|
||||||
|
createDatabase();
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
connection = DriverManager.getConnection(databaseUrl);
|
||||||
|
|
||||||
|
PreparedStatement statement = connection.prepareStatement("DELETE FROM users WHERE uuid = ?");
|
||||||
|
statement.setString(1, uuid);
|
||||||
|
statement.executeUpdate();
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isRegisteredUser(String uuid) {
|
||||||
|
try {
|
||||||
|
createDatabase();
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
connection = DriverManager.getConnection(databaseUrl);
|
||||||
|
|
||||||
|
PreparedStatement statement = connection.prepareStatement("SELECT * FROM users WHERE uuid = ?");
|
||||||
|
statement.setString(1, uuid);
|
||||||
|
ResultSet resultSet = statement.executeQuery();
|
||||||
|
|
||||||
|
int results = 0;
|
||||||
|
while (resultSet.next()) {
|
||||||
|
results++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (results > 0) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getOauthId(String uuid) {
|
||||||
|
try {
|
||||||
|
createDatabase();
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
connection = DriverManager.getConnection(databaseUrl);
|
||||||
|
|
||||||
|
PreparedStatement statement = connection.prepareStatement("SELECT * FROM users WHERE uuid = ?");
|
||||||
|
statement.setString(1, uuid);
|
||||||
|
ResultSet resultSet = statement.executeQuery();
|
||||||
|
|
||||||
|
String userOauthId = "";
|
||||||
|
|
||||||
|
while (resultSet.next()) {
|
||||||
|
userOauthId = resultSet.getString("oauth_id");
|
||||||
|
}
|
||||||
|
|
||||||
|
return userOauthId;
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSessionToken(String uuid) {
|
||||||
|
try {
|
||||||
|
createDatabase();
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
connection = DriverManager.getConnection(databaseUrl);
|
||||||
|
|
||||||
|
PreparedStatement statement = connection.prepareStatement("SELECT * FROM users WHERE uuid = ?");
|
||||||
|
statement.setString(1, uuid);
|
||||||
|
ResultSet resultSet = statement.executeQuery();
|
||||||
|
|
||||||
|
String userSessionToken = "";
|
||||||
|
|
||||||
|
while (resultSet.next()) {
|
||||||
|
userSessionToken = resultSet.getString("session_token");
|
||||||
|
}
|
||||||
|
|
||||||
|
return userSessionToken;
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue