69 lines
3.4 KiB
Plaintext
69 lines
3.4 KiB
Plaintext
package org.rscdaemon.ls.packethandler.loginserver;
|
|
|
|
import org.rscdaemon.ls.packethandler.PacketHandler;
|
|
import org.rscdaemon.ls.Server;
|
|
import org.rscdaemon.ls.model.World;
|
|
import org.rscdaemon.ls.net.LSPacket;
|
|
import org.rscdaemon.ls.net.Packet;
|
|
import org.rscdaemon.ls.util.DataConversions;
|
|
import org.rscdaemon.ls.packetbuilder.loginserver.ReplyPacketBuilder;
|
|
|
|
import org.apache.mina.common.IoSession;
|
|
|
|
import java.sql.ResultSet;
|
|
|
|
public class BanHandler implements PacketHandler {
|
|
private ReplyPacketBuilder builder = new ReplyPacketBuilder();
|
|
|
|
public void handlePacket(Packet p, IoSession session) throws Exception {
|
|
final long uID = ((LSPacket)p).getUID();
|
|
boolean banned = ((LSPacket)p).getID() == 4;
|
|
long user = p.readLong();
|
|
long modhash = p.readLong();
|
|
|
|
ResultSet result = Server.db.getQuery("SELECT u.group_id, p.playermod, p.owner FROM `users` AS u INNER JOIN `rscd_players` AS p ON p.owner=u.id WHERE p.user=" + user);
|
|
if(!result.next()) {
|
|
builder.setSuccess(false);
|
|
builder.setReply("There is not an account by that username");
|
|
}
|
|
else if(banned && (result.getInt("group_id") < 3 || result.getInt("playermod") == 1)) {
|
|
builder.setSuccess(false);
|
|
builder.setReply("You cannot ban a (p)mod or admin!");
|
|
}
|
|
else if(Server.db.updateQuery("UPDATE `rscd_players` SET `banned`='" + (banned ? "1" : "0") + "' WHERE `user` LIKE '" + user + "'") == 0) {
|
|
builder.setSuccess(false);
|
|
builder.setReply("There is not an account by that username");
|
|
}
|
|
else {
|
|
World w = Server.getServer().findWorld(user);
|
|
if(w != null) {
|
|
w.getActionSender().logoutUser(user);
|
|
}
|
|
if(banned) {
|
|
String owner = result.getString("owner");
|
|
Server.db.updateQuery("INSERT `rscd_banlog` VALUES('" + user + "','" + modhash + "','" + (System.currentTimeMillis() / 1000) + "')");
|
|
ResultSet result2 = Server.db.getQuery("SELECT username FROM `users` WHERE id=" + owner);
|
|
|
|
String username = result2.getString("username");
|
|
Server.db.updateQuery("INSERT `topics` (poster, subject, posted, last_post, last_poster, forum_id) VALUES('" + username + "','[" + DataConversions.hashToUsername(user) + "] Banned by [" + DataConversions.hashToUsername(modhash) + "]','" + (System.currentTimeMillis() / 1000) + "','" + (System.currentTimeMillis() / 1000) + "','" + username + "','19')");
|
|
ResultSet result3 = Server.db.getQuery("SELECT LAST_INSERT_ID()");
|
|
String tid = result3.getString(1);
|
|
Server.db.updateQuery("INSERT `posts` (poster, poster_ip, poster_email, message, hide_smilies, posted, topic_id) VALUES('" + username + "','0.0.0.0','null@null.org', This thread will close in 24h, post in here if you are the account owner.','1','" + (System.currentTimeMillis() / 1000) + "','" + tid + "')");
|
|
ResultSet result4 = Server.db.getQuery("SELECT LAST_INSERT_ID()");
|
|
String pid = result4.getString(1);
|
|
Server.db.updateQuery("UPDATE `posts` SET last_post_id=`" + pid + "` WHERE id=`" + tid + "`");
|
|
}
|
|
builder.setSuccess(true);
|
|
builder.setReply(DataConversions.hashToUsername(user) + " has been " + (banned ? "banned" : "unbanned"));
|
|
}
|
|
builder.setUID(uID);
|
|
|
|
LSPacket temp = builder.getPacket();
|
|
if(temp != null) {
|
|
session.write(temp);
|
|
}
|
|
|
|
}
|
|
|
|
}
|