async def handle_login(p, credentials: WorldCredentials): tr = p.server.redis.multi_exec() tr.get(f'{credentials.username}.lkey') tr.get(f'{credentials.username}.ckey') tr.delete(f'{credentials.username}.lkey', f'{credentials.username}.ckey') login_key, confirmation_hash, _ = await tr.execute() if login_key is None or confirmation_hash is None: return await p.close() login_key = login_key.decode() login_hash = Crypto.encrypt_password( login_key + config.client['AuthStaticKey']) + login_key if credentials.client_key != login_hash: return await p.close() if login_key != credentials.login_key or confirmation_hash.decode( ) != credentials.confirmation_hash: return await p.close() data = await Penguin.get(credentials.id) p.login_key = login_key await world_login(p, data)
async def handle_login(p, credentials: WorldCredentials): async with p.server.redis.pipeline(transaction=True) as tr: tr.get(f'{credentials.username}.lkey') tr.get(f'{credentials.username}.ckey') tr.delete(f'{credentials.username}.lkey', f'{credentials.username}.ckey') login_key, confirmation_hash, _ = await tr.execute() if login_key is None or confirmation_hash is None: return await p.close() login_key = login_key.decode() login_hash = Crypto.encrypt_password(login_key + p.server.config.auth_key) + login_key if credentials.client_key != login_hash: return await p.close() if login_key != credentials.login_key or confirmation_hash.decode( ) != credentials.confirmation_hash: return await p.close() data = await Penguin.get(credentials.id) p.login_key = login_key await world_login(p, data)
async def handle_login(p, credentials: WorldCredentials): if len(p.server.penguins_by_id) >= p.server.server_config['Capacity']: return await p.send_error_and_disconnect(103) tr = p.server.redis.multi_exec() tr.get('{}.lkey'.format(credentials.username)) tr.get('{}.ckey'.format(credentials.username)) tr.delete('{}.lkey'.format(credentials.username), '{}.ckey'.format(credentials.username)) login_key, confirmation_hash, _ = await tr.execute() if login_key is None or confirmation_hash is None: return await p.close() login_key = login_key.decode() login_hash = Crypto.encrypt_password( login_key + config.client['AuthStaticKey']) + login_key if credentials.client_key != login_hash: return await p.close() if login_key != credentials.login_key or confirmation_hash.decode( ) != credentials.confirmation_hash: return await p.close() data = await Penguin.get(credentials.id) if data is None: return await p.send_error_and_disconnect(100) if not data.active: return await p.close() if data.permaban: return await p.close() active_ban = await Ban.query.where((Ban.penguin_id == data.id) & ( Ban.expires >= datetime.now())).gino.scalar() if active_ban is not None: return await p.close() if data.id in p.server.penguins_by_id: await p.server.penguins_by_id[data.id].close() p.logger.info('{} logged in successfully'.format(data.username)) p.data = data p.login_key = login_key await p.send_xt('l')
async def handle_legacy_login(p, credentials: Credentials): tr = p.server.redis.multi_exec() tr.get(f'{credentials.username}.lkey') tr.delete(f'{credentials.username}.lkey', '{credentials.username}.ckey') login_key, _ = await tr.execute() login_key = login_key.decode() login_hash = Crypto.encrypt_password( login_key + config.client['AuthStaticKey']) + login_key if login_key is None or login_hash != credentials.password: return await p.close() data = await Penguin.query.where(Penguin.username == credentials.username ).gino.first() p.login_key = login_key await world_login(p, data)
async def handle_legacy_login(p, credentials: Credentials): async with p.server.redis.pipeline(transaction=True) as tr: tr.get(f'{credentials.username}.lkey') tr.delete(f'{credentials.username}.lkey', f'{credentials.username}.ckey') login_key, _ = await tr.execute() try: login_key = login_key.decode() except AttributeError: return await p.close() login_hash = Crypto.encrypt_password(login_key + p.server.config.auth_key) + login_key if login_key is None or login_hash != credentials.password: return await p.close() data = await Penguin.query.where(Penguin.username == credentials.username ).gino.first() p.login_key = login_key await world_login(p, data)