mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2025-12-26 01:52:15 +00:00
This implements UDP Logging with GELF. It will allow full text search over all the logs and attributes sent over GELF to the log server.
230 lines
6.3 KiB
Plaintext
230 lines
6.3 KiB
Plaintext
var/CMinutes = null
|
|
var/savefile/Banlist
|
|
|
|
|
|
/proc/CheckBan(var/ckey, var/id, var/address)
|
|
if(!Banlist) // if Banlist cannot be located for some reason
|
|
LoadBans() // try to load the bans
|
|
if(!Banlist) // uh oh, can't find bans!
|
|
return 0 // ABORT ABORT ABORT
|
|
|
|
. = list()
|
|
var/appeal
|
|
if(config && config.banappeals)
|
|
appeal = "\nFor more information on your ban, or to appeal, head to <a href='[config.banappeals]'>[config.banappeals]</a>"
|
|
Banlist.cd = "/base"
|
|
if( "[ckey][id]" in Banlist.dir )
|
|
Banlist.cd = "[ckey][id]"
|
|
if (Banlist["temp"])
|
|
if (!GetExp(Banlist["minutes"]))
|
|
ClearTempbans()
|
|
return 0
|
|
else
|
|
.["desc"] = "\nReason: [Banlist["reason"]]\nExpires: [GetExp(Banlist["minutes"])]\nBy: [Banlist["bannedby"]][appeal]"
|
|
else
|
|
Banlist.cd = "/base/[ckey][id]"
|
|
.["desc"] = "\nReason: [Banlist["reason"]]\nExpires: <B>PERMENANT</B>\nBy: [Banlist["bannedby"]][appeal]"
|
|
.["reason"] = "ckey/id"
|
|
return .
|
|
else
|
|
for (var/A in Banlist.dir)
|
|
Banlist.cd = "/base/[A]"
|
|
var/matches
|
|
if( ckey == Banlist["key"] )
|
|
matches += "ckey"
|
|
if( id == Banlist["id"] )
|
|
if(matches)
|
|
matches += "/"
|
|
matches += "id"
|
|
if( address == Banlist["ip"] )
|
|
if(matches)
|
|
matches += "/"
|
|
matches += "ip"
|
|
|
|
if(matches)
|
|
if(Banlist["temp"])
|
|
if (!GetExp(Banlist["minutes"]))
|
|
ClearTempbans()
|
|
return 0
|
|
else
|
|
.["desc"] = "\nReason: [Banlist["reason"]]\nExpires: [GetExp(Banlist["minutes"])]\nBy: [Banlist["bannedby"]][appeal]"
|
|
else
|
|
.["desc"] = "\nReason: [Banlist["reason"]]\nExpires: <B>PERMENANT</B>\nBy: [Banlist["bannedby"]][appeal]"
|
|
.["reason"] = matches
|
|
return .
|
|
return 0
|
|
|
|
/proc/UpdateTime() //No idea why i made this a proc.
|
|
CMinutes = (world.realtime / 10) / 60
|
|
return 1
|
|
|
|
/hook/startup/proc/loadBans()
|
|
return LoadBans()
|
|
|
|
/proc/LoadBans()
|
|
|
|
Banlist = new("data/banlist.bdb")
|
|
log_admin("Loading Banlist")
|
|
|
|
if (!length(Banlist.dir)) log_admin("Banlist is empty.")
|
|
|
|
if (!Banlist.dir.Find("base"))
|
|
log_admin("Banlist missing base dir.")
|
|
Banlist.dir.Add("base")
|
|
Banlist.cd = "/base"
|
|
else if (Banlist.dir.Find("base"))
|
|
Banlist.cd = "/base"
|
|
|
|
ClearTempbans()
|
|
return 1
|
|
|
|
/proc/ClearTempbans()
|
|
UpdateTime()
|
|
|
|
Banlist.cd = "/base"
|
|
for (var/A in Banlist.dir)
|
|
Banlist.cd = "/base/[A]"
|
|
if (!Banlist["key"] || !Banlist["id"])
|
|
RemoveBan(A)
|
|
log_admin("Invalid Ban.")
|
|
message_admins("Invalid Ban.")
|
|
continue
|
|
|
|
if (!Banlist["temp"]) continue
|
|
if (CMinutes >= Banlist["minutes"]) RemoveBan(A)
|
|
|
|
return 1
|
|
|
|
|
|
/proc/AddBan(ckey, computerid, reason, bannedby, temp, minutes, address)
|
|
|
|
var/bantimestamp
|
|
|
|
if (temp)
|
|
UpdateTime()
|
|
bantimestamp = CMinutes + minutes
|
|
|
|
Banlist.cd = "/base"
|
|
if ( Banlist.dir.Find("[ckey][computerid]") )
|
|
usr << text("\red Ban already exists.")
|
|
return 0
|
|
else
|
|
Banlist.dir.Add("[ckey][computerid]")
|
|
Banlist.cd = "/base/[ckey][computerid]"
|
|
Banlist["key"] << ckey
|
|
Banlist["id"] << computerid
|
|
Banlist["ip"] << address
|
|
Banlist["reason"] << reason
|
|
Banlist["bannedby"] << bannedby
|
|
Banlist["temp"] << temp
|
|
if (temp)
|
|
Banlist["minutes"] << bantimestamp
|
|
return 1
|
|
|
|
/proc/RemoveBan(foldername)
|
|
var/key
|
|
var/id
|
|
|
|
Banlist.cd = "/base/[foldername]"
|
|
Banlist["key"] >> key
|
|
Banlist["id"] >> id
|
|
Banlist.cd = "/base"
|
|
|
|
if (!Banlist.dir.Remove(foldername)) return 0
|
|
|
|
if(!usr)
|
|
log_admin("Ban Expired: [key]",ckey=key)
|
|
message_admins("Ban Expired: [key]")
|
|
else
|
|
ban_unban_log_save("[key_name_admin(usr)] unbanned [key]")
|
|
log_admin("[key_name_admin(usr)] unbanned [key]",admin_key=key_name(usr),ckey=key)
|
|
message_admins("[key_name_admin(usr)] unbanned: [key]")
|
|
feedback_inc("ban_unban",1)
|
|
usr.client.holder.DB_ban_unban( ckey(key), BANTYPE_ANY_FULLBAN)
|
|
for (var/A in Banlist.dir)
|
|
Banlist.cd = "/base/[A]"
|
|
if (key == Banlist["key"] /*|| id == Banlist["id"]*/)
|
|
Banlist.cd = "/base"
|
|
Banlist.dir.Remove(A)
|
|
continue
|
|
|
|
return 1
|
|
|
|
/proc/GetExp(minutes as num)
|
|
UpdateTime()
|
|
var/exp = minutes - CMinutes
|
|
if (exp <= 0)
|
|
return 0
|
|
else
|
|
var/timeleftstring
|
|
if (exp >= 1440) //1440 = 1 day in minutes
|
|
timeleftstring = "[round(exp / 1440, 0.1)] Days"
|
|
else if (exp >= 60) //60 = 1 hour in minutes
|
|
timeleftstring = "[round(exp / 60, 0.1)] Hours"
|
|
else
|
|
timeleftstring = "[exp] Minutes"
|
|
return timeleftstring
|
|
|
|
/datum/admins/proc/unbanpanel()
|
|
var/count = 0
|
|
var/dat
|
|
//var/dat = "<HR><B>Unban Player:</B> \blue(U) = Unban , (E) = Edit Ban\green (Total<HR><table border=1 rules=all frame=void cellspacing=0 cellpadding=3 >"
|
|
Banlist.cd = "/base"
|
|
for (var/A in Banlist.dir)
|
|
count++
|
|
Banlist.cd = "/base/[A]"
|
|
var/ref = "\ref[src]"
|
|
var/key = Banlist["key"]
|
|
var/id = Banlist["id"]
|
|
var/ip = Banlist["ip"]
|
|
var/reason = Banlist["reason"]
|
|
var/by = Banlist["bannedby"]
|
|
var/expiry
|
|
if(Banlist["temp"])
|
|
expiry = GetExp(Banlist["minutes"])
|
|
if(!expiry) expiry = "Removal Pending"
|
|
else expiry = "Permaban"
|
|
|
|
dat += text("<tr><td><A href='?src=[ref];unbanf=[key][id]'>(U)</A><A href='?src=[ref];unbane=[key][id]'>(E)</A> Key: <B>[key]</B></td><td>ComputerID: <B>[id]</B></td><td>IP: <B>[ip]</B></td><td> [expiry]</td><td>(By: [by])</td><td>(Reason: [reason])</td></tr>")
|
|
|
|
dat += "</table>"
|
|
dat = "<HR><B>Bans:</B> <FONT COLOR=blue>(U) = Unban , (E) = Edit Ban</FONT> - <FONT COLOR=green>([count] Bans)</FONT><HR><table border=1 rules=all frame=void cellspacing=0 cellpadding=3 >[dat]"
|
|
usr << browse(dat, "window=unbanp;size=875x400")
|
|
|
|
//////////////////////////////////// DEBUG ////////////////////////////////////
|
|
|
|
/proc/CreateBans()
|
|
|
|
UpdateTime()
|
|
|
|
var/i
|
|
var/last
|
|
|
|
for(i=0, i<1001, i++)
|
|
var/a = pick(1,0)
|
|
var/b = pick(1,0)
|
|
if(b)
|
|
Banlist.cd = "/base"
|
|
Banlist.dir.Add("trash[i]trashid[i]")
|
|
Banlist.cd = "/base/trash[i]trashid[i]"
|
|
Banlist["key"] << "trash[i]"
|
|
else
|
|
Banlist.cd = "/base"
|
|
Banlist.dir.Add("[last]trashid[i]")
|
|
Banlist.cd = "/base/[last]trashid[i]"
|
|
Banlist["key"] << last
|
|
Banlist["id"] << "trashid[i]"
|
|
Banlist["reason"] << "Trashban[i]."
|
|
Banlist["temp"] << a
|
|
Banlist["minutes"] << CMinutes + rand(1,2000)
|
|
Banlist["bannedby"] << "trashmin"
|
|
last = "trash[i]"
|
|
|
|
Banlist.cd = "/base"
|
|
|
|
/proc/ClearAllBans()
|
|
Banlist.cd = "/base"
|
|
for (var/A in Banlist.dir)
|
|
RemoveBan(A)
|
|
|