Skip to content

Commit

Permalink
refactor: use db for whitelist check (#141)
Browse files Browse the repository at this point in the history
## About The Pull Request

Use db on whitelist check

## Why It's Good For The Game

No manual updating whitelist
  • Loading branch information
Gaxeer committed Apr 19, 2024
1 parent ceb5f4a commit 7540440
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 61 deletions.
3 changes: 0 additions & 3 deletions modular_bandastation/whitelist220/_whitelist220.dm
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,3 @@
name = "Whitelist220"
desc = "Использование вайтлиста через БД"
author = "larentoun"

/datum/modpack/whitelist220/pre_initialize()
GLOB.admin_verbs_server |= /client/proc/update_whitelist
81 changes: 23 additions & 58 deletions modular_bandastation/whitelist220/code/whitelist220.dm
Original file line number Diff line number Diff line change
Expand Up @@ -2,74 +2,39 @@
default = FALSE
protection = CONFIG_ENTRY_LOCKED

/datum/controller/subsystem/dbcore/Initialize()
. = ..()
if(CONFIG_GET(flag/whitelist220))
load_whitelist220()

/world/IsBanned(key, address, computer_id, type, real_bans_only)
. = ..()
if(.)
return .

if(!CONFIG_GET(flag/whitelist220))
return null
var/ckey = ckey(key)
if(ckey && !(ckey in GLOB.whitelist))
return list("reason"="whitelist", "desc"="\nПричина: Вас ([key]) нет в вайтлисте этого сервера. Приобрести доступ возможно у одного из стримеров Банды за баллы канала или записаться самостоятельно с помощью команды в дискорде, доступной сабам бусти, начиная со второго тира.")

/client/proc/update_whitelist()
set name = "Update whitelist"
set category = "Server"

if(!check_rights(R_SERVER))
return

load_whitelist220()

/proc/load_whitelist220()
if(IsAdminAdvancedProcCall())
to_chat(usr, span_boldannounce("Whitelist reload blocked: Advanced ProcCall detected"))
return

if(!SSdbcore.IsConnected())
return

GLOB.whitelist = list()

var/datum/db_query/whitelist_query = SSdbcore.NewQuery({"
SELECT ckey FROM ckey_whitelist WHERE
is_valid=1 AND port=:port AND date_start<=NOW() AND
(NOW()<date_end OR date_end IS NULL)
"}, list("port" = "[world.port]"))
if(!whitelist_query.warn_execute())
qdel(whitelist_query)
return

while(whitelist_query.NextRow())
var/ckey = whitelist_query.item[1]
GLOB.whitelist |= ckey

qdel(whitelist_query)

/mob/new_player/Login()
if(CONFIG_GET(flag/whitelist220) && !(ckey in GLOB.whitelist))
check_whitelist220()
. = ..()
var/ckey = ckey(key)
var/deny_message = list(
"reason"="whitelist",
"desc"="\nПричина: Вас ([key]) нет в вайтлисте этого сервера. Приобрести доступ возможно у одного из стримеров Банды за баллы канала или записаться самостоятельно с помощью команды в дискорде, доступной сабам бусти, начиная со второго тира.")

if(!ckey || !SSdbcore.IsConnected())
return deny_message

var/datum/db_query/whitelist_query = SSdbcore.NewQuery(
{"
SELECT ckey FROM ckey_whitelist WHERE ckey=:ckey AND
is_valid=1 AND port=:port AND date_start<=NOW() AND
(date_end IS NULL OR NOW()<date_end)
"},
list("ckey" = ckey, "port" = "[world.port]")
)

/mob/new_player/proc/check_whitelist220()
if(!SSdbcore.IsConnected())
return
var/datum/db_query/whitelist_query = SSdbcore.NewQuery({"
SELECT ckey FROM ckey_whitelist WHERE ckey=:ckey AND
is_valid=1 AND port=:port AND date_start<=NOW() AND
(NOW()<date_end OR date_end IS NULL)
"}, list("ckey" = ckey, "port" = "[world.port]"))
if(!whitelist_query.warn_execute())
qdel(whitelist_query)
return
return deny_message

while(whitelist_query.NextRow())
var/ckey = whitelist_query.item[1]
GLOB.whitelist |= ckey

if(whitelist_query.item[1])
qdel(whitelist_query)
return null

qdel(whitelist_query)
return deny_message

0 comments on commit 7540440

Please sign in to comment.