mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 18:22:39 +00:00
Error found by Cadyn. We're using a database to keep track of admins, so we are using the database system, but the database system does not load from the admin_ranks file, so no admin ranks are being loaded at all. Decided to move it out of the legacy system if statement and just force it to load before deciding if its legacy or database.
176 lines
5.5 KiB
Plaintext
176 lines
5.5 KiB
Plaintext
var/list/admin_ranks = list() //list of all ranks with associated rights
|
|
|
|
//load our rank - > rights associations
|
|
/proc/load_admin_ranks()
|
|
admin_ranks.Cut()
|
|
|
|
var/previous_rights = 0
|
|
|
|
//Clear profile access
|
|
for(var/A in world.GetConfig("admin"))
|
|
world.SetConfig("APP/admin", A, null)
|
|
|
|
//load text from file
|
|
var/list/Lines = file2list("config/admin_ranks.txt")
|
|
|
|
//process each line seperately
|
|
for(var/line in Lines)
|
|
if(!length(line)) continue
|
|
if(copytext(line,1,2) == "#") continue
|
|
|
|
var/list/List = splittext(line,"+")
|
|
if(!List.len) continue
|
|
|
|
var/rank = ckeyEx(List[1])
|
|
switch(rank)
|
|
if(null,"") continue
|
|
if("Removed") continue //Reserved
|
|
|
|
var/rights = 0
|
|
for(var/i=2, i<=List.len, i++)
|
|
switch(ckey(List[i]))
|
|
if("@","prev") rights |= previous_rights
|
|
if("buildmode","build") rights |= R_BUILDMODE
|
|
if("admin") rights |= R_ADMIN
|
|
if("ban") rights |= R_BAN
|
|
if("fun") rights |= R_FUN
|
|
if("server") rights |= R_SERVER
|
|
if("debug") rights |= R_DEBUG
|
|
if("permissions","rights") rights |= R_PERMISSIONS
|
|
if("possess") rights |= R_POSSESS
|
|
if("stealth") rights |= R_STEALTH
|
|
if("rejuv","rejuvinate") rights |= R_REJUVINATE
|
|
if("varedit") rights |= R_VAREDIT
|
|
if("everything","host","all") rights |= (R_HOST | R_BUILDMODE | R_ADMIN | R_BAN | R_FUN | R_SERVER | R_DEBUG | R_PERMISSIONS | R_POSSESS | R_STEALTH | R_REJUVINATE | R_VAREDIT | R_SOUNDS | R_SPAWN | R_MOD| R_EVENT)
|
|
if("sound","sounds") rights |= R_SOUNDS
|
|
if("spawn","create") rights |= R_SPAWN
|
|
if("mod") rights |= R_MOD
|
|
if("event") rights |= R_EVENT
|
|
|
|
admin_ranks[rank] = rights
|
|
previous_rights = rights
|
|
|
|
#ifdef TESTING
|
|
var/msg = "Permission Sets Built:\n"
|
|
for(var/rank in admin_ranks)
|
|
msg += "\t[rank] - [admin_ranks[rank]]\n"
|
|
testing(msg)
|
|
#endif
|
|
|
|
/hook/startup/proc/loadAdmins()
|
|
load_admins()
|
|
return 1
|
|
|
|
/proc/load_admins()
|
|
//clear the datums references
|
|
admin_datums.Cut()
|
|
for(var/client/C in GLOB.admins)
|
|
C.remove_admin_verbs()
|
|
C.holder = null
|
|
GLOB.admins.Cut()
|
|
load_admin_ranks() //CHOMP Edit: moved this from "f(config.admin_legacy_system)" and put it here instead, literally just moved it 3 lines.
|
|
|
|
if(config.admin_legacy_system)
|
|
//Clear profile access
|
|
for(var/A in world.GetConfig("admin"))
|
|
world.SetConfig("APP/admin", A, null)
|
|
|
|
//load text from file
|
|
var/list/Lines = file2list("config/admins.txt")
|
|
|
|
//process each line seperately
|
|
for(var/line in Lines)
|
|
if(!length(line)) continue
|
|
if(copytext(line,1,2) == "#") continue
|
|
|
|
//Split the line at every "-"
|
|
var/list/List = splittext(line, "-")
|
|
if(!List.len) continue
|
|
|
|
//ckey is before the first "-"
|
|
var/ckey = ckey(List[1])
|
|
if(!ckey) continue
|
|
|
|
//rank follows the first "-"
|
|
var/rank = ""
|
|
if(List.len >= 2)
|
|
rank = ckeyEx(List[2])
|
|
|
|
//load permissions associated with this rank
|
|
var/rights = admin_ranks[rank]
|
|
|
|
//create the admin datum and store it for later use
|
|
var/datum/admins/D = new /datum/admins(rank, rights, ckey)
|
|
|
|
if(D.rights & R_DEBUG) //grant profile access
|
|
world.SetConfig("APP/admin", ckey, "role=admin")
|
|
|
|
//find the client for a ckey if they are connected and associate them with the new admin datum
|
|
D.associate(GLOB.directory[ckey])
|
|
|
|
else
|
|
//The current admin system uses SQL
|
|
|
|
establish_db_connection()
|
|
if(!SSdbcore.IsConnected()) //CHOMPEdit TGSQL
|
|
error("Failed to connect to database in load_admins(). Reverting to legacy system.")
|
|
log_misc("Failed to connect to database in load_admins(). Reverting to legacy system.")
|
|
config.admin_legacy_system = 1
|
|
load_admins()
|
|
return
|
|
|
|
var/DBQuery/query = SSdbcore.NewQuery("SELECT ckey, rank, level, flags FROM erro_admin") //CHOMPEdit TGSQL
|
|
query.Execute()
|
|
while(query.NextRow())
|
|
var/ckey = query.item[1]
|
|
var/rank = query.item[2]
|
|
if(rank == "Removed") continue //This person was de-adminned. They are only in the admin list for archive purposes.
|
|
|
|
var/rights = query.item[4]
|
|
if(istext(rights)) rights = text2num(rights)
|
|
var/datum/admins/D = new /datum/admins(rank, rights, ckey)
|
|
|
|
if(D.rights & R_DEBUG) //grant profile access
|
|
world.SetConfig("APP/admin", ckey, "role=admin")
|
|
|
|
//find the client for a ckey if they are connected and associate them with the new admin datum
|
|
D.associate(GLOB.directory[ckey])
|
|
qdel(query) //CHOMPEdit TGSQL
|
|
if(!admin_datums)
|
|
error("The database query in load_admins() resulted in no admins being added to the list. Reverting to legacy system.")
|
|
log_misc("The database query in load_admins() resulted in no admins being added to the list. Reverting to legacy system.")
|
|
config.admin_legacy_system = 1
|
|
load_admins()
|
|
return
|
|
|
|
#ifdef TESTING
|
|
var/msg = "Admins Built:\n"
|
|
for(var/ckey in admin_datums)
|
|
var/rank
|
|
var/datum/admins/D = admin_datums[ckey]
|
|
if(D) rank = D.rank
|
|
msg += "\t[ckey] - [rank]\n"
|
|
testing(msg)
|
|
#endif
|
|
|
|
|
|
#ifdef TESTING
|
|
/client/verb/changerank(newrank in admin_ranks)
|
|
if(holder)
|
|
holder.rank = newrank
|
|
holder.rights = admin_ranks[newrank]
|
|
else
|
|
holder = new /datum/admins(newrank,admin_ranks[newrank],ckey)
|
|
remove_admin_verbs()
|
|
holder.associate(src)
|
|
|
|
/client/verb/changerights(newrights as num)
|
|
if(holder)
|
|
holder.rights = newrights
|
|
else
|
|
holder = new /datum/admins("testing",newrights,ckey)
|
|
remove_admin_verbs()
|
|
holder.associate(src)
|
|
|
|
#endif
|