forked from MagicBane/Server
Initial Repository Push
This commit is contained in:
@@ -0,0 +1,380 @@
|
||||
// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
|
||||
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
|
||||
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
|
||||
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
|
||||
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
|
||||
// Magicbane Emulator Project © 2013 - 2022
|
||||
// www.magicbane.com
|
||||
|
||||
|
||||
package discord;
|
||||
|
||||
import engine.Enum;
|
||||
import engine.gameManager.ConfigManager;
|
||||
import org.pmw.tinylog.Logger;
|
||||
|
||||
import java.sql.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class Database {
|
||||
|
||||
public String sqlURI;
|
||||
public static Boolean online;
|
||||
|
||||
// Load and instance the JDBC Driver
|
||||
|
||||
static {
|
||||
try {
|
||||
Class.forName("com.mysql.cj.jdbc.Driver").newInstance();
|
||||
} catch (InstantiationException | ClassNotFoundException | IllegalAccessException e) {
|
||||
// TODO Auto-generated catch block
|
||||
Logger.error(e.toString());
|
||||
;
|
||||
online = false;
|
||||
}
|
||||
}
|
||||
|
||||
public void configureDatabase() {
|
||||
|
||||
// Build connection string from JSON object.
|
||||
|
||||
sqlURI = "jdbc:mysql://";
|
||||
sqlURI += ConfigManager.MB_DATABASE_ADDRESS.getValue() + ':' + ConfigManager.MB_DATABASE_PORT.getValue();
|
||||
sqlURI += '/' + (String) ConfigManager.MB_DATABASE_NAME.getValue() + '?';
|
||||
sqlURI += "useServerPrepStmts=true";
|
||||
sqlURI += "&cachePrepStmts=false";
|
||||
sqlURI += "&cacheCallableStmts=true";
|
||||
sqlURI += "&characterEncoding=utf8";
|
||||
|
||||
online = true;
|
||||
}
|
||||
|
||||
public boolean updateAccountPassword(String discordAccountID, String newPassword) {
|
||||
|
||||
try (Connection connection = DriverManager.getConnection(sqlURI, ConfigManager.MB_DATABASE_USER.getValue(),
|
||||
ConfigManager.MB_DATABASE_PASS.getValue())) {
|
||||
|
||||
CallableStatement updatePassword = connection.prepareCall("call discordUpdatePassword(?, ?)");
|
||||
|
||||
updatePassword.setString(1, discordAccountID);
|
||||
updatePassword.setString(2, newPassword);
|
||||
|
||||
updatePassword.executeUpdate();
|
||||
updatePassword.close();
|
||||
return true;
|
||||
|
||||
} catch (SQLException e) {
|
||||
Logger.error(e.toString());
|
||||
;
|
||||
this.online = false;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean updateAccountStatus(String discordAccountID, Enum.AccountStatus accountStatus) {
|
||||
|
||||
try (Connection connection = DriverManager.getConnection(sqlURI, ConfigManager.MB_DATABASE_USER.getValue(),
|
||||
ConfigManager.MB_DATABASE_PASS.getValue())) {
|
||||
|
||||
PreparedStatement updateAccountStatus = connection.prepareCall("update obj_account set `status` = ? where `discordAccount` = ?");
|
||||
|
||||
updateAccountStatus.setString(1, accountStatus.name());
|
||||
updateAccountStatus.setString(2, discordAccountID);
|
||||
|
||||
updateAccountStatus.executeUpdate();
|
||||
updateAccountStatus.close();
|
||||
return true;
|
||||
|
||||
} catch (SQLException e) {
|
||||
Logger.error(e.toString());
|
||||
;
|
||||
this.online = false;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean registerDiscordAccount(String discordAccountID, String discordUserName, String discordPassword) {
|
||||
|
||||
try (Connection connection = DriverManager.getConnection(sqlURI, ConfigManager.MB_DATABASE_USER.getValue(),
|
||||
ConfigManager.MB_DATABASE_PASS.getValue())) {
|
||||
|
||||
CallableStatement registerAccount = connection.prepareCall("call discordAccountRegister(?, ?, ?)");
|
||||
|
||||
registerAccount.setString(1, discordAccountID);
|
||||
registerAccount.setString(2, discordUserName);
|
||||
registerAccount.setString(3, discordPassword);
|
||||
|
||||
registerAccount.execute();
|
||||
registerAccount.close();
|
||||
return true;
|
||||
|
||||
} catch (SQLException e) {
|
||||
Logger.error(e.toString());
|
||||
this.online = false;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public List<DiscordAccount> getDiscordAccounts(String discordAccountID) {
|
||||
|
||||
DiscordAccount discordAccount;
|
||||
List<DiscordAccount> discordAccounts = new ArrayList<>();
|
||||
|
||||
String queryString = "SELECT * FROM obj_account where discordAccount = ?";
|
||||
|
||||
try (Connection connection = DriverManager.getConnection(sqlURI, ConfigManager.MB_DATABASE_USER.getValue(),
|
||||
ConfigManager.MB_DATABASE_PASS.getValue())) {
|
||||
|
||||
// Discord account name based lookup
|
||||
|
||||
PreparedStatement accountQuery = connection.prepareStatement(queryString);
|
||||
accountQuery.setString(1, discordAccountID);
|
||||
|
||||
ResultSet rs = accountQuery.executeQuery();
|
||||
|
||||
while (rs.next()) {
|
||||
discordAccount = new DiscordAccount();
|
||||
discordAccount.discordAccount = rs.getString("discordAccount");
|
||||
discordAccount.gameAccountName = rs.getString("acct_uname");
|
||||
discordAccount.status = Enum.AccountStatus.valueOf(rs.getString("status"));
|
||||
discordAccount.isDiscordAdmin = rs.getByte("discordAdmin"); // Registration date cannot be null
|
||||
|
||||
Timestamp registrationDate = rs.getTimestamp("registrationDate");
|
||||
discordAccount.registrationDate = registrationDate.toLocalDateTime();
|
||||
|
||||
// Load last Update Request datetime
|
||||
|
||||
Timestamp lastUpdateRequest = rs.getTimestamp("lastUpdateRequest");
|
||||
|
||||
if (lastUpdateRequest != null)
|
||||
discordAccount.lastUpdateRequest = lastUpdateRequest.toLocalDateTime();
|
||||
else
|
||||
discordAccount.lastUpdateRequest = null;
|
||||
|
||||
discordAccounts.add(discordAccount);
|
||||
}
|
||||
|
||||
} catch (SQLException e) {
|
||||
Logger.error(e.toString());
|
||||
this.online = false;
|
||||
}
|
||||
|
||||
return discordAccounts;
|
||||
}
|
||||
|
||||
public String getTrashDetail() {
|
||||
|
||||
String outString = "accountName characterName machineID ip count\n";
|
||||
outString += "---------------------------------------------\n";
|
||||
String queryString = "SELECT * FROM dyn_trash_detail;";
|
||||
|
||||
try (Connection connection = DriverManager.getConnection(sqlURI, ConfigManager.MB_DATABASE_USER.getValue(),
|
||||
ConfigManager.MB_DATABASE_PASS.getValue())) {
|
||||
|
||||
// Discord account name based lookup
|
||||
|
||||
PreparedStatement trashQuery = connection.prepareStatement(queryString);
|
||||
|
||||
ResultSet rs = trashQuery.executeQuery();
|
||||
|
||||
while (rs.next()) {
|
||||
outString += rs.getString("accountName") + " ";
|
||||
outString += rs.getString("characterName") + " ";
|
||||
outString += rs.getString("machineID") + " ";
|
||||
outString += rs.getString("ip") + " ";
|
||||
outString += rs.getInt("count") + "\n";
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
Logger.error(e.toString());
|
||||
|
||||
this.online = false;
|
||||
}
|
||||
return outString;
|
||||
}
|
||||
|
||||
public String getTrashList() {
|
||||
|
||||
String outString = "";
|
||||
String queryString = "SELECT DISTINCT `characterName` FROM dyn_trash_detail;";
|
||||
int counter = 0;
|
||||
|
||||
try (Connection connection = DriverManager.getConnection(sqlURI, ConfigManager.MB_DATABASE_USER.getValue(),
|
||||
ConfigManager.MB_DATABASE_PASS.getValue())) {
|
||||
|
||||
// Discord account name based lookup
|
||||
|
||||
PreparedStatement trashQuery = connection.prepareStatement(queryString);
|
||||
|
||||
ResultSet rs = trashQuery.executeQuery();
|
||||
|
||||
while (rs.next()) {
|
||||
outString += rs.getString("characterName");
|
||||
counter++;
|
||||
|
||||
if (counter > 2) {
|
||||
outString += "\n";
|
||||
counter = 0; }
|
||||
else
|
||||
outString += " ";
|
||||
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
Logger.error(e.toString());
|
||||
|
||||
this.online = false;
|
||||
}
|
||||
|
||||
if (outString.length() > 1500)
|
||||
return outString.substring(0, 1500);
|
||||
else
|
||||
return outString;
|
||||
}
|
||||
public int getTrashCount() {
|
||||
|
||||
int trashCount = 0;
|
||||
|
||||
String queryString = "SELECT count(distinct characterName) FROM dyn_trash_detail;";
|
||||
|
||||
try (Connection connection = DriverManager.getConnection(sqlURI, ConfigManager.MB_DATABASE_USER.getValue(),
|
||||
ConfigManager.MB_DATABASE_PASS.getValue())) {
|
||||
|
||||
// Discord account name based lookup
|
||||
|
||||
PreparedStatement trashQuery = connection.prepareStatement(queryString);
|
||||
|
||||
ResultSet rs = trashQuery.executeQuery();
|
||||
|
||||
while (rs.next()) {
|
||||
trashCount = rs.getInt(1);
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
Logger.error(e.toString());
|
||||
|
||||
this.online = false;
|
||||
}
|
||||
|
||||
return trashCount;
|
||||
}
|
||||
|
||||
public String getTrashFile() {
|
||||
|
||||
String outString = "machineID : count\n";
|
||||
String queryString = "SELECT * FROM dyn_trash;";
|
||||
|
||||
try (Connection connection = DriverManager.getConnection(sqlURI, ConfigManager.MB_DATABASE_USER.getValue(),
|
||||
ConfigManager.MB_DATABASE_PASS.getValue())) {
|
||||
|
||||
// Discord account name based lookup
|
||||
|
||||
PreparedStatement trashQuery = connection.prepareStatement(queryString);
|
||||
|
||||
ResultSet rs = trashQuery.executeQuery();
|
||||
|
||||
while (rs.next()) {
|
||||
outString += rs.getString("machineID") + " : ";
|
||||
outString += rs.getInt("count") + "\n";
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
Logger.error(e.toString());
|
||||
|
||||
this.online = false;
|
||||
}
|
||||
return outString;
|
||||
}
|
||||
|
||||
public List<DiscordAccount> getAccountsByDiscordName(String accountName, Boolean exact) {
|
||||
|
||||
DiscordAccount discordAccount;
|
||||
List<DiscordAccount> discordAccounts = new ArrayList<>();
|
||||
String searchString;
|
||||
String queryString;
|
||||
|
||||
if (exact.equals(true))
|
||||
searchString = accountName + "#%";
|
||||
else
|
||||
searchString = accountName + "%#%";
|
||||
|
||||
queryString = "SELECT * FROM obj_account where `acct_uname` LIKE ?";
|
||||
|
||||
try (Connection connection = DriverManager.getConnection(sqlURI, ConfigManager.MB_DATABASE_USER.getValue(),
|
||||
ConfigManager.MB_DATABASE_PASS.getValue())) {
|
||||
|
||||
// Discord account name based lookup
|
||||
|
||||
PreparedStatement nameQuery = connection.prepareStatement(queryString);
|
||||
nameQuery.setString(1, searchString);
|
||||
|
||||
ResultSet rs = nameQuery.executeQuery();
|
||||
|
||||
while (rs.next()) {
|
||||
discordAccount = new DiscordAccount();
|
||||
discordAccount.discordAccount = rs.getString("discordAccount");
|
||||
discordAccount.gameAccountName = rs.getString("acct_uname");
|
||||
discordAccount.status = Enum.AccountStatus.valueOf(rs.getString("status"));
|
||||
|
||||
// Registration date cannot be null
|
||||
|
||||
Timestamp registrationDate = rs.getTimestamp("registrationDate");
|
||||
discordAccount.registrationDate = registrationDate.toLocalDateTime();
|
||||
|
||||
// Load last Update Request datetime
|
||||
|
||||
Timestamp lastUpdateRequest = rs.getTimestamp("lastUpdateRequest");
|
||||
|
||||
if (lastUpdateRequest != null)
|
||||
discordAccount.lastUpdateRequest = lastUpdateRequest.toLocalDateTime();
|
||||
else
|
||||
discordAccount.lastUpdateRequest = null;
|
||||
|
||||
discordAccounts.add(discordAccount);
|
||||
}
|
||||
|
||||
} catch (SQLException e) {
|
||||
Logger.error(e.toString());
|
||||
;
|
||||
this.online = false;
|
||||
}
|
||||
|
||||
return discordAccounts;
|
||||
}
|
||||
|
||||
public String getPopulationSTring() {
|
||||
|
||||
String popString = "";
|
||||
|
||||
try (Connection connection = DriverManager.getConnection(sqlURI, ConfigManager.MB_DATABASE_USER.getValue(),
|
||||
ConfigManager.MB_DATABASE_PASS.getValue())) {
|
||||
|
||||
// Discord account name based lookup
|
||||
CallableStatement getPopString = connection.prepareCall("CALL GET_POPULATION_STRING()");
|
||||
ResultSet rs = getPopString.executeQuery();
|
||||
|
||||
if (rs.next())
|
||||
popString = rs.getString("popstring");
|
||||
|
||||
} catch (SQLException e) {
|
||||
Logger.error(e.toString());
|
||||
this.online = false;
|
||||
}
|
||||
|
||||
return popString;
|
||||
}
|
||||
|
||||
public void invalidateLoginCache(String discordAccountID) {
|
||||
|
||||
try (Connection connection = DriverManager.getConnection(sqlURI, ConfigManager.MB_DATABASE_USER.getValue(),
|
||||
ConfigManager.MB_DATABASE_PASS.getValue())) {
|
||||
|
||||
String queryString = "INSERT IGNORE INTO login_cachelist (`UID`) SELECT `UID` from `obj_account` WHERE `discordAccount` = ?";
|
||||
|
||||
PreparedStatement invalidateAccounts = connection.prepareStatement(queryString);
|
||||
invalidateAccounts.setString(1, discordAccountID);
|
||||
invalidateAccounts.executeUpdate();
|
||||
|
||||
} catch (SQLException e) {
|
||||
Logger.error(e.toString());
|
||||
this.online = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user