diff --git a/code/controllers/configuration/entries/general.dm b/code/controllers/configuration/entries/general.dm
index 57c933edc5..2fe020d544 100644
--- a/code/controllers/configuration/entries/general.dm
+++ b/code/controllers/configuration/entries/general.dm
@@ -347,3 +347,5 @@
default = FALSE
/datum/config_entry/flag/dynamic_config_enabled
+
+/datum/config_entry/flag/station_name_needs_approval
diff --git a/code/game/objects/items/charter.dm b/code/game/objects/items/charter.dm
index 3f5296a1ef..e9c3842619 100644
--- a/code/game/objects/items/charter.dm
+++ b/code/game/objects/items/charter.dm
@@ -14,6 +14,7 @@
var/response_timer_id = null
var/approval_time = 600
var/allow_unicode = FALSE
+ var/admin_approved = FALSE
var/static/regex/standard_station_regex
@@ -62,8 +63,32 @@
to_chat(user, "Your name has been sent to your employers for approval.")
// Autoapproves after a certain time
- response_timer_id = addtimer(CALLBACK(src, .proc/rename_station, new_name, user.name, user.real_name, key_name(user)), approval_time, TIMER_STOPPABLE)
- to_chat(GLOB.admins, "CUSTOM STATION RENAME:[ADMIN_LOOKUPFLW(user)] proposes to rename the [name_type] to [html_encode(new_name)] (will autoapprove in [DisplayTimeText(approval_time)]). [ADMIN_SMITE(user)] (REJECT) [ADMIN_CENTCOM_REPLY(user)]")
+ var/requires_approval = CONFIG_GET(flag/station_name_needs_approval)
+ response_timer_id = addtimer(CALLBACK(src, .proc/check_state, new_name, user.name, user.real_name, key_name(user)), approval_time, TIMER_STOPPABLE)
+ to_chat(GLOB.admins, "CUSTOM STATION RENAME:[ADMIN_LOOKUPFLW(user)] proposes to rename the [name_type] to [html_encode(new_name)] ([requires_approval ? "REQUIRES ADMIN APPROVAL and will autodeny" : "will autoapprove"] in [DisplayTimeText(approval_time)]). [ADMIN_SMITE(user)] (REJECT)[requires_approval ? " (APPROVE)" : ""] [ADMIN_CENTCOM_REPLY(user)]")
+
+/obj/item/station_charter/proc/check_state(designation, uname, ureal_name, ukey)
+ var/requires_approval = CONFIG_GET(flag/station_name_needs_approval)
+ if(requires_approval && !admin_approved)
+ var/turf/T = get_turf(src)
+ T.visible_message("A note appears on [src], stating this sector requires central command approval for its station names, which was not performed in time for this request. Looks like the change has been auto-rejected.")
+ var/m = "Station rename has been autorejected due to config requiring admin approval."
+ message_admins(m)
+ log_admin(m)
+ else
+ rename_station(designation, uname, ureal_name, ukey)
+ response_timer_id = null
+ admin_approved = FALSE
+
+/obj/item/station_charter/proc/allow_pass(user)
+ if(!user)
+ return
+ if(!response_timer_id)
+ return
+ admin_approved = TRUE
+ var/m = "[key_name(user)] has approved the proposed station name. It can still be denied prior to the timer expiring."
+ message_admins(m)
+ log_admin(m)
/obj/item/station_charter/proc/reject_proposed(user)
if(!user)
@@ -80,6 +105,7 @@
deltimer(response_timer_id)
response_timer_id = null
+ admin_approved = FALSE
/obj/item/station_charter/proc/rename_station(designation, uname, ureal_name, ukey)
set_station_name(designation)
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index a8a7e51611..11270e0d96 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -2038,6 +2038,12 @@
var/obj/item/station_charter/charter = locate(href_list["reject_custom_name"])
if(istype(charter))
charter.reject_proposed(usr)
+ else if(href_list["approve_custom_name"])
+ if(!check_rights(R_ADMIN))
+ return
+ var/obj/item/station_charter/charter = locate(href_list["approve_custom_name"])
+ if(istype(charter))
+ charter.allow_pass(usr)
else if(href_list["jumpto"])
if(!isobserver(usr) && !check_rights(R_ADMIN))
return
diff --git a/config/entries/general.txt b/config/entries/general.txt
index 5fc3512c60..7fef691006 100644
--- a/config/entries/general.txt
+++ b/config/entries/general.txt
@@ -503,3 +503,6 @@ PAI_CUSTOM_HOLOFORMS
## Enables monstermos/"equalization" step in atmos.
# ATMOS_EQUALIZATION_ENABLED
+
+## Do station renames from the station charter require admin approval to pass, as opposed to autoapproving if not denied.
+STATION_NAME_NEEDS_APPROVAL