71 lines
2.0 KiB
Python
71 lines
2.0 KiB
Python
import sys
|
|
import traceback
|
|
|
|
import tornado.gen
|
|
import tornado.web
|
|
from raven.contrib.tornado import SentryMixin
|
|
|
|
from common.log import logUtils as log
|
|
from common.ripple import userUtils
|
|
from common.web import requestsManager
|
|
from constants import exceptions
|
|
from objects import glob
|
|
from common.sentry import sentry
|
|
|
|
MODULE_NAME = "bancho_connect"
|
|
class handler(requestsManager.asyncRequestHandler):
|
|
"""
|
|
Handler for /web/bancho_connect.php
|
|
"""
|
|
@tornado.web.asynchronous
|
|
@tornado.gen.engine
|
|
@sentry.captureTornado
|
|
def asyncGet(self):
|
|
try:
|
|
# Get request ip
|
|
ip = self.getRequestIP()
|
|
|
|
# Argument check
|
|
if not requestsManager.checkArguments(self.request.arguments, ["u", "h"]):
|
|
raise exceptions.invalidArgumentsException(MODULE_NAME)
|
|
|
|
# Get user ID
|
|
username = self.get_argument("u")
|
|
userID = userUtils.getID(username)
|
|
if userID is None:
|
|
raise exceptions.loginFailedException(MODULE_NAME, username)
|
|
|
|
# Check login
|
|
log.info("{} ({}) wants to connect".format(username, userID))
|
|
if not userUtils.checkLogin(userID, self.get_argument("h"), ip):
|
|
raise exceptions.loginFailedException(MODULE_NAME, username)
|
|
|
|
# Ban check
|
|
if userUtils.isBanned(userID):
|
|
raise exceptions.userBannedException(MODULE_NAME, username)
|
|
|
|
# Lock check
|
|
if userUtils.isLocked(userID):
|
|
raise exceptions.userLockedException(MODULE_NAME, username)
|
|
|
|
# 2FA check
|
|
if userUtils.check2FA(userID, ip):
|
|
raise exceptions.need2FAException(MODULE_NAME, username, ip)
|
|
|
|
# Update latest activity
|
|
userUtils.updateLatestActivity(userID)
|
|
|
|
# Get country and output it
|
|
country = glob.db.fetch("SELECT country FROM users_stats WHERE id = %s", [userID])["country"]
|
|
self.write(country)
|
|
except exceptions.invalidArgumentsException:
|
|
pass
|
|
except exceptions.loginFailedException:
|
|
self.write("error: pass\n")
|
|
except exceptions.userBannedException:
|
|
pass
|
|
except exceptions.userLockedException:
|
|
pass
|
|
except exceptions.need2FAException:
|
|
self.write("error: verify\n")
|