Added exemption for staff accounts in regards to daily account limit

This commit is contained in:
Byte 2022-09-12 23:32:49 +00:00 committed by Ryan
parent 5aee1e7d9c
commit bcb493a94d

View file

@ -5,6 +5,7 @@ import core.cache.crypto.ISAACPair
import core.cache.misc.buffer.ByteBufferUtils import core.cache.misc.buffer.ByteBufferUtils
import core.game.node.entity.player.Player import core.game.node.entity.player.Player
import core.game.node.entity.player.info.PlayerDetails import core.game.node.entity.player.info.PlayerDetails
import core.game.node.entity.player.info.Rights
import core.game.node.entity.player.info.UIDInfo import core.game.node.entity.player.info.UIDInfo
import core.game.node.entity.player.info.login.LoginType import core.game.node.entity.player.info.login.LoginType
import core.net.Constants import core.net.Constants
@ -21,6 +22,7 @@ import rs09.ServerStore.Companion.getList
import rs09.auth.AuthResponse import rs09.auth.AuthResponse
import rs09.game.node.entity.player.info.login.LoginParser import rs09.game.node.entity.player.info.login.LoginParser
import rs09.game.system.SystemLogger import rs09.game.system.SystemLogger
import rs09.game.system.command.Privilege
import rs09.game.world.GameWorld import rs09.game.world.GameWorld
import rs09.game.world.repository.Repository import rs09.game.world.repository.Repository
import rs09.worker.ManagementEvents import rs09.worker.ManagementEvents
@ -131,24 +133,36 @@ object Login {
Discord.postPlayerAlert(details.username, "Login from flagged IP ${details.ipAddress}") Discord.postPlayerAlert(details.username, "Login from flagged IP ${details.ipAddress}")
} }
if (checkAccountLimit(details.ipAddress, details.username)) {
val player = Player(details) val player = Player(details)
if (canBypassAccountLimitCheck(player)) {
proceedWithAcceptableLogin(session, player, opcode)
} else {
if (checkAccountLimit(details.ipAddress, details.username)) {
proceedWithAcceptableLogin(session, player, opcode)
} else {
session.write(AuthResponse.LoginLimitExceeded)
}
}
}
private fun canBypassAccountLimitCheck(player: Player): Boolean {
return player.rights == Rights.ADMINISTRATOR || player.rights == Rights.PLAYER_MODERATOR
}
private fun proceedWithAcceptableLogin(session: IoSession, player: Player, opcode: Int) {
if (Repository.getPlayerByName(player.name) == null) { if (Repository.getPlayerByName(player.name) == null) {
Repository.addPlayer(player) Repository.addPlayer(player)
} }
session.lastPing = System.currentTimeMillis() session.lastPing = System.currentTimeMillis()
try { try {
LoginParser(details, LoginType.fromType(opcode)).initialize(player, opcode == RECONNECT_LOGIN_OP) LoginParser(player.details, LoginType.fromType(opcode)).initialize(player, opcode == RECONNECT_LOGIN_OP)
sendMSEvents(details) sendMSEvents(player.details)
} catch (e: Exception) { } catch (e: Exception) {
e.printStackTrace() e.printStackTrace()
session.disconnect() session.disconnect()
Repository.removePlayer(player) Repository.removePlayer(player)
player.clear(true) player.clear(true)
} }
} else {
session.write(AuthResponse.LoginLimitExceeded)
}
} }
private fun checkAccountLimit(ipAddress: String, username: String): Boolean { private fun checkAccountLimit(ipAddress: String, username: String): Boolean {