Add license

This commit is contained in:
Howl
2016-06-10 13:15:42 +02:00
committed by Nyo
parent f0f90b0c53
commit 93508624c4
7 changed files with 85 additions and 39 deletions

View File

@@ -10,7 +10,8 @@ import time
import threading
class token:
"""Osu Token object
"""
Osu Token object
token -- token string
userID -- userID associated to that token
@@ -33,13 +34,14 @@ class token:
"""
def __init__(self, __userID, __token = None):
def __init__(self, __userID, token = None, ip = ""):
"""
Create a token object and set userID and token
__userID -- user associated to this token
__token -- if passed, set token to that value
token -- if passed, set token to that value
if not passed, token will be generated
ip -- client ip. optional.
"""
# Set stuff
@@ -48,7 +50,7 @@ class token:
self.rank = userHelper.getRankPrivileges(self.userID)
self.loginTime = int(time.time())
self.pingTime = self.loginTime
self.lock = threading.Lock() # <-- Sync primitive
self.lock = threading.Lock() # Sync primitive
# Default variables
self.spectators = []
@@ -60,6 +62,7 @@ class token:
self.actionMd5 = ""
self.actionMods = 0
self.gameMode = gameModes.std
self.ip = ip
self.country = 0
self.location = [0,0]
self.awayMessage = ""
@@ -71,14 +74,18 @@ class token:
# Spam protection
self.longMessageWarning = False
self.spamRate = 0
self.lastMessagetime = 0
#self.lastMessagetime = 0
# Generate/set token
if __token != None:
self.token = __token
if token != None:
self.token = token
else:
self.token = str(uuid.uuid4())
# If we have a valid ip, save bancho session in DB so we can cache LETS logins
if ip != "":
userHelper.saveBanchoSession(self.userID, self.ip)
def enqueue(self, __bytes):
"""

View File

@@ -1,8 +1,10 @@
from objects import osuToken
from objects import glob
import time
import threading
from events import logoutEvent
from helpers import logHelper as log
from helpers import userHelper
class tokenList:
"""
@@ -17,73 +19,77 @@ class tokenList:
"""
self.tokens = {}
def addToken(self, __userID):
def addToken(self, userID, ip = ""):
"""
Add a token object to tokens list
__userID -- user id associated to that token
userID -- user id associated to that token
return -- token object
"""
newToken = osuToken.token(__userID)
newToken = osuToken.token(userID, ip=ip)
self.tokens[newToken.token] = newToken
return newToken
def deleteToken(self, __token):
def deleteToken(self, token):
"""
Delete a token from token list if it exists
__token -- token string
token -- token string
"""
if __token in self.tokens:
self.tokens.pop(__token)
if token in self.tokens:
# Delete session from DB
userHelper.deleteBanchoSessions(self.tokens[token].userID, self.tokens[token].ip)
# Pop token from list
self.tokens.pop(token)
def getUserIDFromToken(self, __token):
def getUserIDFromToken(self, token):
"""
Get user ID from a token
__token -- token to find
token -- token to find
return: false if not found, userID if found
"""
# Make sure the token exists
if __token not in self.tokens:
if token not in self.tokens:
return False
# Get userID associated to that token
return self.tokens[__token].userID
return self.tokens[token].userID
def getTokenFromUserID(self, __userID):
def getTokenFromUserID(self, userID):
"""
Get token from a user ID
__userID -- user ID to find
userID -- user ID to find
return -- False if not found, token object if found
"""
# Make sure the token exists
for _, value in self.tokens.items():
if value.userID == __userID:
if value.userID == userID:
return value
# Return none if not found
return None
def getTokenFromUsername(self, __username):
def getTokenFromUsername(self, username):
"""
Get token from a username
__username -- username to find
username -- username to find
return -- False if not found, token object if found
"""
# lowercase
who = __username.lower()
who = username.lower()
# Make sure the token exists
for _, value in self.tokens.items():
@@ -94,16 +100,16 @@ class tokenList:
return None
def deleteOldTokens(self, __userID):
def deleteOldTokens(self, userID):
"""
Delete old userID's tokens if found
__userID -- tokens associated to this user will be deleted
userID -- tokens associated to this user will be deleted
"""
# Delete older tokens
for key, value in self.tokens.items():
if value.userID == __userID:
if value.userID == userID:
# Delete this token from the dictionary
self.tokens.pop(key)
@@ -111,36 +117,36 @@ class tokenList:
break
def multipleEnqueue(self, __packet, __who, __but = False):
def multipleEnqueue(self, packet, who, but = False):
"""
Enqueue a packet to multiple users
__packet -- packet bytes to enqueue
__who -- userIDs array
__but -- if True, enqueue to everyone but users in __who array
packet -- packet bytes to enqueue
who -- userIDs array
but -- if True, enqueue to everyone but users in who array
"""
for _, value in self.tokens.items():
shouldEnqueue = False
if value.userID in __who and not __but:
if value.userID in who and not but:
shouldEnqueue = True
elif value.userID not in __who and __but:
elif value.userID not in who and but:
shouldEnqueue = True
if shouldEnqueue:
value.enqueue(__packet)
value.enqueue(packet)
def enqueueAll(self, __packet):
def enqueueAll(self, packet):
"""
Enqueue packet(s) to every connected user
__packet -- packet bytes to enqueue
packet -- packet bytes to enqueue
"""
for _, value in self.tokens.items():
value.enqueue(__packet)
value.enqueue(packet)
def usersTimeoutCheckLoop(self, __timeoutTime = 100, __checkTime = 100):
"""
@@ -182,3 +188,10 @@ class tokenList:
# Schedule a new check (endless loop)
threading.Timer(10, self.spamProtectionResetLoop).start()
def deleteBanchoSessions(self):
"""
Truncate bancho_sessions table.
Call at bancho startup to delete old cached sessions
"""
glob.db.execute("TRUNCATE TABLE bancho_sessions")