mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-07 23:42:44 +00:00
- Standardized the database library code - Deleted a few unused database related files (karma and forum activation), so they won't get in my way later. They work off of no longer existent database tables. - Made it so the server maintains a constant connection with the database, which is established on world/New() and never broken, until the server ends. If 5 consecutive database connection attempts result in no connection getting established, the server will not attempt any more connections. Made all existing database connections use the global continuous connections. Currently we need two, as we have two databases, but the old database is going to get moved into the new one. - Fixed the spaghetti-like report in the permissions panel, which happened when someone had many permissions enabled. - Added database connection reports to display to dream daemon on server startup. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@5015 316c924e-a436-60f5-8080-3fe189b3f50e
137 lines
3.9 KiB
Plaintext
137 lines
3.9 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
|
|
|
|
//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 = text2list(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
|
|
if("sound","sounds") rights |= R_SOUNDS
|
|
if("advdebug") rights |= R_ADVDEBUG
|
|
|
|
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
|
|
|
|
|
|
/proc/load_admins()
|
|
//clear the datums references
|
|
admin_datums.Cut()
|
|
for(var/client/C in admins)
|
|
C.remove_admin_verbs()
|
|
C.holder = null
|
|
admins.Cut()
|
|
|
|
if(config.admin_legacy_system)
|
|
load_admin_ranks()
|
|
|
|
//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 = text2list(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)
|
|
|
|
//find the client for a ckey if they are connected and associate them with the new admin datum
|
|
D.associate(directory[ckey])
|
|
|
|
else
|
|
//The current admin system uses SQL
|
|
|
|
establish_db_connection()
|
|
if(!dbcon.IsConnected())
|
|
diary << "Failed to connect to database in load_admins(). Reverting to legacy system."
|
|
config.admin_legacy_system = 1
|
|
load_admins()
|
|
return
|
|
|
|
var/DBQuery/query = dbcon.NewQuery("SELECT ckey, rank, level, flags FROM erro_admin")
|
|
query.Execute()
|
|
while(query.NextRow())
|
|
var/ckey = query.item[1]
|
|
var/rank = query.item[2]
|
|
if(rank == "Removed") return //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)
|
|
|
|
//find the client for a ckey if they are connected and associate them with the new admin datum
|
|
D.associate(directory[ckey])
|
|
|
|
if(!admin_datums)
|
|
diary << "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
|
|
|
|
|