Python1320

Python1320

Feb 20th, 2010
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 6.29 KB | None | 0 0
  1. local GTFO='gtfo'
  2. module(GTFO,package.seeall)
  3. _VERSION="Get the fuck off banner module 0.1"
  4.  
  5.  
  6. DEF_DENY_REASON="You have no access to here"
  7. TYPE_ID=0
  8. TYPE_IP=1
  9. TYPE_NAME=2
  10. TYPE_PASS=3
  11. NULL="NULL"
  12. cfg={}
  13. cfg.UsePasswords=true
  14.  
  15.  
  16. if !gatekeeper then
  17.     require'gatekeeper'
  18.     if !gatekeeper then error"GTFO: No gatekeeper found, breakage!" end
  19. end
  20.  
  21. if !sql then error"GTFO: Umm, sqlite.dll missing?" end
  22. local Q=sql.Query
  23.  
  24. local function ErrCheck()
  25.     local err = sql.LastError()
  26.     if err then
  27.         debug.Trace()
  28.         error(tostring(err))
  29.     end
  30. end
  31.  
  32. Q   "CREATE TABLE IF NOT EXISTS gtfo_id ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, sid STRING, rid INTEGER, flags INTEGER );"
  33. ErrCheck()
  34. Q   "CREATE TABLE IF NOT EXISTS gtfo_ip ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, uip STRING, nid INTEGER, rid INTEGER, flags INTEGER );"
  35. ErrCheck()
  36. Q "CREATE TABLE IF NOT EXISTS gtfo_name ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, usr STRING, rid INTEGER, flags INTEGER );"
  37. ErrCheck()
  38. Q "CREATE TABLE IF NOT EXISTS gtfo_pass ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, pass STRING, rid INTEGER, flags INTEGER );"
  39. ErrCheck()
  40. Q "CREATE TABLE IF NOT EXISTS gtfo_rids ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, reason STRING );"
  41. ErrCheck()
  42.  
  43.         --MsgN"gtfo: Created databases!"
  44.        
  45. function GDeny(reason)
  46.     if type(reason) == "number" then
  47.         --sql...
  48.     end
  49.     reason=tostring(reason) -- if you want to give player objects or such as reason, feel free to, lol
  50.     if !reason or reason=="" then reason = DEF_DENY_REASON end
  51.     return {false, reason }  
  52. end
  53.  
  54. function GAccept()
  55.     return {true, "welcome master >:D" }  
  56. end
  57.  
  58. /*
  59.     TYPE_ID=0
  60.     TYPE_IP=1
  61.     TYPE_NAME=2
  62. */
  63. local SteamCache=nil
  64. local IPCache=nil
  65. local NameCache=nil
  66.  
  67. -------------------------
  68. -- Gets all the bans from cache or sql
  69. -------------------------
  70.  
  71. function Get(BanType,feed)
  72.  
  73.     if BanType == TYPE_ID then
  74.         if !SteamCache then
  75.             SteamCache = Q( "SELECT sid,rid,flags FROM gtfo_id WHERE sid = "..SQLStr(tostring(feed)) )
  76.             ErrCheck()
  77.         end
  78.         return SteamCache
  79.     elseif BanType == TYPE_IP then
  80.    
  81.         if !IPCache then
  82.             IPCache = Q( "SELECT uip,rid,flags FROM gtfo_ip" )
  83.             ErrCheck()
  84.         end
  85.         return IPCache
  86.        
  87.     elseif BanType == TYPE_NAME then
  88.    
  89.         if !NameCache then
  90.             NameCache = Q( "SELECT usr,rid,flags FROM gtfo_name" )
  91.             ErrCheck()
  92.         end
  93.         return NameCache
  94.        
  95.     elseif BanType == TYPE_PASS then -- cba to cache
  96.  
  97.         local passwords = Q( "SELECT usr,rid,flags FROM gtfo_pass" )
  98.         ErrCheck()
  99.         return passwords
  100.        
  101.     end
  102.    
  103.     return nil
  104.  
  105. end
  106.  
  107.  
  108. local function GetLatest(db)
  109.     local last = Q("SELECT * from "..tostring(db).." order by id desc limit 1;")
  110.     ErrCheck()
  111.     return last
  112. end
  113.  
  114. local function SqlIns(db,types,...)
  115.     local values={...}
  116.     local str="INSERT INTO "..db.." ( "..types.." ) VALUES ( "
  117.     for k,value in pairs(values) do
  118.         local v= tostring(value)
  119.        
  120.         if v == nil or v == "nil" then
  121.             debug.Trace()
  122.             ErrorNoHalt"Value error"
  123.         end
  124.         str=str..(k!=1 and "," or "")..SQLStr(tostring(value))
  125.     end
  126.     str=str.." )"
  127.     print("q:"..str)
  128.     local result = Q(str)
  129.     ErrCheck()
  130.     return result
  131. end
  132.  
  133. -------------------------
  134. -- Adds a ban, no error checking here!
  135. -------------------------
  136. function Add(BanType,mask,reason,flags)
  137.  
  138.     if BanType == TYPE_ID then
  139.         SteamCache=nil
  140.         SqlIns("gtfo_id","sid,rid,flags",mask,reason,flags)
  141.         return GetLatest"gtfo_id"
  142.     elseif BanType == TYPE_IP then
  143.         IPCache=nil
  144.         SqlIns("gtfo_ip","uip,rid,flags",mask,reason,flags)
  145.         return GetLatest"gtfo_ip"
  146.     elseif BanType == TYPE_NAME then
  147.         NameCache=nil
  148.         SqlIns("gtfo_name","usr,rid,flags",mask,reason,flags)
  149.         return GetLatest"gtfo_name"
  150.     elseif BanType == TYPE_PASS then
  151.         SqlIns("gtfo_pass","pass,rid,flags",mask,reason,flags)
  152.         return GetLatest"gtfo_pass"
  153.     end
  154.    
  155.     return ErrorNoHalt"wrong type"
  156.    
  157. end
  158.  
  159. -------------------------
  160. -- Delets a ban by id
  161. -------------------------
  162. function Del(BanType,id)
  163.  
  164.     if BanType == TYPE_ID then
  165.         SteamCache=nil
  166.         return Q( "DELETE FROM gtfo_id WHERE id = "..tostring(tonumber(id)) ),sql.LastError()
  167.     elseif BanType == TYPE_IP then
  168.         IPCache=nil
  169.         return Q( "DELETE FROM gtfo_ip WHERE id = "..tostring(tonumber(id)) ),sql.LastError()
  170.     elseif BanType == TYPE_NAME then
  171.         NameCache=nil
  172.         return Q( "DELETE FROM gtfo_name WHERE id = "..tostring(tonumber(id)) ) ,sql.LastError()
  173.     else
  174.         return ErrorNoHalt"wrong id"
  175.     end
  176.    
  177.     error"bla :D"
  178.  
  179. end
  180.  
  181. -------------------------
  182. -- Ban reasons on separate table
  183. -------------------------
  184. reason={}
  185. function reason.Add(reason)
  186.     Q("INSERT INTO gtfo_rids ( reason ) VALUES ( "..
  187.     SQLStr(tostring(reason))..
  188.     " )" )
  189.     ErrCheck()
  190.     return GetLatest"gtfo_rids"
  191. end
  192.  
  193. function reason.Get(id)
  194.     if !id then
  195.         local result = Q( "SELECT reason FROM gtfo_rids" )
  196.         ErrCheck()
  197.         return result
  198.     end
  199.    
  200.     local result = Q( "SELECT reason FROM gtfo_rids WHERE id = "..tostring(tonumber(id)) )
  201.     ErrCheck()
  202.     return result
  203.    
  204. end
  205.  
  206. function reason.Del(id)
  207.     Q( "DELETE FROM gtfo_rids WHERE id = "..tostring(tonumber(id)) )
  208.     ErrCheck()
  209. end
  210.  
  211.  
  212.  
  213.  
  214. -------------------------
  215. -- Hook function to hook to the core connect :)
  216. -------------------------
  217. function GateCheck(name, pass, steam, ip)  
  218.         Msg(Format( "User \"%s\" joining with%s id %s from %s: ",
  219.             name,
  220.             (pass != "") and (" password " .. pass .. " and") or "",
  221.             steam,
  222.             ip
  223.         ))
  224.        
  225.         a,b,c,d=string.gmatch(ip,'(%d+).(%d+).(%d+).(%d+)')()
  226.         local realip=a..'.'..b..'.'..c..'.'..d -- baww :|
  227.        
  228.        
  229.         local bannedips = Get(TYPE_IP) or {}
  230.        
  231.         for _,v in pairs(bannedips) do
  232.             PrintTable(bannedips)
  233.             if v.uip==realip then
  234.                 print"Matched ip, accepting."
  235.                 return GAccept()
  236.             end
  237.         end
  238.        
  239.         return GDeny("Denied")
  240. end
  241.  
  242. function SafeDrop(ply,reason)
  243.     local uid=nil
  244.     if type(ply) == "player" then
  245.         if !ply or !ply:IsValid() then return end
  246.         uid=ply:UserID()
  247.     else
  248.         uid=tonumber(ply)
  249.     end
  250.     if !uid then return ErrorNoHalt"Gtfo: SafeDrop: User not found" end
  251.     local reason=reason or "Kicked!"
  252.     reason = string.sub(reason,0,200) -- safe length is? TODO
  253.     gatekeeper.Drop(uid,reason)
  254. end
  255.  
  256.  
  257. function load()
  258.     hook.Add("PlayerPasswordAuth", GTFO, GateCheck )
  259.     MsgN"gtfo: Loaded"
  260. end
  261. load()
  262.  
  263. function unload()
  264.     SteamCache=nil
  265.     IPCache=nil
  266.     NameCache=nil
  267.     hook.Remove("PlayerPasswordAuth", GTFO )
  268.     MsgN"gtfo: Unloaded"
  269.    
  270. end
Add Comment
Please, Sign In to add comment