Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local GTFO='gtfo'
- module(GTFO,package.seeall)
- _VERSION="Get the fuck off banner module 0.1"
- DEF_DENY_REASON="You have no access to here"
- TYPE_ID=0
- TYPE_IP=1
- TYPE_NAME=2
- TYPE_PASS=3
- NULL="NULL"
- cfg={}
- cfg.UsePasswords=true
- if !gatekeeper then
- require'gatekeeper'
- if !gatekeeper then error"GTFO: No gatekeeper found, breakage!" end
- end
- if !sql then error"GTFO: Umm, sqlite.dll missing?" end
- local Q=sql.Query
- local function ErrCheck()
- local err = sql.LastError()
- if err then
- debug.Trace()
- error(tostring(err))
- end
- end
- Q "CREATE TABLE IF NOT EXISTS gtfo_id ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, sid STRING, rid INTEGER, flags INTEGER );"
- ErrCheck()
- Q "CREATE TABLE IF NOT EXISTS gtfo_ip ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, uip STRING, nid INTEGER, rid INTEGER, flags INTEGER );"
- ErrCheck()
- Q "CREATE TABLE IF NOT EXISTS gtfo_name ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, usr STRING, rid INTEGER, flags INTEGER );"
- ErrCheck()
- Q "CREATE TABLE IF NOT EXISTS gtfo_pass ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, pass STRING, rid INTEGER, flags INTEGER );"
- ErrCheck()
- Q "CREATE TABLE IF NOT EXISTS gtfo_rids ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, reason STRING );"
- ErrCheck()
- --MsgN"gtfo: Created databases!"
- function GDeny(reason)
- if type(reason) == "number" then
- --sql...
- end
- reason=tostring(reason) -- if you want to give player objects or such as reason, feel free to, lol
- if !reason or reason=="" then reason = DEF_DENY_REASON end
- return {false, reason }
- end
- function GAccept()
- return {true, "welcome master >:D" }
- end
- /*
- TYPE_ID=0
- TYPE_IP=1
- TYPE_NAME=2
- */
- local SteamCache=nil
- local IPCache=nil
- local NameCache=nil
- -------------------------
- -- Gets all the bans from cache or sql
- -------------------------
- function Get(BanType,feed)
- if BanType == TYPE_ID then
- if !SteamCache then
- SteamCache = Q( "SELECT sid,rid,flags FROM gtfo_id WHERE sid = "..SQLStr(tostring(feed)) )
- ErrCheck()
- end
- return SteamCache
- elseif BanType == TYPE_IP then
- if !IPCache then
- IPCache = Q( "SELECT uip,rid,flags FROM gtfo_ip" )
- ErrCheck()
- end
- return IPCache
- elseif BanType == TYPE_NAME then
- if !NameCache then
- NameCache = Q( "SELECT usr,rid,flags FROM gtfo_name" )
- ErrCheck()
- end
- return NameCache
- elseif BanType == TYPE_PASS then -- cba to cache
- local passwords = Q( "SELECT usr,rid,flags FROM gtfo_pass" )
- ErrCheck()
- return passwords
- end
- return nil
- end
- local function GetLatest(db)
- local last = Q("SELECT * from "..tostring(db).." order by id desc limit 1;")
- ErrCheck()
- return last
- end
- local function SqlIns(db,types,...)
- local values={...}
- local str="INSERT INTO "..db.." ( "..types.." ) VALUES ( "
- for k,value in pairs(values) do
- local v= tostring(value)
- if v == nil or v == "nil" then
- debug.Trace()
- ErrorNoHalt"Value error"
- end
- str=str..(k!=1 and "," or "")..SQLStr(tostring(value))
- end
- str=str.." )"
- print("q:"..str)
- local result = Q(str)
- ErrCheck()
- return result
- end
- -------------------------
- -- Adds a ban, no error checking here!
- -------------------------
- function Add(BanType,mask,reason,flags)
- if BanType == TYPE_ID then
- SteamCache=nil
- SqlIns("gtfo_id","sid,rid,flags",mask,reason,flags)
- return GetLatest"gtfo_id"
- elseif BanType == TYPE_IP then
- IPCache=nil
- SqlIns("gtfo_ip","uip,rid,flags",mask,reason,flags)
- return GetLatest"gtfo_ip"
- elseif BanType == TYPE_NAME then
- NameCache=nil
- SqlIns("gtfo_name","usr,rid,flags",mask,reason,flags)
- return GetLatest"gtfo_name"
- elseif BanType == TYPE_PASS then
- SqlIns("gtfo_pass","pass,rid,flags",mask,reason,flags)
- return GetLatest"gtfo_pass"
- end
- return ErrorNoHalt"wrong type"
- end
- -------------------------
- -- Delets a ban by id
- -------------------------
- function Del(BanType,id)
- if BanType == TYPE_ID then
- SteamCache=nil
- return Q( "DELETE FROM gtfo_id WHERE id = "..tostring(tonumber(id)) ),sql.LastError()
- elseif BanType == TYPE_IP then
- IPCache=nil
- return Q( "DELETE FROM gtfo_ip WHERE id = "..tostring(tonumber(id)) ),sql.LastError()
- elseif BanType == TYPE_NAME then
- NameCache=nil
- return Q( "DELETE FROM gtfo_name WHERE id = "..tostring(tonumber(id)) ) ,sql.LastError()
- else
- return ErrorNoHalt"wrong id"
- end
- error"bla :D"
- end
- -------------------------
- -- Ban reasons on separate table
- -------------------------
- reason={}
- function reason.Add(reason)
- Q("INSERT INTO gtfo_rids ( reason ) VALUES ( "..
- SQLStr(tostring(reason))..
- " )" )
- ErrCheck()
- return GetLatest"gtfo_rids"
- end
- function reason.Get(id)
- if !id then
- local result = Q( "SELECT reason FROM gtfo_rids" )
- ErrCheck()
- return result
- end
- local result = Q( "SELECT reason FROM gtfo_rids WHERE id = "..tostring(tonumber(id)) )
- ErrCheck()
- return result
- end
- function reason.Del(id)
- Q( "DELETE FROM gtfo_rids WHERE id = "..tostring(tonumber(id)) )
- ErrCheck()
- end
- -------------------------
- -- Hook function to hook to the core connect :)
- -------------------------
- function GateCheck(name, pass, steam, ip)
- Msg(Format( "User \"%s\" joining with%s id %s from %s: ",
- name,
- (pass != "") and (" password " .. pass .. " and") or "",
- steam,
- ip
- ))
- a,b,c,d=string.gmatch(ip,'(%d+).(%d+).(%d+).(%d+)')()
- local realip=a..'.'..b..'.'..c..'.'..d -- baww :|
- local bannedips = Get(TYPE_IP) or {}
- for _,v in pairs(bannedips) do
- PrintTable(bannedips)
- if v.uip==realip then
- print"Matched ip, accepting."
- return GAccept()
- end
- end
- return GDeny("Denied")
- end
- function SafeDrop(ply,reason)
- local uid=nil
- if type(ply) == "player" then
- if !ply or !ply:IsValid() then return end
- uid=ply:UserID()
- else
- uid=tonumber(ply)
- end
- if !uid then return ErrorNoHalt"Gtfo: SafeDrop: User not found" end
- local reason=reason or "Kicked!"
- reason = string.sub(reason,0,200) -- safe length is? TODO
- gatekeeper.Drop(uid,reason)
- end
- function load()
- hook.Add("PlayerPasswordAuth", GTFO, GateCheck )
- MsgN"gtfo: Loaded"
- end
- load()
- function unload()
- SteamCache=nil
- IPCache=nil
- NameCache=nil
- hook.Remove("PlayerPasswordAuth", GTFO )
- MsgN"gtfo: Unloaded"
- end
Add Comment
Please, Sign In to add comment