Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package tttservmina.net.handlers;
- import java.sql.Connection;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import tttserv.database.DatabaseConnection;
- import tttserv.database.DatabaseException;
- import tttservmina.net.Server;
- import tttservmina.tools.data.input.SeekableLittleEndianAccessor;
- import tttservmina.player.FlashClient;
- import tttservmina.player.FlashPlayer;
- import tttservmina.tools.FlashPacketCreator;
- import tttservmina.tools.StringUtil;
- public class LoginHandler implements PacketHandler {
- String username = "";
- String password = "";
- int user_id;
- byte level;
- byte status;
- byte banType = 0;
- public void handlePacket(SeekableLittleEndianAccessor slea, FlashClient c) {
- /*
- * Order of Operations:
- * 1. Check version #
- * 2. Check if user is real (vbapi)
- * 2.5 Check if user is already logged in
- * 3. Check if user is banned (us)
- * 4. Check if user's IP is banned (us)
- * 5. Get people's stats and finish login
- */
- // Stage 1
- String loginid;
- int uid;
- String version;
- try {
- username = slea.readFlashAsciiString().replaceAll(" ", "");
- password = StringUtil.md5(slea.readFlashAsciiString(), "UTF-8");
- version = slea.readFlashAsciiString();
- } catch (Exception e) {
- c.getSession().close();
- return;
- }
- // VER CHECK
- if (!version.equals(Server.getServer().getVersion())) {
- c.getSession().write(FlashPacketCreator.loginResponse((byte) 3));
- c.getSession().close();
- }
- // Database login here
- Connection con = DatabaseConnection.getConnection();
- try {
- PreparedStatement ps = con.prepareStatement("SELECT id, level FROM users WHERE username = ? AND password = ?");
- ps.setString(1, username);
- ps.setString(2, password);
- ResultSet rs = ps.executeQuery();
- if (rs.next()) {
- level = rs.getByte("level");
- uid = rs.getInt("id");
- } else {
- c.getSession().write(FlashPacketCreator.loginResponse((byte)0x00));
- return;
- }
- } catch (Exception e) {
- c.getSession().write(FlashPacketCreator.loginResponse((byte)0x01));
- return;
- }
- // Stage 1.5
- FlashPlayer uBn = Server.getServer().getPlayerStorage().getPlayerByName(username);
- if (uBn != null) {
- c.getSession().write(FlashPacketCreator.loginResponse((byte) 2));
- return;
- }
- int am = 0;
- for (FlashPlayer uBi : Server.getServer().getPlayerStorage().getPlayersByIP(c.getSession().getRemoteAddress().toString().split(":")[0])) {
- am++;
- }
- if (am > 0) {
- c.getSession().write(FlashPacketCreator.loginResponse((byte) 2));
- return;
- }
- // Stage 2
- String guy_who_banned = null;
- String ban_reason = null;
- long time_when_ban_ends = 0;
- try {
- PreparedStatement ps = con.prepareStatement("SELECT banner, reason, expires FROM bans WHERE username = ?");
- ps.setString(1, username);
- ResultSet rs = ps.executeQuery();
- if (rs.next()) {
- banType = 1;
- guy_who_banned = rs.getString("banner");
- ban_reason = rs.getString("reason");
- time_when_ban_ends = rs.getLong("expires");
- }
- ps.close();
- } catch (SQLException e) {
- c.getSession().write(FlashPacketCreator.loginResponse((byte) 0x01));
- return;
- }
- //Stage 3
- try {
- PreparedStatement ps = con.prepareStatement("SELECT banner, reason, expires FROM ipbans WHERE ip = ?");
- String ip = c.getSession().getRemoteAddress().toString().replace("/", "").split(":")[0];
- ps.setString(1, ip);
- ResultSet rs = ps.executeQuery();
- if (rs.next()) {
- banType = 2;
- guy_who_banned = rs.getString("banner");
- ban_reason = rs.getString("reason");
- time_when_ban_ends = rs.getLong("expires");
- }
- ps.close();
- } catch (SQLException e) {
- c.getSession().write(FlashPacketCreator.loginResponse((byte) 0x01));
- return;
- }
- if (System.currentTimeMillis() < time_when_ban_ends) {
- if (time_when_ban_ends < Long.MAX_VALUE) {
- c.getSession().write(FlashPacketCreator.loginResponse(guy_who_banned, ban_reason, time_when_ban_ends));
- } else {
- c.getSession().write(FlashPacketCreator.loginResponse(guy_who_banned, ban_reason));
- }
- return;
- } else {
- if (banType == 2) {
- String ip = c.getSession().getRemoteAddress().toString().replace("/", "").split(":")[0];
- try {
- PreparedStatement ps = con.prepareStatement("DELETE FROM `ipbans` WHERE ip = ?");
- ps.setString(1, ip);
- ps.executeUpdate();
- } catch (SQLException e) {System.out.println(e.getLocalizedMessage());}
- } else if (banType == 1) {
- try {
- PreparedStatement ps = con.prepareStatement("DELETE FROM `bans` WHERE username = ?");
- ps.setString(1, username);
- ps.executeUpdate();
- } catch (SQLException e) {System.out.println(e.getLocalizedMessage());}
- }
- }
- // Stage 4
- FlashPlayer player;
- try {
- player = FlashPlayer.loadFromDatabase(c, uid, level, username);
- } catch (DatabaseException e) {
- player = null;
- c.getSession().write(FlashPacketCreator.loginResponse((byte) 3));
- return;
- }
- if (player == null) {
- c.getSession().write(FlashPacketCreator.loginResponse((byte) 3));
- return;
- }
- c.setPlayer(player);
- c.getSession().write(FlashPacketCreator.loginResponse(player.getStats().getUserLevel(), player.getStats().getUserId(), Server.getServer().getPlayers(), Server.getServer().getGames()));
- Server.getServer().getPlayerStorage().addPlayer(player);
- Server.getServer().getRoomManager().getLobby().addObserver(player);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement