diff --git a/code/modules/admin/centcom.dm b/code/modules/admin/centcom.dm
new file mode 100644
index 00000000000..10d14f1c456
--- /dev/null
+++ b/code/modules/admin/centcom.dm
@@ -0,0 +1,100 @@
+///Gets the centcom bans of the given ckey.
+/datum/admins/proc/open_centcom_bans(ckey)
+ if(!check_rights(R_ADMIN))
+ return
+
+ if(!CONFIG_GET(string/centcom_ban_db))
+ to_chat(usr, span_warning("Centcom Galactic Ban DB is disabled!"))
+ return
+
+ // Make the request
+ var/datum/http_request/request = new()
+ request.prepare(RUSTG_HTTP_METHOD_GET, "[CONFIG_GET(string/centcom_ban_db)]/[ckey]", "", "")
+ request.begin_async()
+ UNTIL(request.is_complete() || !usr)
+ if (!usr)
+ return
+ var/datum/http_response/response = request.into_response()
+
+ var/list/bans
+
+ var/list/dat = list("
")
+
+ if(response.errored)
+ dat += " Failed to connect to CentCom."
+ else if(response.status_code != 200)
+ dat += " Failed to connect to CentCom. Status code: [response.status_code]"
+ else
+ if(response.body == "[]")
+ dat += "
0 bans detected for [ckey]
"
+ else
+ bans = json_decode(response.body)
+
+ //Ignore bans from non-whitelisted sources, if a whitelist exists
+ var/list/valid_sources
+ if(CONFIG_GET(string/centcom_source_whitelist))
+ valid_sources = splittext(CONFIG_GET(string/centcom_source_whitelist), ",")
+ dat += "
Bans detected for [ckey]
"
+ else
+ //Ban count is potentially inaccurate if they're using a whitelist
+ dat += "
[bans.len] ban\s detected for [ckey]
"
+
+ for(var/list/ban in bans)
+ if(valid_sources && !(ban["sourceName"] in valid_sources))
+ continue
+ dat += "Server: [sanitize(ban["sourceName"])] "
+ dat += "RP Level: [sanitize(ban["sourceRoleplayLevel"])] "
+ dat += "Type: [sanitize(ban["type"])] "
+ dat += "Banned By: [sanitize(ban["bannedBy"])] "
+ dat += "Reason: [sanitize(ban["reason"])] "
+ dat += "Datetime: [sanitize(ban["bannedOn"])] "
+ var/expiration = ban["expires"]
+ dat += "Expires: [expiration ? "[sanitize(expiration)]" : "Permanent"] "
+ if(ban["type"] == "job")
+ dat += "Jobs: "
+ var/list/jobs = ban["jobs"]
+ dat += sanitize(jobs.Join(", "))
+ dat += " "
+ dat += ""
+
+ dat += " "
+ var/datum/browser/popup = new(usr, "centcomlookup-[ckey]", "
Central Command Galactic Ban Database
", 700, 600)
+ popup.set_content(dat.Join())
+ popup.open(0)
+
+///Returns the amount of permabans they have on centcom.
+/datum/admins/proc/check_centcom_permabans(ckey)
+ if(!check_rights(R_ADMIN))
+ return
+
+ if(!CONFIG_GET(string/centcom_ban_db))
+ to_chat(usr, span_warning("Centcom Galactic Ban DB is disabled!"))
+ return
+
+ // Make the request
+ var/datum/http_request/request = new()
+ request.prepare(RUSTG_HTTP_METHOD_GET, "[CONFIG_GET(string/centcom_ban_db)]/[ckey]", "", "")
+ request.begin_async()
+ UNTIL(request.is_complete() || !usr)
+ if (!usr)
+ return
+ var/datum/http_response/response = request.into_response()
+
+ var/list/bans
+ var/total_permabans
+
+ if(response.body == "[]")
+ return
+ bans = json_decode(response.body)
+ //Ignore bans from non-whitelisted sources, if a whitelist exists
+ var/list/valid_sources
+ if(CONFIG_GET(string/centcom_source_whitelist))
+ valid_sources = splittext(CONFIG_GET(string/centcom_source_whitelist), ",")
+
+ for(var/list/ban in bans)
+ if(valid_sources && !(ban["sourceName"] in valid_sources))
+ continue
+ if(!ban["expires"] && (sanitize(ban["type"]) == "Server")) //server permabans only
+ total_permabans++
+
+ return total_permabans
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 776382d4043..e394994d2aa 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -1442,66 +1442,7 @@
if(!check_rights(R_ADMIN))
return
- if(!CONFIG_GET(string/centcom_ban_db))
- to_chat(usr, span_warning("Centcom Galactic Ban DB is disabled!"))
- return
-
- var/ckey = href_list["centcomlookup"]
-
- // Make the request
- var/datum/http_request/request = new()
- request.prepare(RUSTG_HTTP_METHOD_GET, "[CONFIG_GET(string/centcom_ban_db)]/[ckey]", "", "")
- request.begin_async()
- UNTIL(request.is_complete() || !usr)
- if (!usr)
- return
- var/datum/http_response/response = request.into_response()
-
- var/list/bans
-
- var/list/dat = list("")
-
- if(response.errored)
- dat += " Failed to connect to CentCom."
- else if(response.status_code != 200)
- dat += " Failed to connect to CentCom. Status code: [response.status_code]"
- else
- if(response.body == "[]")
- dat += "
0 bans detected for [ckey]
"
- else
- bans = json_decode(response.body)
-
- //Ignore bans from non-whitelisted sources, if a whitelist exists
- var/list/valid_sources
- if(CONFIG_GET(string/centcom_source_whitelist))
- valid_sources = splittext(CONFIG_GET(string/centcom_source_whitelist), ",")
- dat += "
Bans detected for [ckey]
"
- else
- //Ban count is potentially inaccurate if they're using a whitelist
- dat += "
[bans.len] ban\s detected for [ckey]
"
-
- for(var/list/ban in bans)
- if(valid_sources && !(ban["sourceName"] in valid_sources))
- continue
- dat += "Server: [sanitize(ban["sourceName"])] "
- dat += "RP Level: [sanitize(ban["sourceRoleplayLevel"])] "
- dat += "Type: [sanitize(ban["type"])] "
- dat += "Banned By: [sanitize(ban["bannedBy"])] "
- dat += "Reason: [sanitize(ban["reason"])] "
- dat += "Datetime: [sanitize(ban["bannedOn"])] "
- var/expiration = ban["expires"]
- dat += "Expires: [expiration ? "[sanitize(expiration)]" : "Permanent"] "
- if(ban["type"] == "job")
- dat += "Jobs: "
- var/list/jobs = ban["jobs"]
- dat += sanitize(jobs.Join(", "))
- dat += " "
- dat += ""
-
- dat += " "
- var/datum/browser/popup = new(usr, "centcomlookup-[ckey]", "