mirror of
https://github.com/fulpstation/fulpstation.git
synced 2025-12-10 10:01:40 +00:00
Adds a proc to check if the current thread is from an admin advanced proc call (#26191)
* Admin proc call guards * Adds a db warning * Better this way * leftover * )= * Fix * Wew * Better runtime handling * Make callback use it if var_edited
This commit is contained in:
committed by
duncathan salt
parent
d4f72b49dd
commit
6a9fa3d35a
@@ -78,6 +78,8 @@
|
||||
calling_arguments = calling_arguments + args //not += so that it creates a new list so the arguments list stays clean
|
||||
else
|
||||
calling_arguments = args
|
||||
if(var_edited)
|
||||
return WrapAdminProcCall(object, delegate, calling_arguments)
|
||||
if (object == GLOBAL_PROC)
|
||||
return call(delegate)(arglist(calling_arguments))
|
||||
return call(object, delegate)(arglist(calling_arguments))
|
||||
@@ -93,6 +95,8 @@
|
||||
calling_arguments = calling_arguments + args //not += so that it creates a new list so the arguments list stays clean
|
||||
else
|
||||
calling_arguments = args
|
||||
if(var_edited)
|
||||
return WrapAdminProcCall(object, delegate, calling_arguments)
|
||||
if (object == GLOBAL_PROC)
|
||||
return call(delegate)(arglist(calling_arguments))
|
||||
return call(object, delegate)(arglist(calling_arguments))
|
||||
|
||||
@@ -179,12 +179,12 @@
|
||||
|
||||
/proc/SDQL_callproc_global(procname,args_list)
|
||||
set waitfor = FALSE
|
||||
call(procname)(arglist(args_list))
|
||||
WrapAdminProcCall(GLOBAL_PROC, procname, args_list)
|
||||
|
||||
/proc/SDQL_callproc(thing, procname, args_list)
|
||||
set waitfor = FALSE
|
||||
if(hascall(thing, procname))
|
||||
call(thing, procname)(arglist(args_list))
|
||||
WrapAdminProcCall(thing, procname, args_list)
|
||||
|
||||
/proc/SDQL_parse(list/query_list)
|
||||
var/datum/SDQL_parser/parser = new()
|
||||
@@ -479,8 +479,8 @@
|
||||
new_args += SDQL_expression(source, arg)
|
||||
if(object == world) // Global proc.
|
||||
procname = "/proc/[procname]"
|
||||
return call(procname)(arglist(new_args))
|
||||
return call(object, procname)(arglist(new_args)) // Spawn in case the function sleeps.
|
||||
return WrapAdminProcCall(GLOBAL_PROC, procname, new_args)
|
||||
return WrapAdminProcCall(object, procname, new_args)
|
||||
|
||||
/proc/SDQL2_tokenize(query_text)
|
||||
|
||||
|
||||
@@ -70,17 +70,39 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
return
|
||||
log_admin("[key_name(src)] called [target]'s [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].")
|
||||
message_admins("[key_name(src)] called [target]'s [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].")
|
||||
returnval = call(target,procname)(arglist(lst)) // Pass the lst as an argument list to the proc
|
||||
returnval = WrapAdminProcCall(target, procname, lst) // Pass the lst as an argument list to the proc
|
||||
else
|
||||
//this currently has no hascall protection. wasn't able to get it working.
|
||||
log_admin("[key_name(src)] called [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].")
|
||||
message_admins("[key_name(src)] called [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].")
|
||||
returnval = call(procname)(arglist(lst)) // Pass the lst as an argument list to the proc
|
||||
returnval = WrapAdminProcCall(GLOBAL_PROC, procname, lst) // Pass the lst as an argument list to the proc
|
||||
. = get_callproc_returnval(returnval, procname)
|
||||
if(.)
|
||||
to_chat(usr, .)
|
||||
feedback_add_details("admin_verb","Advanced ProcCall") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
GLOBAL_VAR_INIT(AdminProcCall, null)
|
||||
GLOBAL_PROTECT(AdminProcCall)
|
||||
|
||||
/proc/WrapAdminProcCall(target, procname, list/arguments)
|
||||
if(GLOB.AdminProcCall)
|
||||
to_chat(usr, "<span class='adminnotice'>Another admin called proc is still running, your proc will be run after theirs finishes</span>")
|
||||
UNTIL(!GLOB.AdminProcCall)
|
||||
to_chat(usr, "<span class='adminnotice'>Running your proc</span>")
|
||||
GLOB.AdminProcCall = usr.client.ckey //if this runtimes, too bad for you
|
||||
world.WrapAdminProcCall(target, procname, arguments)
|
||||
GLOB.AdminProcCall = null
|
||||
|
||||
//adv proc call this, ya nerds
|
||||
/world/proc/WrapAdminProcCall(target, procname, list/arguments)
|
||||
if(target == GLOBAL_PROC)
|
||||
return call(procname)(arglist(arguments))
|
||||
else
|
||||
return call(procname)(arglist(arguments))
|
||||
|
||||
/proc/IsAdminAdvancedProcCall()
|
||||
return usr && usr.client && GLOB.AdminProcCall == usr.client.ckey
|
||||
|
||||
/client/proc/callproc_datum(datum/A as null|area|mob|obj|turf)
|
||||
set category = "Debug"
|
||||
set name = "Atom ProcCall"
|
||||
@@ -106,7 +128,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
message_admins("[key_name(src)] called [A]'s [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].")
|
||||
feedback_add_details("admin_verb","Atom ProcCall") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
var/returnval = call(A,procname)(arglist(lst)) // Pass the lst as an argument list to the proc
|
||||
var/returnval = WrapAdminProcCall(A, procname, lst) // Pass the lst as an argument list to the proc
|
||||
. = get_callproc_returnval(returnval,procname)
|
||||
if(.)
|
||||
to_chat(usr, .)
|
||||
|
||||
@@ -99,7 +99,10 @@ DBConnection/proc/SelectDB(database_name,dbi)
|
||||
if(IsConnected()) Disconnect()
|
||||
//return Connect("[dbi?"[dbi]":"dbi:mysql:[database_name]:[DB_SERVER]:[DB_PORT]"]",user,password)
|
||||
return Connect("[dbi?"[dbi]":"dbi:mysql:[database_name]:[global.sqladdress]:[global.sqlport]"]",user,password)
|
||||
DBConnection/proc/NewQuery(sql_query,cursor_handler=src.default_cursor) return new/DBQuery(sql_query,src,cursor_handler)
|
||||
DBConnection/proc/NewQuery(sql_query,cursor_handler=src.default_cursor)
|
||||
if(IsAdminAdvancedProcCall())
|
||||
log_admin_private("WARNING: Advanced admin proc call DB query created!: [sql_query]")
|
||||
return new/DBQuery(sql_query,src,cursor_handler)
|
||||
|
||||
|
||||
DBQuery/New(sql_query,DBConnection/connection_handler,cursor_handler)
|
||||
|
||||
Reference in New Issue
Block a user