User management.
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
184
gemp-lotr/gemp-lotr-async/src/main/web/ban.html
Normal file
184
gemp-lotr/gemp-lotr-async/src/main/web/ban.html
Normal 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>
|
||||
@@ -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.");
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user