This commit is contained in:
Xephi59 2016-05-15 17:52:54 +02:00
parent 0fc7674aa4
commit 9db330646e
4 changed files with 81 additions and 60 deletions

View File

@ -1,5 +1,11 @@
package fr.xephi.authme.command.executable.email;
import java.util.List;
import javax.inject.Inject;
import org.bukkit.entity.Player;
import fr.xephi.authme.AuthMe;
import fr.xephi.authme.ConsoleLogger;
import fr.xephi.authme.cache.auth.PlayerAuth;
@ -13,10 +19,6 @@ import fr.xephi.authme.security.RandomString;
import fr.xephi.authme.security.crypts.HashedPassword;
import fr.xephi.authme.settings.properties.EmailSettings;
import fr.xephi.authme.util.StringUtils;
import org.bukkit.entity.Player;
import javax.inject.Inject;
import java.util.List;
public class RecoverEmailCommand extends PlayerCommand {

View File

@ -1,5 +1,11 @@
package fr.xephi.authme.datasource;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import com.google.common.base.Optional;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
@ -8,17 +14,12 @@ import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.ListeningExecutorService;
import com.google.common.util.concurrent.MoreExecutors;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import fr.xephi.authme.ConsoleLogger;
import fr.xephi.authme.cache.auth.PlayerAuth;
import fr.xephi.authme.cache.auth.PlayerCache;
import fr.xephi.authme.security.crypts.HashedPassword;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
/**
*/
public class CacheDataSource implements DataSource {
@ -41,7 +42,8 @@ public class CacheDataSource implements DataSource {
.build())
);
cachedAuths = CacheBuilder.newBuilder()
.refreshAfterWrite(8, TimeUnit.MINUTES)
.refreshAfterWrite(5, TimeUnit.MINUTES)
.expireAfterAccess(15, TimeUnit.MINUTES)
.build(new CacheLoader<String, Optional<PlayerAuth>>() {
@Override
public Optional<PlayerAuth> load(String key) {
@ -110,7 +112,7 @@ public class CacheDataSource implements DataSource {
}
@Override
public boolean updatePassword(String user, HashedPassword password) {
public synchronized boolean updatePassword(String user, HashedPassword password) {
user = user.toLowerCase();
boolean result = source.updatePassword(user, password);
if (result) {
@ -120,7 +122,7 @@ public class CacheDataSource implements DataSource {
}
@Override
public boolean updateSession(PlayerAuth auth) {
public synchronized boolean updateSession(PlayerAuth auth) {
boolean result = source.updateSession(auth);
if (result) {
cachedAuths.refresh(auth.getNickname());
@ -129,7 +131,7 @@ public class CacheDataSource implements DataSource {
}
@Override
public boolean updateQuitLoc(final PlayerAuth auth) {
public synchronized boolean updateQuitLoc(final PlayerAuth auth) {
boolean result = source.updateQuitLoc(auth);
if (result) {
cachedAuths.refresh(auth.getNickname());
@ -199,17 +201,17 @@ public class CacheDataSource implements DataSource {
}
@Override
public boolean isLogged(String user) {
public synchronized boolean isLogged(String user) {
return PlayerCache.getInstance().isAuthenticated(user);
}
@Override
public void setLogged(final String user) {
public synchronized void setLogged(final String user) {
source.setLogged(user.toLowerCase());
}
@Override
public void setUnlogged(final String user) {
public synchronized void setUnlogged(final String user) {
source.setUnlogged(user.toLowerCase());
}
@ -225,7 +227,7 @@ public class CacheDataSource implements DataSource {
}
@Override
public boolean updateRealName(String user, String realName) {
public synchronized boolean updateRealName(String user, String realName) {
boolean result = source.updateRealName(user, realName);
if (result) {
cachedAuths.refresh(user);
@ -234,7 +236,7 @@ public class CacheDataSource implements DataSource {
}
@Override
public boolean updateIp(String user, String ip) {
public synchronized boolean updateIp(String user, String ip) {
boolean result = source.updateIp(user, ip);
if (result) {
cachedAuths.refresh(user);

View File

@ -1,20 +1,5 @@
package fr.xephi.authme.datasource;
import com.google.common.annotations.VisibleForTesting;
import com.zaxxer.hikari.HikariDataSource;
import com.zaxxer.hikari.pool.HikariPool.PoolInitializationException;
import fr.xephi.authme.ConsoleLogger;
import fr.xephi.authme.cache.auth.PlayerAuth;
import fr.xephi.authme.security.HashAlgorithm;
import fr.xephi.authme.security.crypts.HashedPassword;
import fr.xephi.authme.security.crypts.XFBCRYPT;
import fr.xephi.authme.settings.NewSetting;
import fr.xephi.authme.settings.Settings;
import fr.xephi.authme.settings.properties.DatabaseSettings;
import fr.xephi.authme.settings.properties.HooksSettings;
import fr.xephi.authme.settings.properties.SecuritySettings;
import fr.xephi.authme.util.StringUtils;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
@ -26,6 +11,22 @@ import java.sql.Types;
import java.util.ArrayList;
import java.util.List;
import com.google.common.annotations.VisibleForTesting;
import com.zaxxer.hikari.HikariDataSource;
import com.zaxxer.hikari.pool.HikariPool.PoolInitializationException;
import fr.xephi.authme.ConsoleLogger;
import fr.xephi.authme.cache.auth.PlayerAuth;
import fr.xephi.authme.security.HashAlgorithm;
import fr.xephi.authme.security.crypts.HashedPassword;
import fr.xephi.authme.security.crypts.XFBCRYPT;
import fr.xephi.authme.settings.NewSetting;
import fr.xephi.authme.settings.Settings;
import fr.xephi.authme.settings.properties.DatabaseSettings;
import fr.xephi.authme.settings.properties.HooksSettings;
import fr.xephi.authme.settings.properties.SecuritySettings;
import fr.xephi.authme.util.StringUtils;
/**
*/
public class MySQL implements DataSource {
@ -535,7 +536,7 @@ public class MySQL implements DataSource {
}
@Override
public boolean updatePassword(String user, HashedPassword password) {
public synchronized boolean updatePassword(String user, HashedPassword password) {
user = user.toLowerCase();
try (Connection con = getConnection()) {
boolean useSalt = !col.SALT.isEmpty();
@ -756,7 +757,7 @@ public class MySQL implements DataSource {
}
@Override
public boolean isLogged(String user) {
public synchronized boolean isLogged(String user) {
String sql = "SELECT " + col.IS_LOGGED + " FROM " + tableName + " WHERE " + col.NAME + "=?;";
try (Connection con = getConnection(); PreparedStatement pst = con.prepareStatement(sql)) {
pst.setString(1, user);
@ -770,7 +771,7 @@ public class MySQL implements DataSource {
}
@Override
public void setLogged(String user) {
public synchronized void setLogged(String user) {
String sql = "UPDATE " + tableName + " SET " + col.IS_LOGGED + "=? WHERE " + col.NAME + "=?;";
try (Connection con = getConnection(); PreparedStatement pst = con.prepareStatement(sql)) {
pst.setInt(1, 1);
@ -782,7 +783,7 @@ public class MySQL implements DataSource {
}
@Override
public void setUnlogged(String user) {
public synchronized void setUnlogged(String user) {
String sql = "UPDATE " + tableName + " SET " + col.IS_LOGGED + "=? WHERE " + col.NAME + "=?;";
try (Connection con = getConnection(); PreparedStatement pst = con.prepareStatement(sql)) {
pst.setInt(1, 0);
@ -822,7 +823,7 @@ public class MySQL implements DataSource {
}
@Override
public boolean updateRealName(String user, String realName) {
public synchronized boolean updateRealName(String user, String realName) {
String sql = "UPDATE " + tableName + " SET " + col.REAL_NAME + "=? WHERE " + col.NAME + "=?;";
try (Connection con = getConnection(); PreparedStatement pst = con.prepareStatement(sql)) {
pst.setString(1, realName);
@ -836,7 +837,7 @@ public class MySQL implements DataSource {
}
@Override
public boolean updateIp(String user, String ip) {
public synchronized boolean updateIp(String user, String ip) {
String sql = "UPDATE " + tableName + " SET " + col.IP + "=? WHERE " + col.NAME + "=?;";
try (Connection con = getConnection(); PreparedStatement pst = con.prepareStatement(sql)) {
pst.setString(1, ip);

View File

@ -1,14 +1,5 @@
package fr.xephi.authme.datasource;
import com.google.common.annotations.VisibleForTesting;
import fr.xephi.authme.ConsoleLogger;
import fr.xephi.authme.cache.auth.PlayerAuth;
import fr.xephi.authme.security.crypts.HashedPassword;
import fr.xephi.authme.settings.NewSetting;
import fr.xephi.authme.settings.Settings;
import fr.xephi.authme.settings.properties.DatabaseSettings;
import fr.xephi.authme.util.StringUtils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
@ -18,6 +9,16 @@ import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import com.google.common.annotations.VisibleForTesting;
import fr.xephi.authme.ConsoleLogger;
import fr.xephi.authme.cache.auth.PlayerAuth;
import fr.xephi.authme.security.crypts.HashedPassword;
import fr.xephi.authme.settings.NewSetting;
import fr.xephi.authme.settings.Settings;
import fr.xephi.authme.settings.properties.DatabaseSettings;
import fr.xephi.authme.util.StringUtils;
/**
*/
public class SQLite implements DataSource {
@ -65,7 +66,6 @@ public class SQLite implements DataSource {
Class.forName("org.sqlite.JDBC");
ConsoleLogger.info("SQLite driver loaded");
this.con = DriverManager.getConnection("jdbc:sqlite:plugins/AuthMe/" + database + ".db");
}
private synchronized void setup() throws SQLException {
@ -131,7 +131,13 @@ public class SQLite implements DataSource {
@Override
public void reload() {
// TODO 20160309: Implement reloading
close(con);
try {
this.connect();
this.setup();
} catch (ClassNotFoundException | SQLException ex) {
ConsoleLogger.logException("Error during SQLite initialization:", ex);
}
}
@Override
@ -239,7 +245,7 @@ public class SQLite implements DataSource {
}
@Override
public boolean updatePassword(String user, HashedPassword password) {
public synchronized boolean updatePassword(String user, HashedPassword password) {
user = user.toLowerCase();
PreparedStatement pst = null;
try {
@ -266,7 +272,7 @@ public class SQLite implements DataSource {
}
@Override
public boolean updateSession(PlayerAuth auth) {
public synchronized boolean updateSession(PlayerAuth auth) {
PreparedStatement pst = null;
try {
pst = con.prepareStatement("UPDATE " + tableName + " SET " + col.IP + "=?, " + col.LAST_LOGIN + "=?, " + col.REAL_NAME + "=? WHERE " + col.NAME + "=?;");
@ -322,7 +328,7 @@ public class SQLite implements DataSource {
}
@Override
public boolean updateQuitLoc(PlayerAuth auth) {
public synchronized boolean updateQuitLoc(PlayerAuth auth) {
PreparedStatement pst = null;
try {
pst = con.prepareStatement("UPDATE " + tableName + " SET " + col.LASTLOC_X + "=?, " + col.LASTLOC_Y + "=?, " + col.LASTLOC_Z + "=?, " + col.LASTLOC_WORLD + "=? WHERE " + col.NAME + "=?;");
@ -342,7 +348,7 @@ public class SQLite implements DataSource {
}
@Override
public boolean updateEmail(PlayerAuth auth) {
public synchronized boolean updateEmail(PlayerAuth auth) {
String sql = "UPDATE " + tableName + " SET " + col.EMAIL + "=? WHERE " + col.NAME + "=?;";
try (PreparedStatement pst = con.prepareStatement(sql)) {
pst.setString(1, auth.getEmail());
@ -376,6 +382,16 @@ public class SQLite implements DataSource {
}
}
private void close(Connection con) {
if (con != null) {
try {
con.close();
} catch (SQLException ex) {
logSqlException(ex);
}
}
}
private void close(ResultSet rs) {
if (rs != null) {
try {
@ -443,7 +459,7 @@ public class SQLite implements DataSource {
}
@Override
public boolean isLogged(String user) {
public synchronized boolean isLogged(String user) {
PreparedStatement pst = null;
ResultSet rs = null;
try {
@ -462,7 +478,7 @@ public class SQLite implements DataSource {
}
@Override
public void setLogged(String user) {
public synchronized void setLogged(String user) {
PreparedStatement pst = null;
try {
pst = con.prepareStatement("UPDATE " + tableName + " SET " + col.IS_LOGGED + "=? WHERE LOWER(" + col.NAME + ")=?;");
@ -477,7 +493,7 @@ public class SQLite implements DataSource {
}
@Override
public void setUnlogged(String user) {
public synchronized void setUnlogged(String user) {
PreparedStatement pst = null;
if (user != null)
try {
@ -521,7 +537,7 @@ public class SQLite implements DataSource {
}
@Override
public boolean updateRealName(String user, String realName) {
public synchronized boolean updateRealName(String user, String realName) {
String sql = "UPDATE " + tableName + " SET " + col.REAL_NAME + "=? WHERE " + col.NAME + "=?;";
try (PreparedStatement pst = con.prepareStatement(sql)) {
pst.setString(1, realName);
@ -535,7 +551,7 @@ public class SQLite implements DataSource {
}
@Override
public boolean updateIp(String user, String ip) {
public synchronized boolean updateIp(String user, String ip) {
String sql = "UPDATE " + tableName + " SET " + col.IP + "=? WHERE " + col.NAME + "=?;";
try (PreparedStatement pst = con.prepareStatement(sql)) {
pst.setString(1, ip);