diff --git a/gamespy/gs_database.py b/gamespy/gs_database.py index bc26370..190891d 100644 --- a/gamespy/gs_database.py +++ b/gamespy/gs_database.py @@ -117,6 +117,7 @@ def initialize_database(self): tx.nonquery("CREATE TABLE IF NOT EXISTS gamestat_profile (profileid INT, dindex TEXT, ptype TEXT, data TEXT)") tx.nonquery("CREATE TABLE IF NOT EXISTS gameinfo (profileid INT, dindex TEXT, ptype TEXT, data TEXT)") tx.nonquery("CREATE TABLE IF NOT EXISTS nas_logins (userid TEXT, authtoken TEXT, data TEXT)") + tx.nonquery("CREATE TABLE IF NOT EXISTS ap_banned (bssid TEXT, timestamp INT(11), reason TEXT, ubtime INT(11))") tx.nonquery("CREATE TABLE IF NOT EXISTS ip_banned (ipaddr TEXT, timestamp INT(11), reason TEXT, ubtime INT(11))") tx.nonquery("CREATE TABLE IF NOT EXISTS console_macadr_banned (macadr TEXT, timestamp INT(11), reason TEXT, ubtime INT(11))") tx.nonquery("CREATE TABLE IF NOT EXISTS console_csnum_banned (csnum TEXT)") @@ -406,6 +407,12 @@ def get_nas_login_from_userid(self, userid): else: return json.loads(r["data"]) + def is_ap_banned(self,postdata): + if 'bssid' in postdata: + with Transaction(self.conn) as tx: + row = tx.queryone("SELECT COUNT(*) FROM ap_banned WHERE bssid = ? AND ubtime > ?",(postdata['bssid'],time.time(),)) + return int(row[0]) > 0 + def is_ip_banned(self,postdata): with Transaction(self.conn) as tx: row = tx.queryone("SELECT COUNT(*) FROM ip_banned WHERE ipaddr = ? AND ubtime > ?",(postdata['ipaddr'],time.time(),)) diff --git a/nas_server.py b/nas_server.py index a73f1e3..d59ba9c 100644 --- a/nas_server.py +++ b/nas_server.py @@ -126,8 +126,17 @@ def do_POST(self): ret = self.dict_to_str(ret) elif action == "login": - if self.server.db.is_ip_banned(post): - logger.log(logging.DEBUG, "login denied for banned user "+str(post)) + if self.server.db.is_ap_banned(post): + logger.log(logging.DEBUG, "login denied for banned user (AP is banned) "+str(post)) + ret = { + "datetime": time.strftime("%Y%m%d%H%M%S"), + "returncd": "3917", + "locator": "gamespy.com", + "retry": "1", + "reason": "User banned." + } + elif self.server.db.is_ip_banned(post): + logger.log(logging.DEBUG, "login denied for banned user (IP is banned) "+str(post)) ret = { "datetime": time.strftime("%Y%m%d%H%M%S"), "returncd": "3917",