84 lines
3.2 KiB
Java
84 lines
3.2 KiB
Java
package fr.xephi.authme.datasource.mysqlextensions;
|
|
|
|
import fr.xephi.authme.data.auth.PlayerAuth;
|
|
import fr.xephi.authme.datasource.Columns;
|
|
import fr.xephi.authme.settings.Settings;
|
|
import fr.xephi.authme.settings.properties.HooksSettings;
|
|
|
|
import java.sql.Connection;
|
|
import java.sql.PreparedStatement;
|
|
import java.sql.SQLException;
|
|
import java.util.OptionalInt;
|
|
|
|
/**
|
|
* Extensions for phpBB when MySQL is used as data source.
|
|
*/
|
|
class PhpBbExtension extends MySqlExtension {
|
|
|
|
private final String phpBbPrefix;
|
|
private final int phpBbGroup;
|
|
|
|
PhpBbExtension(Settings settings, Columns col) {
|
|
super(settings, col);
|
|
this.phpBbPrefix = settings.getProperty(HooksSettings.PHPBB_TABLE_PREFIX);
|
|
this.phpBbGroup = settings.getProperty(HooksSettings.PHPBB_ACTIVATED_GROUP_ID);
|
|
}
|
|
|
|
@Override
|
|
public void saveAuth(PlayerAuth auth, Connection con) throws SQLException {
|
|
OptionalInt authId = retrieveIdFromTable(auth.getNickname(), con);
|
|
if (authId.isPresent()) {
|
|
updateSpecificsOnSave(authId.getAsInt(), auth.getNickname(), con);
|
|
}
|
|
}
|
|
|
|
private void updateSpecificsOnSave(int id, String name, Connection con) throws SQLException {
|
|
// Insert player in phpbb_user_group
|
|
String sql = "INSERT INTO " + phpBbPrefix
|
|
+ "user_group (group_id, user_id, group_leader, user_pending) VALUES (?,?,?,?);";
|
|
try (PreparedStatement pst = con.prepareStatement(sql)) {
|
|
pst.setInt(1, phpBbGroup);
|
|
pst.setInt(2, id);
|
|
pst.setInt(3, 0);
|
|
pst.setInt(4, 0);
|
|
pst.executeUpdate();
|
|
}
|
|
// Update username_clean in phpbb_users
|
|
sql = "UPDATE " + tableName + " SET " + tableName + ".username_clean=? WHERE " + col.NAME + "=?;";
|
|
try (PreparedStatement pst = con.prepareStatement(sql)) {
|
|
pst.setString(1, name);
|
|
pst.setString(2, name);
|
|
pst.executeUpdate();
|
|
}
|
|
// Update player group in phpbb_users
|
|
sql = "UPDATE " + tableName + " SET " + tableName + ".group_id=? WHERE " + col.NAME + "=?;";
|
|
try (PreparedStatement pst = con.prepareStatement(sql)) {
|
|
pst.setInt(1, phpBbGroup);
|
|
pst.setString(2, name);
|
|
pst.executeUpdate();
|
|
}
|
|
// Get current time without ms
|
|
long time = System.currentTimeMillis() / 1000;
|
|
// Update user_regdate
|
|
sql = "UPDATE " + tableName + " SET " + tableName + ".user_regdate=? WHERE " + col.NAME + "=?;";
|
|
try (PreparedStatement pst = con.prepareStatement(sql)) {
|
|
pst.setLong(1, time);
|
|
pst.setString(2, name);
|
|
pst.executeUpdate();
|
|
}
|
|
// Update user_lastvisit
|
|
sql = "UPDATE " + tableName + " SET " + tableName + ".user_lastvisit=? WHERE " + col.NAME + "=?;";
|
|
try (PreparedStatement pst = con.prepareStatement(sql)) {
|
|
pst.setLong(1, time);
|
|
pst.setString(2, name);
|
|
pst.executeUpdate();
|
|
}
|
|
// Increment num_users
|
|
sql = "UPDATE " + phpBbPrefix
|
|
+ "config SET config_value = config_value + 1 WHERE config_name = 'num_users';";
|
|
try (PreparedStatement pst = con.prepareStatement(sql)) {
|
|
pst.executeUpdate();
|
|
}
|
|
}
|
|
}
|