From 6c65780c366e2367af2e583b9ac76bffccc6609e Mon Sep 17 00:00:00 2001 From: Jordie <4343468+Jordie0608@users.noreply.github.com> Date: Thu, 7 Mar 2019 21:03:09 +1100 Subject: [PATCH] fix some faulty last conn logic (#42984) --- code/modules/admin/sql_ban_system.dm | 44 ++++++++++++++++++---------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/code/modules/admin/sql_ban_system.dm b/code/modules/admin/sql_ban_system.dm index 439ed283ba1..4257940b7eb 100644 --- a/code/modules/admin/sql_ban_system.dm +++ b/code/modules/admin/sql_ban_system.dm @@ -286,7 +286,9 @@ return var/list/error_state = list() var/player_key + var/ip_check = FALSE var/player_ip + var/cid_check = FALSE var/player_cid var/use_last_connection = FALSE var/applies_to_admins = FALSE @@ -308,20 +310,26 @@ player_key = href_list["keytext"] if(!player_key) error_state += "Key was ticked but none was provided." + if(href_list["ipcheck"]) + ip_check = TRUE + if(href_list["cidcheck"]) + cid_check = TRUE if(href_list["lastconn"]) if(player_key) use_last_connection = TRUE else - if(href_list["ipcheck"]) - player_ip = href_list["iptext"] || "" + if(ip_check) + player_ip = href_list["iptext"] if(!player_ip && !use_last_connection) error_state += "IP was ticked but none was provided." - if(href_list["cidcheck"]) - player_cid = href_list["cidtext"] || "" + if(cid_check) + player_cid = href_list["cidtext"] if(!player_cid && !use_last_connection) error_state += "CID was ticked but none was provided." if(!use_last_connection && !player_ip && !player_cid && !player_key) error_state += "At least a key, IP or CID must be provided." + if(use_last_connection && !ip_check && !cid_check) + error_state += "Use last connection was ticked, but neither IP nor CID was." if(href_list["applyadmins"]) applies_to_admins = TRUE switch(href_list["radioduration"]) @@ -383,11 +391,11 @@ to_chat(usr, "Ban not [edit_id ? "edited" : "created"] because the following errors were present:\n[error_state.Join("\n")]") return if(edit_id) - edit_ban(edit_id, player_key, player_ip, player_cid, use_last_connection, applies_to_admins, duration, interval, reason, mirror_edit, old_key, old_ip, old_cid, old_applies, page, admin_key, changes) + edit_ban(edit_id, player_key, ip_check, player_ip, cid_check, player_cid, use_last_connection, applies_to_admins, duration, interval, reason, mirror_edit, old_key, old_ip, old_cid, old_applies, page, admin_key, changes) else - create_ban(player_key, player_ip, player_cid, use_last_connection, applies_to_admins, duration, interval, severity, reason, roles_to_ban) + create_ban(player_key, ip_check, player_ip, cid_check, player_cid, use_last_connection, applies_to_admins, duration, interval, severity, reason, roles_to_ban) -/datum/admins/proc/create_ban(player_key, player_ip, player_cid, use_last_connection, applies_to_admins, duration, interval, severity, reason, list/roles_to_ban) +/datum/admins/proc/create_ban(player_key, ip_check, player_ip, cid_check, player_cid, use_last_connection, applies_to_admins, duration, interval, severity, reason, list/roles_to_ban) if(!check_rights(R_BAN)) return if(!SSdbcore.Connect()) @@ -404,9 +412,9 @@ if(query_create_ban_get_player.NextRow()) player_key = query_create_ban_get_player.item[1] if(use_last_connection) - if (!isnull(player_ip)) + if(ip_check) player_ip = query_create_ban_get_player.item[2] - if (!isnull(player_cid)) + if(cid_check) player_cid = query_create_ban_get_player.item[3] else if(use_last_connection) @@ -634,7 +642,7 @@ to_chat(i, "[usr.client.key] has removed a ban from [role] for your IP or CID.") unban_panel(player_key, admin_key, player_ip, player_cid, page) -/datum/admins/proc/edit_ban(ban_id, player_key, player_ip, player_cid, use_last_connection, applies_to_admins, duration, interval, reason, mirror_edit, old_key, old_ip, old_cid, old_applies, admin_key, page, list/changes) +/datum/admins/proc/edit_ban(ban_id, player_key, ip_check, player_ip, cid_check, player_cid, use_last_connection, applies_to_admins, duration, interval, reason, mirror_edit, old_key, old_ip, old_cid, old_applies, admin_key, page, list/changes) if(!check_rights(R_BAN)) return if(!SSdbcore.Connect()) @@ -654,13 +662,19 @@ player_key = query_edit_ban_get_player.item[1] bantime = query_edit_ban_get_player.item[2] if(use_last_connection) - player_ip = query_edit_ban_get_player.item[3] - player_cid = query_edit_ban_get_player.item[4] + if(ip_check) + player_ip = query_edit_ban_get_player.item[3] + if(cid_check) + player_cid = query_edit_ban_get_player.item[4] else if(use_last_connection) - to_chat(usr, "Ban not edited. [player_key]/([player_ckey]) hasn't been seen before, unable to use IP and CID from last connection.") - qdel(query_edit_ban_get_player) - return + if(alert(usr, "[player_key]/([player_ckey]) has not been seen before, unable to use IP and CID from last connection. Are you sure you want to edit a ban for them?", "Unknown key", "Yes", "No", "Cancel") != "Yes") + qdel(query_edit_ban_get_player) + return + else + if(alert(usr, "[player_key]/([player_ckey]) has not been seen before, are you sure you want to edit a ban for them?", "Unknown key", "Yes", "No", "Cancel") != "Yes") + qdel(query_edit_ban_get_player) + return qdel(query_edit_ban_get_player) if(applies_to_admins && (applies_to_admins != old_applies)) var/admin_ckey = sanitizeSQL(usr.client.ckey)