From 49e46eea5bc879bd2d6917c58f68216f95b3e23b Mon Sep 17 00:00:00 2001 From: Jordie Date: Fri, 4 May 2018 20:14:35 +1000 Subject: [PATCH 1/3] Some dbadmin fixes --- SQL/admin_import_2018-02-03.py | 10 ++- code/modules/admin/admin_ranks.dm | 2 +- code/modules/admin/permissionedit.dm | 113 +++++++++++++++++++++++++++ code/modules/admin/topic.dm | 4 +- 4 files changed, 124 insertions(+), 5 deletions(-) diff --git a/SQL/admin_import_2018-02-03.py b/SQL/admin_import_2018-02-03.py index 19efc2fc44..6bd8892b5e 100644 --- a/SQL/admin_import_2018-02-03.py +++ b/SQL/admin_import_2018-02-03.py @@ -18,6 +18,7 @@ import MySQLdb import argparse import re import sys +import string def parse_text_flags(text, previous): flag_values = {"BUILDMODE":1, "BUILD":1, "ADMIN":2, "REJUVINATE":2, "REJUV":2, "BAN":4, "FUN":8, "SERVER":16, "DEBUG":32, "POSSESS":64, "PERMISSIONS":128, "RIGHTS":128, "STEALTH":256, "POLL":512, "VAREDIT":1024, "SOUNDS":2048, "SOUND":2048, "SPAWN":4096, "CREATE":4096, "AUTOLOGIN":8192, "AUTOADMIN":8192, "DBRANKS":16384} @@ -70,6 +71,7 @@ db=MySQLdb.connect(host=args.address, user=args.username, passwd=args.password, cursor=db.cursor() ranks_table = args.rankstable admin_table = args.admintable +ckeyExformat = re.sub("@|-|_", " ", string.punctuation) with open("..\\config\\admin_ranks.txt") as rank_file: previous = 0 for line in rank_file: @@ -77,17 +79,21 @@ with open("..\\config\\admin_ranks.txt") as rank_file: if line.startswith("#"): continue matches = re.match("(.+)\\b\\s+=\\s*(.*)", line) + rank = "".join((c for c in matches.group(1) if c not in ckeyExformat)) flags = parse_text_flags(matches.group(2), previous) previous = flags - cursor.execute("INSERT INTO {0} (rank, flags, exclude_flags, can_edit_flags) VALUES ('{1}', {2}, {3}, {4})".format(ranks_table, matches.group(1), flags[0], flags[1], flags[2])) + cursor.execute("INSERT INTO {0} (rank, flags, exclude_flags, can_edit_flags) VALUES ('{1}', {2}, {3}, {4})".format(ranks_table, rank, flags[0], flags[1], flags[2])) with open("..\\config\\admins.txt") as admins_file: previous = 0 + ckeyformat = string.punctuation.replace("@", " ") for line in admins_file: if line.strip(): if line.startswith("#"): continue matches = re.match("(.+)\\b\\s+=\\s+(.+)", line) - cursor.execute("INSERT INTO {0} (ckey, rank) VALUES ('{1}', '{2}')".format(admin_table, matches.group(1).lower(), matches.group(2))) + ckey = "".join((c for c in matches.group(1) if c not in ckeyformat)).lower() + rank = "".join((c for c in matches.group(2) if c not in ckeyExformat)) + cursor.execute("INSERT INTO {0} (ckey, rank) VALUES ('{1}', '{2}')".format(admin_table, ckey, rank)) db.commit() cursor.close() print("Import complete.") diff --git a/code/modules/admin/admin_ranks.dm b/code/modules/admin/admin_ranks.dm index dee4787753..eee3ff0edc 100644 --- a/code/modules/admin/admin_ranks.dm +++ b/code/modules/admin/admin_ranks.dm @@ -156,7 +156,7 @@ GLOBAL_PROTECT(protected_ranks) else while(query_load_admin_ranks.NextRow()) var/skip - var/rank_name = query_load_admin_ranks.item[1] + var/rank_name = ckeyEx(query_load_admin_ranks.item[1]) for(var/datum/admin_rank/R in GLOB.admin_ranks) if(R.name == rank_name) //this rank was already loaded from txt override skip = 1 diff --git a/code/modules/admin/permissionedit.dm b/code/modules/admin/permissionedit.dm index f7bb770079..961c20e1c9 100644 --- a/code/modules/admin/permissionedit.dm +++ b/code/modules/admin/permissionedit.dm @@ -9,6 +9,7 @@ /datum/admins/proc/edit_admin_permissions() if(!check_rights(R_PERMISSIONS)) return +<<<<<<< HEAD var/list/output = list({" @@ -56,6 +57,108 @@ "} usr << browse(jointext(output, ""),"window=editrights;size=1000x650") +======= + var/list/output = list("\[Permissions\]") + if(action) + output += " | \[Log\] | \[Management\]
" + else + output += "
\[Log\]
\[Management\]" + if(action == 1) + var/list/searchlist = list(" WHERE ") + if(target) + searchlist += "ckey = '[sanitizeSQL(target)]'" + if(operation) + if(target) + searchlist += " AND " + searchlist += "operation = '[sanitizeSQL(operation)]'" + var/search + if(searchlist.len > 1) + search = searchlist.Join("") + var/logcount = 0 + var/logssperpage = 20 + var/pagecount = 0 + page = text2num(page) + var/datum/DBQuery/query_count_admin_logs = SSdbcore.NewQuery("SELECT COUNT(id) FROM [format_table_name("admin_log")][search]") + if(!query_count_admin_logs.warn_execute()) + return + if(query_count_admin_logs.NextRow()) + logcount = text2num(query_count_admin_logs.item[1]) + if(logcount > logssperpage) + output += "
Page: " + while(logcount > 0) + output += "|[pagecount == page ? "\[[pagecount]\]" : "\[[pagecount]\]"]" + logcount -= logssperpage + pagecount++ + output += "|" + var/limit = " LIMIT [logssperpage * page], [logssperpage]" + var/datum/DBQuery/query_search_admin_logs = SSdbcore.NewQuery("SELECT datetime, round_id, adminckey, operation, target, log FROM [format_table_name("admin_log")][search] ORDER BY datetime DESC[limit]") + if(!query_search_admin_logs.warn_execute()) + return + while(query_search_admin_logs.NextRow()) + var/datetime = query_search_admin_logs.item[1] + var/round_id = query_search_admin_logs.item[2] + var/admin_ckey = query_search_admin_logs.item[3] + operation = query_search_admin_logs.item[4] + target = query_search_admin_logs.item[5] + var/log = query_search_admin_logs.item[6] + output += "

[datetime] | Round ID [round_id] | Admin [admin_ckey] | Operation [operation] on [target]
[log]


" + if(action == 2) + output += "

Admin ckeys with invalid ranks

" + var/datum/DBQuery/query_check_admin_errors = SSdbcore.NewQuery("SELECT ckey, [format_table_name("admin")].rank FROM [format_table_name("admin")] LEFT JOIN [format_table_name("admin_ranks")] ON [format_table_name("admin_ranks")].rank = [format_table_name("admin")].rank WHERE [format_table_name("admin_ranks")].rank IS NULL") + if(!query_check_admin_errors.warn_execute()) + return + while(query_check_admin_errors.NextRow()) + var/admin_ckey = query_check_admin_errors.item[1] + var/admin_rank = query_check_admin_errors.item[2] + output += "[admin_ckey] has non-existant rank [admin_rank] | \[Change Rank\] | \[Remove\]" + output += "
" + output += "

Unused ranks

" + var/datum/DBQuery/query_check_unused_rank = SSdbcore.NewQuery("SELECT [format_table_name("admin_ranks")].rank, flags, exclude_flags, can_edit_flags FROM [format_table_name("admin_ranks")] LEFT JOIN [format_table_name("admin")] ON [format_table_name("admin")].rank = [format_table_name("admin_ranks")].rank WHERE [format_table_name("admin")].rank IS NULL") + if(!query_check_unused_rank.warn_execute()) + return + while(query_check_unused_rank.NextRow()) + var/admin_rank = query_check_unused_rank.item[1] + output += {"Rank [admin_rank] is not held by any admin | \[Remove\] +
Permissions: [rights2text(text2num(query_check_unused_rank.item[2])," ")] +
Denied: [rights2text(text2num(query_check_unused_rank.item[3])," ", "-")] +
Allowed to edit: [rights2text(text2num(query_check_unused_rank.item[4])," ", "*")] +
"} + else if(!action) + output += {" + Permissions Panel + + + +
+ + + + + + + + "} + for(var/adm_ckey in GLOB.admin_datums+GLOB.deadmins) + var/datum/admins/D = GLOB.admin_datums[adm_ckey] + if(!D) + D = GLOB.deadmins[adm_ckey] + if (!D) + continue + var/deadminlink = "" + if (D.deadmined) + deadminlink = " \[RA\]" + else + deadminlink = " \[DA\]" + output += "" + output += "" + output += "" + output += "" + output += "" + output += "" + output += "" + output += "
CKEY \[+\]RANKPERMISSIONSDENIEDALLOWED TO EDIT
[adm_ckey]
[deadminlink]\[-\]\[SYNC TGDB\]
[D.rank.name][rights2text(D.rank.include_rights," ")][rights2text(D.rank.exclude_rights," ", "-")][rights2text(D.rank.can_edit_rights," ", "*")]
Search:
" + usr << browse("[jointext(output, "")]","window=editrights;size=1000x650") +>>>>>>> e44298a... some dbadmin fixes (#37623) /datum/admins/proc/edit_rights_topic(list/href_list) if(!check_rights(R_PERMISSIONS)) @@ -142,6 +245,16 @@ return FALSE if(use_db) . = sanitizeSQL(.) +<<<<<<< HEAD +======= + //if an admin exists without a datum they won't be caught by the above + var/datum/DBQuery/query_admin_in_db = SSdbcore.NewQuery("SELECT 1 FROM [format_table_name("admin")] WHERE ckey = '[.]'") + if(!query_admin_in_db.warn_execute()) + return FALSE + if(query_admin_in_db.NextRow()) + to_chat(usr, "[.] already listed in admin database. Check the Management tab if they don't appear in the list of admins.") + return FALSE +>>>>>>> e44298a... some dbadmin fixes (#37623) var/datum/DBQuery/query_add_admin = SSdbcore.NewQuery("INSERT INTO [format_table_name("admin")] (ckey, rank) VALUES ('[.]', 'NEW ADMIN')") if(!query_add_admin.warn_execute()) return FALSE diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 95dae05c09..2fb35e9c45 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -821,8 +821,8 @@ var/isbanned_dept = jobban_isbanned(M, ROLE_SYNDICATE) dat += "" dat += "" - dat += "Conversion Antagonists" + dat += "Team Antagonists | " + dat += "Conversion Antagonists" //Traitor if(jobban_isbanned(M, ROLE_TRAITOR) || isbanned_dept) From d5a4387c80e0350929a7abbffc9cc1f556f37f88 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Sun, 20 May 2018 02:35:48 -0500 Subject: [PATCH 2/3] Update permissionedit.dm --- code/modules/admin/permissionedit.dm | 50 ---------------------------- 1 file changed, 50 deletions(-) diff --git a/code/modules/admin/permissionedit.dm b/code/modules/admin/permissionedit.dm index 961c20e1c9..2bee4e70db 100644 --- a/code/modules/admin/permissionedit.dm +++ b/code/modules/admin/permissionedit.dm @@ -9,55 +9,6 @@ /datum/admins/proc/edit_admin_permissions() if(!check_rights(R_PERMISSIONS)) return -<<<<<<< HEAD - - var/list/output = list({" - - -Permissions Panel - - - - -
Antagonist Positions | " - dat += "Team Antagonists
- - - - - - - -"}) - - for(var/adm_ckey in GLOB.admin_datums+GLOB.deadmins) - var/datum/admins/D = GLOB.admin_datums[adm_ckey] - if(!D) - D = GLOB.deadmins[adm_ckey] - if (!D) - continue - - var/deadminlink = "" - if (D.deadmined) - deadminlink = " \[RA\]" - else - deadminlink = " \[DA\]" - - output += "" - output += "" - output += "" - output += "" - output += "" - output += "" - output += "" - - output += {" -
CKEY \[+\]RANKPERMISSIONSDENIEDALLOWED TO EDIT
[adm_ckey]
[deadminlink]\[-\]\[SYNC TGDB\]
[D.rank.name][rights2text(D.rank.include_rights," ")][rights2text(D.rank.exclude_rights," ", "-")][rights2text(D.rank.can_edit_rights," ", "*")]
-
Search:
- -"} - - usr << browse(jointext(output, ""),"window=editrights;size=1000x650") -======= var/list/output = list("\[Permissions\]") if(action) output += " | \[Log\] | \[Management\]
" @@ -158,7 +109,6 @@ output += "" output += "
Search:
" usr << browse("[jointext(output, "")]","window=editrights;size=1000x650") ->>>>>>> e44298a... some dbadmin fixes (#37623) /datum/admins/proc/edit_rights_topic(list/href_list) if(!check_rights(R_PERMISSIONS)) From 75144686a44fd342dd87f7be8c36227cab4b3ec5 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Sun, 20 May 2018 16:38:29 -0500 Subject: [PATCH 3/3] Update permissionedit.dm --- code/modules/admin/permissionedit.dm | 3 --- 1 file changed, 3 deletions(-) diff --git a/code/modules/admin/permissionedit.dm b/code/modules/admin/permissionedit.dm index 2bee4e70db..07d3fced54 100644 --- a/code/modules/admin/permissionedit.dm +++ b/code/modules/admin/permissionedit.dm @@ -195,8 +195,6 @@ return FALSE if(use_db) . = sanitizeSQL(.) -<<<<<<< HEAD -======= //if an admin exists without a datum they won't be caught by the above var/datum/DBQuery/query_admin_in_db = SSdbcore.NewQuery("SELECT 1 FROM [format_table_name("admin")] WHERE ckey = '[.]'") if(!query_admin_in_db.warn_execute()) @@ -204,7 +202,6 @@ if(query_admin_in_db.NextRow()) to_chat(usr, "[.] already listed in admin database. Check the Management tab if they don't appear in the list of admins.") return FALSE ->>>>>>> e44298a... some dbadmin fixes (#37623) var/datum/DBQuery/query_add_admin = SSdbcore.NewQuery("INSERT INTO [format_table_name("admin")] (ckey, rank) VALUES ('[.]', 'NEW ADMIN')") if(!query_add_admin.warn_execute()) return FALSE