mirror of
https://github.com/solero/houdini.git
synced 2026-01-02 01:42:42 +00:00
All column names are now lowercase
This commit is contained in:
@@ -210,5 +210,5 @@ def player_data_attribute(**attrs):
|
||||
|
||||
def player_in_room(*room_ids):
|
||||
def check_room_id(_, p):
|
||||
return p.room.ID in room_ids
|
||||
return p.room.id in room_ids
|
||||
return check(check_room_id)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from houdini import handlers
|
||||
from houdini.handlers import XMLPacket, login
|
||||
from houdini.converters import CredentialsConverter
|
||||
from houdini.converters import Credentials
|
||||
from houdini.data.penguin import Penguin
|
||||
from houdini.data.buddy import BuddyList
|
||||
from houdini.data.moderator import Ban
|
||||
@@ -17,21 +17,21 @@ from datetime import datetime
|
||||
|
||||
@handlers.handler(XMLPacket('login'))
|
||||
@handlers.allow_once()
|
||||
async def handle_login(p, credentials: CredentialsConverter):
|
||||
async def handle_login(p, credentials: Credentials):
|
||||
loop = asyncio.get_event_loop()
|
||||
|
||||
login_timestamp = time.time()
|
||||
username, password = credentials
|
||||
username, password = credentials.username, credentials.password
|
||||
p.logger.info('{} is logging in!'.format(username))
|
||||
|
||||
data = await Penguin.query.where(Penguin.Username == username).gino.first()
|
||||
data = await Penguin.query.where(Penguin.username == username).gino.first()
|
||||
|
||||
if data is None:
|
||||
p.logger.info('{} failed to login: penguin does not exist')
|
||||
await p.send_error_and_disconnect(100)
|
||||
|
||||
password_correct = await loop.run_in_executor(None, bcrypt.checkpw,
|
||||
password.encode('utf-8'), data.Password.encode('utf-8'))
|
||||
password.encode('utf-8'), data.password.encode('utf-8'))
|
||||
|
||||
ip_addr = p.peer_name[0]
|
||||
|
||||
@@ -64,16 +64,16 @@ async def handle_login(p, credentials: CredentialsConverter):
|
||||
else:
|
||||
del p.server.login_attempts[ip_addr]
|
||||
|
||||
if not data.Active:
|
||||
if not data.active:
|
||||
return await p.send_error_and_disconnect(900)
|
||||
|
||||
if data.Permaban:
|
||||
if data.permaban:
|
||||
return await p.send_error_and_disconnect(603)
|
||||
|
||||
active_ban = await Ban.query.where(Ban.PenguinID == data.ID and Ban.Expires >= datetime.now()).gino.first()
|
||||
active_ban = await Ban.query.where(Ban.penguin_id == data.id and Ban.expires >= datetime.now()).gino.first()
|
||||
|
||||
if active_ban is not None:
|
||||
hours_left = round((active_ban.Expires - datetime.now()).total_seconds() / 60 / 60)
|
||||
hours_left = round((active_ban.expires - datetime.now()).total_seconds() / 60 / 60)
|
||||
|
||||
if hours_left == 0:
|
||||
return await p.send_error_and_disconnect(602)
|
||||
@@ -86,8 +86,10 @@ async def handle_login(p, credentials: CredentialsConverter):
|
||||
login_key = Crypto.hash(random_key[::-1])
|
||||
confirmation_hash = Crypto.hash(os.urandom(24))
|
||||
|
||||
await p.server.redis.setex('{}.lkey'.format(data.ID), p.server.server_config['KeyTTL'], login_key)
|
||||
await p.server.redis.setex('{}.ckey'.format(data.ID), p.server.server_config['KeyTTL'], confirmation_hash)
|
||||
tr = p.server.redis.multi_exec()
|
||||
tr.setex('{}.lkey'.format(data.id), p.server.server_config['KeyTTL'], login_key)
|
||||
tr.setex('{}.ckey'.format(data.id), p.server.server_config['KeyTTL'], confirmation_hash)
|
||||
await tr.execute()
|
||||
|
||||
buddy_worlds = []
|
||||
world_populations = []
|
||||
@@ -97,8 +99,9 @@ async def handle_login(p, credentials: CredentialsConverter):
|
||||
for server_name, server_config in servers_config.items():
|
||||
if server_config['World']:
|
||||
server_population = await p.server.redis.get('{}.population'.format(server_name))
|
||||
server_population = (7 if int(server_population) == server_config['Capacity'] \
|
||||
else int(server_population) / (server_config['Capacity'] / 6)) if server_population else 0
|
||||
server_population = (7 if int(server_population) == server_config['Capacity']
|
||||
else int(server_population) / (server_config['Capacity'] / 6)) \
|
||||
if server_population else 0
|
||||
|
||||
server_players = await p.server.redis.smembers('{}.players'.format(server_name))
|
||||
|
||||
@@ -114,9 +117,10 @@ async def handle_login(p, credentials: CredentialsConverter):
|
||||
buddy_worlds.append(server_config['Id'])
|
||||
break
|
||||
|
||||
raw_login_data = '|'.join([str(data.ID), str(data.ID), data.Username, login_key, str(data.approval),
|
||||
raw_login_data = '|'.join([str(data.id), str(data.id), data.username, login_key, str(data.approval),
|
||||
str(data.rejection)])
|
||||
await p.send_xt('l', raw_login_data, confirmation_hash, '', '|'.join(world_populations), '|'.join(buddy_worlds), data.Email)
|
||||
await p.send_xt('l', raw_login_data, confirmation_hash, '', '|'.join(world_populations), '|'.join(buddy_worlds),
|
||||
data.email)
|
||||
|
||||
handle_version_check = login.handle_version_check
|
||||
handle_random_key = login.handle_random_key
|
||||
|
||||
Reference in New Issue
Block a user