User management.

This commit is contained in:
marcins78
2013-05-23 14:32:21 +00:00
parent 3bee9ed0f6
commit 4bd44ea8f1
8 changed files with 493 additions and 37 deletions

View File

@@ -7,6 +7,7 @@ import com.gempukku.lotro.cache.CacheManager;
import com.gempukku.lotro.cards.CardSets;
import com.gempukku.lotro.collection.CollectionsManager;
import com.gempukku.lotro.db.LeagueDAO;
import com.gempukku.lotro.db.PlayerDAO;
import com.gempukku.lotro.db.vo.CollectionType;
import com.gempukku.lotro.game.CardCollection;
import com.gempukku.lotro.game.Player;
@@ -25,12 +26,14 @@ import org.w3c.dom.Element;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.lang.reflect.Type;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
public class AdminRequestHandler extends LotroServerRequestHandler implements UriRequestHandler {
public static final int DAY_IN_MILIS = 1000 * 60 * 60 * 24;
private LeagueService _leagueService;
private TournamentService _tournamentService;
private CacheManager _cacheManager;
@@ -39,6 +42,7 @@ public class AdminRequestHandler extends LotroServerRequestHandler implements Ur
private LeagueDAO _leagueDao;
private CollectionsManager _collectionManager;
private CardSets _cardSets;
private PlayerDAO _playerDAO;
public AdminRequestHandler(Map<Type, Object> context) {
super(context);
@@ -49,6 +53,7 @@ public class AdminRequestHandler extends LotroServerRequestHandler implements Ur
_hallServer = extractObject(context, HallServer.class);
_formatLibrary = extractObject(context, LotroFormatLibrary.class);
_leagueDao = extractObject(context, LeagueDAO.class);
_playerDAO = extractObject(context, PlayerDAO.class);
_collectionManager = extractObject(context, CollectionsManager.class);
}
@@ -72,10 +77,101 @@ public class AdminRequestHandler extends LotroServerRequestHandler implements Ur
addItems(request, responseWriter);
} else if (uri.equals("/addItemsToCollection") && request.getMethod() == HttpMethod.POST) {
addItemsToCollection(request, responseWriter);
} else if (uri.equals("/banUser") && request.getMethod() == HttpMethod.POST) {
banUser(request, responseWriter);
} else if (uri.equals("/banUserTemp") && request.getMethod() == HttpMethod.POST) {
banUserTemp(request, responseWriter);
} else if (uri.equals("/unBanUser") && request.getMethod() == HttpMethod.POST) {
unBanUser(request, responseWriter);
} else if (uri.equals("/findMultipleAccounts") && request.getMethod() == HttpMethod.POST) {
findMultipleAccounts(request, responseWriter);
} else {
responseWriter.writeError(404);
}
}
private void findMultipleAccounts(HttpRequest request, ResponseWriter responseWriter) throws Exception {
validateAdmin(request);
HttpPostRequestDecoder postDecoder = new HttpPostRequestDecoder(request);
String login = getFormParameterSafely(postDecoder, "login");
List<Player> similarPlayers = _playerDAO.findSimilarAccounts(login);
if (similarPlayers == null)
responseWriter.writeError(404);
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
Document doc = documentBuilder.newDocument();
Element players = doc.createElement("players");
for (Player similarPlayer : similarPlayers) {
Element playerElem = doc.createElement("league");
playerElem.setAttribute("id", String.valueOf(similarPlayer.getId()));
playerElem.setAttribute("name", similarPlayer.getName());
playerElem.setAttribute("password", similarPlayer.getPassword());
playerElem.setAttribute("status", getStatus(similarPlayer));
playerElem.setAttribute("createIp", similarPlayer.getCreateIp());
playerElem.setAttribute("loginIp", similarPlayer.getLastIp());
players.appendChild(playerElem);
}
doc.appendChild(players);
responseWriter.writeXmlResponse(doc);
}
private String getStatus(Player similarPlayer) {
if (similarPlayer.getBannedUntil() != null) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
return "Banned until " + format.format(similarPlayer.getBannedUntil());
}
if (similarPlayer.getType().contains("n"))
return "Unbanned";
if (similarPlayer.getType().equals(""))
return "Banned permanently";
return "OK";
}
private void banUser(HttpRequest request, ResponseWriter responseWriter) throws Exception {
validateAdmin(request);
HttpPostRequestDecoder postDecoder = new HttpPostRequestDecoder(request);
String login = getFormParameterSafely(postDecoder, "login");
final boolean success = _playerDAO.banPlayerPermanently(login);
if (!success)
throw new HttpProcessingException(404);
responseWriter.writeHtmlResponse("OK");
}
private void banUserTemp(HttpRequest request, ResponseWriter responseWriter) throws Exception {
validateAdmin(request);
HttpPostRequestDecoder postDecoder = new HttpPostRequestDecoder(request);
String login = getFormParameterSafely(postDecoder, "login");
int duration = Integer.parseInt(getFormParameterSafely(postDecoder, "duration"));
final boolean success = _playerDAO.banPlayerTemporarily(login, System.currentTimeMillis() + duration * DAY_IN_MILIS);
if (!success)
throw new HttpProcessingException(404);
responseWriter.writeHtmlResponse("OK");
}
private void unBanUser(HttpRequest request, ResponseWriter responseWriter) throws Exception {
validateAdmin(request);
HttpPostRequestDecoder postDecoder = new HttpPostRequestDecoder(request);
String login = getFormParameterSafely(postDecoder, "login");
final boolean success = _playerDAO.unBanPlayer(login);
if (!success)
throw new HttpProcessingException(404);
responseWriter.writeHtmlResponse("OK");
}
private void addItemsToCollection(HttpRequest request, ResponseWriter responseWriter) throws Exception {

View File

@@ -8,6 +8,7 @@ import org.jboss.netty.handler.codec.http.HttpRequest;
import org.jboss.netty.handler.codec.http.multipart.HttpPostRequestDecoder;
import java.lang.reflect.Type;
import java.util.Date;
import java.util.Map;
public class LoginRequestHandler extends LotroServerRequestHandler implements UriRequestHandler {
@@ -25,7 +26,11 @@ public class LoginRequestHandler extends LotroServerRequestHandler implements Ur
Player player = _playerDao.loginUser(login, password);
if (player != null) {
if (player.getType().contains("u")) {
responseWriter.writeXmlResponse(null, logUserReturningHeaders(e, login));
final Date bannedUntil = player.getBannedUntil();
if (bannedUntil != null && bannedUntil.after(new Date()))
responseWriter.writeError(409);
else
responseWriter.writeXmlResponse(null, logUserReturningHeaders(e, login));
} else {
responseWriter.writeError(403);
}

View File

@@ -0,0 +1,184 @@
<html>
<head>
<title>Gemp-LotR Ban Manager</title>
<style type="text/css">
body {
font-size: 12px;
background-color: #000000;
color: #ffffff;
}
.leagueName {
font-size: 150%;
font-weight: bolder;
}
.serieName {
font-size: 120%;
font-weight: bolder;
}
</style>
<link rel="stylesheet" type="text/css" href="css/dark-hive/jquery-ui-1.8.16.custom.css">
<link rel="stylesheet" type="text/css" href="css/jquery.contextMenu.css">
<link rel="stylesheet" type="text/css" href="js/jquery/styles/jquery.spinnercontrol.css">
<script type="text/javascript" src="js/jquery/jquery-1.6.2.js"></script>
<script type="text/javascript" src="js/jquery/jquery-ui-1.8.16.custom.min.js"></script>
<script type="text/javascript" src="js/jquery/jquery.cookie.js"></script>
<script type="text/javascript" src="js/jquery/jquery.spinnercontrol.js"></script>
<script type="text/javascript" src="js/jquery/jquery.layout.js"></script>
<script type="text/javascript" src="js/jquery/jquery.touchSwipe.js"></script>
<script type="text/javascript" src="js/gemp-019/inheritance.js"></script>
<script type="text/javascript" src="js/gemp-019/common.js"></script>
<script type="text/javascript" src="js/gemp-019/logging.js"></script>
<script type="text/javascript" src="js/gemp-019/chat.js"></script>
<script type="text/javascript" src="js/gemp-019/communication.js"></script>
<script type="text/javascript" src="js/gemp-019/deliveryService.js"></script>
<script type="text/javascript" src="js/gemp-019/commonUi.js"></script>
<script type="text/javascript" src="js/gemp-019/cardFilter.js"></script>
<script type="text/javascript" src="js/gemp-019/jCardGroup.js"></script>
<script type="text/javascript" src="js/gemp-019/set20.js"></script>
<script type="text/javascript" src="js/gemp-019/jCards.js"></script>
<script type="text/javascript" src="js/gemp-019/hallUi.js"></script>
<script type="text/javascript" src="js/gemp-019/leagueResultsUi.js"></script>
<script type="text/javascript" src="js/gemp-019/tournamentResultsUi.js"></script>
<script type="text/javascript" src="js/gemp-019/statsUi.js"></script>
<script type="text/javascript" src="js/gemp-019/playerStatsUi.js"></script>
<script type="text/javascript" src="js/gemp-019/gameHistoryUi.js"></script>
<script type="text/javascript" src="js/gemp-019/deckBuildingUi.js"></script>
<script type="text/javascript" src="js/gemp-019/gameUi.js"></script>
<script type="text/javascript" src="js/gemp-019/gameAnimations.js"></script>
<script type="text/javascript" src="js/gemp-019/merchantUi.js"></script>
<script type="text/javascript">
function submitFormToAddress(url, formElem, success, error) {
var data = {};
var inputs = $("input[type='text'], option:selected", formElem).each(
function () {
var input = $(this);
var name = null;
var value = null;
if (input.prop("tagName") == "INPUT") {
name = input.attr("name");
value = input.val();
} else if (input.prop("tagName") == "OPTION") {
name = input.parents("select").attr("name");
value = input.attr("value");
}
if (name != null && value != null) {
if (data[name] == null)
data[name] = new Array();
data[name].push(value);
}
});
$.ajax({
type:"POST",
url:url,
cache:false,
data:data,
traditional:true,
success:success,
error:error,
dataType:"xml"
});
}
$(document).ready(
function () {
var actionSuccess = function () {
alert("Operation was successful");
};
var actionFailure = function (xhr) {
var status = xhr.status;
if (status == 404)
alert("Specified resource (player, league) does not exist. Check the spelling and try again.");
else
alert("Unknown error. Status code - "+status);
};
var displayUsers = function (xml) {
var root = xml.documentElement;
if (root.tagName == 'players') {
var playersDiv = $("#displayUsers");
playersDiv.html("");
playersDiv.append("Similar players:");
var table = $("<table></table>");
table.append("<tr><th>Id</th><th>Name</th><th>Password (hash)</th><th>Create IP</th><th>Login IP</th><th>User status</th></tr>");
var players = root.getElementsByTagName("player");
for (var j=0; j<players.length; j++) {
var player = players[j];
var id=player.getAttribute("id");
var name=player.getAttribute("name");
var password = player.getAttribute("password");
var createIp = player.getAttribute("createIp");
var loginIp = player.getAttribute("loginIp");
var status = player.getAttribute("status");
table.append("<tr><td>"+id+"</td><td>"+name+"</td><td>"+password+"</td><td>"+createIp+"</td><td>"+loginIp+"</td><td>"+status+"</td></tr>");
}
playersDiv.append(table);
}
};
$("#banUser").click(
function() {
submitFormToAddress("/gemp-lotr-server/admin/banUser", $("#banUserForm").eq(0), actionSuccess, actionFailure);
});
$("#banUserTemp").click(
function() {
submitFormToAddress("/gemp-lotr-server/admin/banUserTemp", $("#banUserTempForm").eq(0), actionSuccess, actionFailure);
});
$("#unBanUser").click(
function() {
submitFormToAddress("/gemp-lotr-server/admin/unBanUser", $("#unBanUserForm").eq(0), actionSuccess, actionFailure);
});
$("findMultipleAccounts").click(
function() {
submitFormToAddress("/gemp-lotr-server/admin/findMultipleAccounts", $("#findMultipleAccountsForm").eq(0), displayUsers, actionFailure);
});
});
</script>
</head>
<body>
<h1>Ban user</h1>
<h2>Permanently</h2>
<form id="banUserForm" method="POST" action="/gemp-lotr-server/admin/banUser">
Name (case-sensitive): <input type="text" name="login"><br/>
<input id="banUser" type="button" value="Ban user permanently">
</form>
<h2>Temporarily</h2>
<form id="banUserTempForm" method="POST" action="/gemp-lotr-server/admin/banUserTemp">
Name (case-sensitive): <input type="text" name="login"><br/>
Duration:
<select name="duration">
<option value="1">1 day</option>
<option value="3">3 days</option>
<option value="7">7 days</option>
<option value="14">14 days</option>
<option value="30">30 days</option>
</select><br/>
<input id="banUserTemp" type="button" value="Ban user temporarily">
</form>
<h1>Unban user</h1>
<form id="unBanUserForm" method="POST" action="/gemp-lotr-server/admin/unBanUser">
Name (case-sensitive): <input type="text" name="login"><br/>
<input id="unBanUser" type="button" value="Unban user">
</form>
<h1>Find suspicious behaviour</h1>
<h2>Multiple user accounts</h2>
<form id="findMultipleAccountsForm" method="POST" action="/gemp-lotr-server/admin/findMultipleAccounts">
Name (case-sensitive): <input type="text" name="login"><br/>
<input id="findMultipleAccounts" type="button" value="Find similar accounts">
</form>
<div id="displayUsers"></div>
</body>
</html>

View File

@@ -117,9 +117,13 @@
loginScreen();
},
"403": function() {
$(".error").html("You have been banned. If you think it was a mistake, please write an e-mail to <a href='mailto:marcins78@gmail.com>marcins78@gmail.com</a>");
$(".error").html("You have been permanently banned. If you think it was a mistake you can try sending a private message to CoS on <a href='http://lotrtcgwiki.com/forums/'>TLHH forums</a>.");
$(".interaction").html("");
},
"409": function() {
$(".error").html("You have been temporarily banned. You can try logging in at a later time. If you think it was a mistake you can try sending a private message to CoS on <a href='http://lotrtcgwiki.com/forums/'>TLHH forums</a>.");
$(".interaction").html("");
}
"503": function() {
$(".error").html("Server is down for maintenance. Please come at a later time.");
}

View File

@@ -1,16 +1,26 @@
package com.gempukku.lotro.game;
import java.util.Date;
public class Player {
private int _id;
private String _name;
private String _password;
private String _type;
private Integer _lastLoginReward;
private Date _bannedUntil;
private String _createIp;
private String _lastIp;
public Player(int id, String name, String type, Integer lastLoginReward) {
public Player(int id, String name, String password, String type, Integer lastLoginReward, Date bannedUntil, String createIp, String lastIp) {
_id = id;
_name = name;
_password = password;
_type = type;
_lastLoginReward = lastLoginReward;
_bannedUntil = bannedUntil;
_createIp = createIp;
_lastIp = lastIp;
}
public int getId() {
@@ -21,6 +31,10 @@ public class Player {
return _name;
}
public String getPassword() {
return _password;
}
public String getType() {
return _type;
}
@@ -33,6 +47,18 @@ public class Player {
_lastLoginReward = lastLoginReward;
}
public Date getBannedUntil() {
return _bannedUntil;
}
public String getCreateIp() {
return _createIp;
}
public String getLastIp() {
return _lastIp;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;

View File

@@ -6,6 +6,7 @@ import org.apache.commons.collections.map.LRUMap;
import java.sql.SQLException;
import java.util.Collections;
import java.util.List;
import java.util.Map;
public class CachedPlayerDAO implements PlayerDAO, Cached {
@@ -28,6 +29,35 @@ public class CachedPlayerDAO implements PlayerDAO, Cached {
return _playerById.size() + _playerByName.size();
}
@Override
public boolean banPlayerPermanently(String login) throws SQLException {
final boolean success = _delegate.banPlayerPermanently(login);
if (success)
clearCache();
return success;
}
@Override
public boolean banPlayerTemporarily(String login, long dateTo) throws SQLException {
final boolean success = _delegate.banPlayerTemporarily(login, dateTo);
if (success)
clearCache();
return success;
}
@Override
public boolean unBanPlayer(String login) throws SQLException {
final boolean success = _delegate.unBanPlayer(login);
if (success)
clearCache();
return success;
}
@Override
public List<Player> findSimilarAccounts(String login) throws SQLException {
return _delegate.findSimilarAccounts(login);
}
@Override
public Player getPlayer(int id) {
Player player = (Player) _playerById.get(id);

View File

@@ -7,9 +7,13 @@ import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
public class DbPlayerDAO implements PlayerDAO {
private final String validLoginChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_";
private final String _selectPlayer = "select id, name, password, type, last_login_reward, banned_until, create_ip, last_ip from player";
private DbAccess _dbAccess;
@@ -17,42 +21,128 @@ public class DbPlayerDAO implements PlayerDAO {
_dbAccess = dbAccess;
}
public synchronized Player getPlayer(int id) {
@Override
public Player getPlayer(int id) {
try {
final Player player = getPlayerFromDBById(id);
return player;
return getPlayerFromDBById(id);
} catch (SQLException exp) {
throw new RuntimeException("Error while retrieving player", exp);
}
}
public synchronized Player getPlayer(String playerName) {
@Override
public Player getPlayer(String playerName) {
try {
Player player = getPlayerFromDBByName(playerName);
return player;
return getPlayerFromDBByName(playerName);
} catch (SQLException exp) {
throw new RuntimeException("Unable to get player from DB", exp);
}
}
public synchronized Player loginUser(String login, String password) throws SQLException {
@Override
public List<Player> findSimilarAccounts(String login) throws SQLException {
final Player player = getPlayerFromDBByName(login);
if (player == null)
return null;
Connection conn = _dbAccess.getDataSource().getConnection();
try {
PreparedStatement statement = conn.prepareStatement("select id, name, type, last_login_reward from player where name=? and password=?");
String sql = _selectPlayer + " where password=?";
if (player.getCreateIp() != null)
sql += " or create_ip=? or last_ip=?";
if (player.getLastIp() != null)
sql += " or create_ip=? or last_ip=?";
PreparedStatement statement = conn.prepareStatement(sql);
try {
statement.setString(1, player.getPassword());
int nextParamIndex = 2;
if (player.getCreateIp() != null) {
statement.setString(nextParamIndex, player.getCreateIp());
nextParamIndex++;
}
if (player.getLastIp() != null) {
statement.setString(nextParamIndex, player.getLastIp());
nextParamIndex++;
}
ResultSet rs = statement.executeQuery();
try {
List<Player> players = new LinkedList<Player>();
while (rs.next())
players.add(getPlayerFromResultSet(rs));
return players;
} finally {
rs.close();
}
} finally {
statement.close();
}
} finally {
conn.close();
}
}
@Override
public boolean banPlayerPermanently(String login) throws SQLException {
Connection conn = _dbAccess.getDataSource().getConnection();
try {
PreparedStatement statement = conn.prepareStatement("update player set type='' where name=?");
try {
statement.setString(1, login);
return statement.executeUpdate() == 1;
} finally {
statement.close();
}
} finally {
conn.close();
}
}
@Override
public boolean banPlayerTemporarily(String login, long dateTo) throws SQLException {
Connection conn = _dbAccess.getDataSource().getConnection();
try {
PreparedStatement statement = conn.prepareStatement("update player set banned_until=? where name=?");
try {
statement.setLong(1, dateTo);
statement.setString(2, login);
return statement.executeUpdate() == 1;
} finally {
statement.close();
}
} finally {
conn.close();
}
}
@Override
public boolean unBanPlayer(String login) throws SQLException {
Connection conn = _dbAccess.getDataSource().getConnection();
try {
PreparedStatement statement = conn.prepareStatement("update player set type='un', banned_until=null where name=?");
try {
statement.setString(1, login);
return statement.executeUpdate() == 1;
} finally {
statement.close();
}
} finally {
conn.close();
}
}
@Override
public Player loginUser(String login, String password) throws SQLException {
Connection conn = _dbAccess.getDataSource().getConnection();
try {
PreparedStatement statement = conn.prepareStatement(_selectPlayer + " where name=? and password=?");
try {
statement.setString(1, login);
statement.setString(2, encodePassword(password));
ResultSet rs = statement.executeQuery();
try {
if (rs.next()) {
int id = rs.getInt(1);
String name = rs.getString(2);
String type = rs.getString(3);
Integer lastLoginReward = rs.getInt(4);
if (rs.wasNull())
lastLoginReward = null;
return new Player(id, name, type, lastLoginReward);
return getPlayerFromResultSet(rs);
} else
return null;
} finally {
@@ -66,7 +156,29 @@ public class DbPlayerDAO implements PlayerDAO {
}
}
public synchronized void setLastReward(Player player, int currentReward) throws SQLException {
private Player getPlayerFromResultSet(ResultSet rs) throws SQLException {
int id = rs.getInt(1);
String name = rs.getString(2);
String password = rs.getString(3);
String type = rs.getString(4);
Integer lastLoginReward = rs.getInt(5);
if (rs.wasNull())
lastLoginReward = null;
Long bannedUntilLong = rs.getLong(6);
if (rs.wasNull())
bannedUntilLong = null;
Date bannedUntil = null;
if (bannedUntilLong != null)
bannedUntil = new Date(bannedUntilLong);
String createIp = rs.getString(7);
String lastIp = rs.getString(8);
return new Player(id, name, password, type, lastLoginReward, bannedUntil, createIp, lastIp);
}
@Override
public void setLastReward(Player player, int currentReward) throws SQLException {
Connection conn = _dbAccess.getDataSource().getConnection();
try {
PreparedStatement statement = conn.prepareStatement("update player set last_login_reward =? where id=?");
@@ -83,6 +195,7 @@ public class DbPlayerDAO implements PlayerDAO {
}
}
@Override
public synchronized boolean updateLastReward(Player player, int previousReward, int currentReward) throws SQLException {
Connection conn = _dbAccess.getDataSource().getConnection();
try {
@@ -104,6 +217,7 @@ public class DbPlayerDAO implements PlayerDAO {
}
}
@Override
public synchronized boolean registerUser(String login, String password, String remoteAddr) throws SQLException, LoginInvalidException {
boolean result = validateLogin(login);
if (!result)
@@ -186,19 +300,13 @@ public class DbPlayerDAO implements PlayerDAO {
private Player getPlayerFromDBById(int id) throws SQLException {
Connection conn = _dbAccess.getDataSource().getConnection();
try {
PreparedStatement statement = conn.prepareStatement("select id, name, type, last_login_reward from player where id=?");
PreparedStatement statement = conn.prepareStatement(_selectPlayer + " where id=?");
try {
statement.setInt(1, id);
ResultSet rs = statement.executeQuery();
try {
if (rs.next()) {
String name = rs.getString(2);
String type = rs.getString(3);
Integer lastLoginReward = rs.getInt(4);
if (rs.wasNull())
lastLoginReward = null;
return new Player(id, name, type, lastLoginReward);
return getPlayerFromResultSet(rs);
} else {
return null;
}
@@ -216,20 +324,13 @@ public class DbPlayerDAO implements PlayerDAO {
private Player getPlayerFromDBByName(String playerName) throws SQLException {
Connection conn = _dbAccess.getDataSource().getConnection();
try {
PreparedStatement statement = conn.prepareStatement("select id, name, type, last_login_reward from player where name=?");
PreparedStatement statement = conn.prepareStatement(_selectPlayer + " where name=?");
try {
statement.setString(1, playerName);
ResultSet rs = statement.executeQuery();
try {
if (rs.next()) {
int id = rs.getInt(1);
String name = rs.getString(2);
String type = rs.getString(3);
Integer lastLoginReward = rs.getInt(4);
if (rs.wasNull())
lastLoginReward = null;
return new Player(id, name, type, lastLoginReward);
return getPlayerFromResultSet(rs);
} else {
return null;
}
@@ -244,6 +345,7 @@ public class DbPlayerDAO implements PlayerDAO {
}
}
@Override
public void updateLastLoginIp(String login, String remoteAddr) throws SQLException {
Connection conn = _dbAccess.getDataSource().getConnection();
try {

View File

@@ -3,12 +3,21 @@ package com.gempukku.lotro.db;
import com.gempukku.lotro.game.Player;
import java.sql.SQLException;
import java.util.List;
public interface PlayerDAO {
public Player getPlayer(int id);
public Player getPlayer(String playerName);
public boolean banPlayerPermanently(String login) throws SQLException;
public boolean banPlayerTemporarily(String login, long dateTo) throws SQLException;
public boolean unBanPlayer(String login) throws SQLException;
public List<Player> findSimilarAccounts(String login) throws SQLException;
public Player loginUser(String login, String password) throws SQLException;
public void setLastReward(Player player, int currentReward) throws SQLException;